易趣:使用MongoDB创建关键业务的多数据中心应用
eBay:使用MongoDB创建关键业务的多数据中心应用
作为全球前十的零售品牌,eBay的活跃用户有一亿七千多万,并拥有跨越全世界190个市场的10亿购物清单,这样的规模下,eBay绝对不允许出现宕机的情况。这也就是为什么公司会把依赖于MongoDB提供企业级平台标准以及面向用户的应用。
在今年的MongoDB World conference大会上,eBay的首席NoSQL DBA,Feng Qu,为大家展示了他以及他的团队开发的用来支持企业级MongoDB部署的一整套架构—弹性应用的实用设计模式。
Qu先生首先探讨了“可用性”这个概念在最近几年的变化。在过去,网址进行周期性的定时停服维护是正常的,但是,最近几年,随着如今服务的全球化,用户以及企业都不再接受这样的停服操作。除此之外,大部分组织机构把他们的服务部署在商业硬件平台而不是之前的Sun Solaris / Sparc 。商业硬件相对更加便宜,但是出现问题的频率也相对较高。这些因素都实质上影响着软件团队对可用性的看法。这也eBay要创建“弹性设计模式”的初衷,就是要创建最佳的数据库系统可以最大化平均失效时间(MTTF)同时最小化平均恢复时间(MTTR)。
开发人员创建应用的时候可以选择五种企业认可的数据库标准。除了MongoDB,还可以选择oracle和MySQL这样的关系型数据库以及另外两种nosql数据库系统。Qu先生的团队会为他们的选择提一些意见,保证所选的数据库系统可以支撑数据读取模式、用户压力等等。
eBay目前运行着3000多非关系型数据库实例,支撑着大量应用以及应用之间PB级别的数据传输。在过去,oracle是记录系统,非关系型数据库只维护一些临时数据,现在非关系型数据库的场景已经成熟,不仅拥有一致性、具体到点的备份以及及时恢复性,MongoDB在eBay中的有些场景中也可作为记录系统。
尽管eBay的非关系型数据库提供内置的故障弹性,他们也可以选择不同的设计权衡来影响应用的表现。DBA在选择时主要是考虑以下几个方面:可用性、一致性、持久性、可恢复性、伸缩性以及性能。例如,使用点对点的无主设计的nosql数据库在一个节点故障后必须启动数据修复和重新平衡的过程,这些过程的代价很大。重新平衡的进程会严重影响系统的吞吐量和延迟,客户端等待恢复的时候会造成连接堵塞,进而导致应用出现故障。为了避免这种情况,eBay在无主数据库的上层增加了一个应用层面的分片,这个方法最初是为oracle设计的。DBA使用这种方式可以把一个大的集群分解成一系列的子集群,把重建的负荷放在个别节点上,只影响个别查询操作。正是为了应对不同类型的数据库行为,eBay才建立的弹性设计模式。
Qu先生为我们展示了下图的MongoDB弹性设计模式
在这种设计模式下,MongoDB复制集的7个节点分布在eBay在美国的三个不同的数据中心。这种模式可以在主节点遇到故障时,数据库集群可以保持可用性。可以为MongoDB的复制集成员分配优先级,这个优先级可以决定主节点遇到故障后哪个次节点可以被推举为新的主节点。例如,可以设定在主节点故障后,位于DC1的节点可以优先被选举为主节点。只有DC1中多有的节点都出现故障,DC2中的成员才可以被选举为主节点,当然新的节点选举的依据是,从原来节点中同步到最新的数据的节点才是主节点。这种模式的一个延伸做法是使用MongoDB的“大多数写入关注”来保证跨数据中心的写入持久性。
MongoDB的标准设计模式是eBay的“高密集、高可用读取模式”的基础,此模式用于支撑eBay的产品目录模块。为了应对产品目录模块的压力,需要把MongoDB的复制集成员扩展到50个,为读取扩展性以及弹性提供了分布式数据架构。
eBay开发了“高性能读写模式”以支撑高密度的写入压力,这种模式是把MongoDB集群的分片服务器分布在美国不同数据中心。
同样,开发人员可以对这种模式具体的读写关注进行设置,调整系统持久性以及弹性以满足不同应用的需求。
Qu先生指出,随着MongoDB的功能的增强,MongoDB可以用来满足更多的应用需求:
l MongoDB3.4中引入的zone sharding功能可以使eBay支撑那些对分布式以及持续写入可用性要求较高的应用。
l 即将在MongoDB3.6中发布的可重写操作,可以减少应用端的异常处理代码
如果想深入了解eBay的设计模式,可以参考Feng Qu在MongoDB大会上的分享。
易趣:使用MongoDB创建关键业务的多数据中心应用的更多相关文章
- 关于mongodb创建索引的一些经验总结(转)
查看语句执行计划: explain() 在mongodb3+版本后输出格式发生改变: 详情参见:https://docs.mongodb.com/v3.0/reference/method/curso ...
- 内存回收导致关键业务抖动案例分析-论云原生OS内存QoS保障
蒋彪,腾讯云高级工程师,10+年专注于操作系统相关技术,Linux内核资深发烧友.目前负责腾讯云原生OS的研发,以及OS/虚拟化的性能优化工作. 导语 云原生场景,相比于传统的IDC场景,业务更加复杂 ...
- 上mongodb创建一些吸取的经验教训指数
想来接触mongodb它已经快一年了,对于其指数已经积累了很多的经验,知识,以这个夜黑风高的优势,放mongodb总结一番吧. 一,索引介绍 mongodb具有两类索引,分别为单键索引和复合索引. 1 ...
- MongoDb 创建、更新以及删除文档常用命令
mongodb由C++写就,其名字来自humongous这个单词的中间部分,从名字可见其野心所在就是海量数据的处理.关于它的一个最简洁描述为:scalable, high-performance, o ...
- Mongodb创建数据库
基本语法 MongoDB 创建数据库的语法格式如下: use DATABASE_NAME 如果数据库不存在,则创建数据库,否则切换到指定数据库. 实例 以下实例我们创建了数据库 coderschool ...
- 为MongoDB创建一个Windows服务
一:选型,根据机器的操作系统类型来选择合适的版本,使用下面的命令行查询机器的操作系统版本 wmic os get osarchitecture 二:下载并安装 附上下载链接 点击安装包,我这里是把文件 ...
- MongoDB 创建数据库
语法 MongoDB 创建数据库的语法格式如下: use DATABASE_NAME 如果数据库不存在,则创建数据库,否则切换到指定数据库. 实例 以下实例我们创建了数据库 runoob: > ...
- mongodb创建副本集命令
mongodb创建副本集命令 ./mongod --replSet spock --dbpath ../data --smallfiles > config ={... "_id&qu ...
- linux环境给mongodb创建索引
首先我们来了解索引,如果有基础的可以直接看最后面的操作. 可参照 DoNotStop 的CSDN 博客 ,全文地址请点击: https://blog.csdn.net/u013725455/artic ...
随机推荐
- 阿里mysql同步工具otter的docker镜像
https://github.com/dearplain/otter_manager https://github.com/dearplain/otter_node 本人开发的小巧docker镜像,根 ...
- COM学习(三)——COM的跨语言
COM是基于二进制的组件模块,从设计之初就以支持所有语言作为它的一个目标,这篇文章主要探讨COM的跨语言部分. idl文件 一般COM接口的实现肯定是以某一具体语言来实现的,比如说使用VC++语言,这 ...
- 《精通Linux C编程》1.3Linux系统的常用命令-笔记
[toc] 1.3.1了解Shell Linux常用命令的运行环境就是Shell,它是一种命令解析器,在用户和操作系统之间提供了一个交互接口. 用户在命令行输入命令,然后Shell对该命令进行解析并将 ...
- vim保存时提示: 无法打开并写入文件
命名内容已经写入,但是不知怎的就是没法保存,估计是权限不足的问题. 切换到root用户,进行了同样的操作,发现没有该问题了. 经验教训:编辑配置文件时,记得切换到root用户进行编辑.
- [转]解析多级json数据为list中嵌套一级字典的形式
#!/usr/bin/env python # encoding: utf-8 import json def read(obj,key): collect = list() for k in obj ...
- Inno Setup 自定义界面心得
因为项目需要,需要打 windows 安装包,要求安装界面完全按照需求来.作为没接触过这块儿的服务端宝宝,在此期间踩了很多坑. 坑不提也罢,最终结果圆满,记录下与大部分网上PO出来的做法不太一样的小心 ...
- SpringBoot+Mybatis+Freemark 最简单的例子
springboot-sample 实现最简单的 SpringBoot + Mybatis + Freemarker 网页增删改查功能,适合新接触 Java 和 SpringBoot 的同学参考 代码 ...
- Codeforces 839B Game of the Rows【贪心】
B. Game of the Rows time limit per test:1 second memory limit per test:256 megabytes input:standard ...
- 2017ecjtu-summer training #4 UESTC 1599
题目链接 http://acm.uestc.edu.cn/#/problem/show/1599 题意 n个数 每次合并最小的两个数加到sum中,直到只剩一个数为止 常规解会超时,后来想到了用 ...
- ehcachexml文件解释
怎么修改默认配置