共计 1985 个字符,预计需要花费 5 分钟才能阅读完成。
导读 | 作为世界前十十个全球零售品牌,拥有 1.7 亿活跃买家和 10 亿在线市场,eBay 无法承受系统停机带来的损失。这就是为什么公司依靠 MongoDB 作为其核心企业数据平台标准之一,为运行 ebay.com 的多个面向客户的应用程序提供支持。在今年的 MongoDB 全球大会上,eBay 的首席 NoSQL DBA 曲峰提供了 弹性应用程序的实用设计模式 — 他的团队开发的一套支持企业级 MongoDB 部署的架构蓝图。 |
曲先生开始讨论多年来可用性概念的变化。过去,网站可以接受每周维护的预定停机时间。随着当前服务的全球化,用户或业务都不会接受如此频繁的停机!此外,大多数公司现在在商业硬件平台上构建其服务,而不是以前的 Sun Solaris / Sparc 服务器。虽然商业硬件的成本要低得多,但是它也经常故障。这两个因素从根本上改变了工程团队如何考虑可用性,并且引导 eBay 创建其“弹性设计模式”,以建立最大化平均故障时间(Mean Time To Failure,MTTF)并最大限度地减少平均恢复时间(Mean Time To Recovery,MTTR)的数据库最佳实践。
为了构建应用程序,eBay 开发人员可以从五个公认的数据库标准中进行选择。除了 MongoDB,团队还可以选择使用 Oracle 或 MySQL 关系数据库和两个 NoSQL 数据库。曲先生的 DBA 团队为适当的数据库选择提供指导,根据应用程序的数据访问模式、用户负载、数据类型等进行选择。
eBay 目前运行超过 3000 个非关系型数据库实例,为一系列应用程序提供支持,可在其间管理数 PB 数据。在过去,Oracle 是“记录系统”,而非关系型数据库则处理“参与系统”中使用的临时数据。然而,非关系型数据库环境已经成熟。通过一致的时间点备份和恢复,MongoDB 现在也在 eBay 上服务于记录系统的用例。
虽然 eBay 的所有非关系数据库选择都提供了内置的故障恢复能力,但它们可以使不同的设计影响应用程序的行为。DBA 团队在六个维度上评估这些差异:可用性、一致性、持久性、可恢复性、可扩展性和性能。例如,使用点对点、无主设计的 NoSQL 数据库具有昂贵的数据修复和重新平衡过程,必须在节点发生故障之后启动。此重新平衡过程会影响应用程序吞吐量和延迟,并可能导致连接堆叠,因为客户端等待恢复,这可能导致应用程序停机。为了减轻这些影响,eBay 不得不将最初在 Oracle 上开发的应用级产品分层在这些无数据库之上。这种方法使 DBA 团队能够将更大的集群分成一系列子集群,从而将重新平衡开销与较小的一组节点隔离开来,同时只影响了一小部分查询。eBay DBA 团队构建其弹性设计模式是针对这些不同类型的数据库行为。
曲先生介绍了 eBay 的“MongoDB 弹性设计模式”,如图 1 所示。
图 1:MongoDB 恢复架构的 eBay 设计模式(图片由 eBay 的 MongoDB 世界大会演示提供)
在这种设计模式中,一个 7 节点的 MongoDB 副本集 遍布 eBay 的三个美国数据中心。此模式可确保在主数据中心发生故障的情况下,数据库集群可以通过在剩余的数据中心之间建立一个仲裁来保持可用性。MongoDB 的副本集成员可以被分配选举优先级,以控制哪些 Slave 成员被认为是在 Primary 成员失败时的晋升候选人。例如,如果副本集 Primary 成员失败,则 DC1 本地的节点将被优先选择。只有整个 DC1 遭受中断,DC2 中的复制集成员才会被认为可以进行选举,根据哪个节点已经执行最近的写操作选择新的 Primary 成员。可以通过使用 MongoDB 的 majority write concern 来扩展这种设计模式,以使得能够跨数据中心持久的写入。
标准 MongoDB 设计模式被用作 eBay 的“阅读强化 / 高可用读取模式”的基础,该演示文稿用于为 eBay 产品目录提供支持。对于目录负载,MongoDB 副本集可以扩展到 50 个成员,为大并发量的数据分发提供了读取的可扩展性和恢复能力。
对于更多的写入密集型负载,eBay 开发出了“极高读 / 写模式”,该模式在其美国数据中心部署了一个分布式的 MongoDB 集群。
图 2:MongoDB 极高读 / 写模式的 eBay 设计模式(图片由 eBay 的 MongoDB 世界演示提供)
其次,eBay 开发人员可以使用特定的 MongoDB 写入和读取配置来设计模式,以调整最佳满足不同应用需求的持久性和一致性级别。
曲先生指出,随着近期的产品功能增多,MongoDB 正在越来越满足更广泛的应用需求:
- 对 MongoDB 3.4 添加区域分片使得 eBay 能够为需要跨多个数据中心提供分布式、永久写入可用性的应用程序提供服务。
- 针对即将发布的 MongoDB 3.6 版本的可重写的写入将允许 eBay 减少应用程序异常处理代码。