当前位置: 首页 > 科技观察

为什么eBay选择MongoDB进行弹性应用设计?

时间:2023-03-13 07:14:11 科技观察

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