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创建关键业务的多数据中心应用的更多相关文章

  1. 关于mongodb创建索引的一些经验总结(转)

    查看语句执行计划: explain() 在mongodb3+版本后输出格式发生改变: 详情参见:https://docs.mongodb.com/v3.0/reference/method/curso ...

  2. 内存回收导致关键业务抖动案例分析-论云原生OS内存QoS保障

    蒋彪,腾讯云高级工程师,10+年专注于操作系统相关技术,Linux内核资深发烧友.目前负责腾讯云原生OS的研发,以及OS/虚拟化的性能优化工作. 导语 云原生场景,相比于传统的IDC场景,业务更加复杂 ...

  3. 上mongodb创建一些吸取的经验教训指数

    想来接触mongodb它已经快一年了,对于其指数已经积累了很多的经验,知识,以这个夜黑风高的优势,放mongodb总结一番吧. 一,索引介绍 mongodb具有两类索引,分别为单键索引和复合索引. 1 ...

  4. MongoDb 创建、更新以及删除文档常用命令

    mongodb由C++写就,其名字来自humongous这个单词的中间部分,从名字可见其野心所在就是海量数据的处理.关于它的一个最简洁描述为:scalable, high-performance, o ...

  5. Mongodb创建数据库

    基本语法 MongoDB 创建数据库的语法格式如下: use DATABASE_NAME 如果数据库不存在,则创建数据库,否则切换到指定数据库. 实例 以下实例我们创建了数据库 coderschool ...

  6. 为MongoDB创建一个Windows服务

    一:选型,根据机器的操作系统类型来选择合适的版本,使用下面的命令行查询机器的操作系统版本 wmic os get osarchitecture 二:下载并安装 附上下载链接 点击安装包,我这里是把文件 ...

  7. MongoDB 创建数据库

    语法 MongoDB 创建数据库的语法格式如下: use DATABASE_NAME 如果数据库不存在,则创建数据库,否则切换到指定数据库. 实例 以下实例我们创建了数据库 runoob: > ...

  8. mongodb创建副本集命令

    mongodb创建副本集命令 ./mongod --replSet spock --dbpath ../data --smallfiles > config ={... "_id&qu ...

  9. linux环境给mongodb创建索引

    首先我们来了解索引,如果有基础的可以直接看最后面的操作. 可参照 DoNotStop 的CSDN 博客 ,全文地址请点击: https://blog.csdn.net/u013725455/artic ...

随机推荐

  1. C语言范例学习06-上

    第六章 文件操作 前言:第五章是C语言在数学上的一些应用,我觉得没有必要,便跳过了.这章正如我标题所写的,是C语言在文件上的操作.学习了这个后,你们可以自行编辑一些所需的快捷程序,来实现一些既定的目的 ...

  2. 共60课:Python基础教程

    简介: 你会看到一堆下载链接.我们就选"Python 2.7.5 Windows Installer",如果是64位系统的同学选下面那个"Python 2.7.5 Win ...

  3. Progressive Web Applications

    Progressive Web Applications take advantage of new technologies to bring the best of mobile sites an ...

  4. JavaScript字符串转换成数字的三种方法

    在js读取文本框或者其它表单数据的时候获得的值是字符串类型的,例如两个文本框a和b,如果获得a的value值为11,b的value值为9 ,那么a.value要小于b.value,因为他们都是字符串形 ...

  5. gulp不完全入门教程

    引言 gulp 是基于 Nodejs 的自动任务运行器,能自动化地完成javascript/coffee/sass/less/html/image/css等文件的的测试.检查.合并.压缩.格式化.浏览 ...

  6. POJ 1659 Frogs' Neighborhood(可图性判定—Havel-Hakimi定理)【超详解】

    Frogs' Neighborhood Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 9897   Accepted: 41 ...

  7. HDU6038-Function-数学+思维-2017多校Team01

    学长讲座讲过的,代码也讲过了,然而,当时上课没来听,听代码的时候也一脸o((⊙﹏⊙))o 我的妈呀,语文不好是硬伤,看题意看了好久好久好久(死一死)... 数学+思维题,代码懂了,也能写出来,但是还是 ...

  8. flume1.8 开发指南学习感悟

    概述: Apache Flume是一个分布式.可用的系统,用于从许多不同的sources有效的收集并移动大量日志数据用于集中存储数据. 架构及数据流动模型: flume实际上就是一个Agent.Age ...

  9. 应用中Token的作用

    Token 的作用 Token,就是令牌,最大的特点就是随机性,不可预测.一般黑客或软件无法猜测出来. 那么,Token有什么作用?又是什么原理呢? Token一般用在两个地方: 1)防止表单重复提交 ...

  10. 我的第一个python web开发框架(20)——产品发布(部署到服务器)

    首先按上一章节所讲述的,将服务器环境安装好以后,接下来就是按步骤将网站部署到服务器上了. 我们的站点是前后端分离的,所以需要部署两个站点.首先来发布前端站点. 部署前端站点 输入命令进入svn管理文件 ...