Coinbase交易所背后,在弹性应用程序设计上

Coinbase 已有的监控工具无法为当时遇到的一些关键问题提供明确的答案,我们把这个现象称为“幽灵”。

威尼斯官方网站登录 1

那么,Coinbase 团队是如何应对2017年突增的平台交易量?之后又是如何逐步扩展平台容纳量、持续稳定运行呢?其扩展性解决方案在去中心化应用领域是否有借鉴意义?接下来,听 Luke Demi 讲述 Coinbase 平台背后的故事!

  • 对MongoDB 3.4添加区域分片使得eBay能够为需要跨多个数据中心提供分布式、永久写入可用性的应用程序提供服务。
  • 针对即将发布的MongoDB 3.6版本的可重写的写入将允许eBay减少应用程序异常处理代码。 

虽然才刚刚开始使用 Capture 和 Cannon 工具,但在 MongoDB 数据库集群上执行这类的负载测试时,我们取得了一些新发现。

图1:MongoDB恢复架构的eBay设计模式(图片由eBay的MongoDB世界大会演示提供)

威尼斯官方网站登录 2所有慢速MongoDB查询操作中记录的重要信息

为了构建应用程序,eBay开发人员可以从五个公认的数据库标准中进行选择。 除了MongoDB,团队还可以选择使用Oracle或MySQL关系数据库和两个NoSQL数据库。 曲先生的DBA团队为适当的数据库选择提供指导,根据应用程序的数据访问模式、用户负载、数据类型等进行选择。

当用户登录网站购买加密货币或查看相关信息时,大量的查询会导致过重的网络负载。

标准MongoDB设计模式被用作eBay的“阅读强化/高可用读取模式”的基础,该演示文稿用于为eBay产品目录提供支持。对于目录负载,MongoDB副本集可以扩展到50个成员,为大并发量的数据分发提供了读取的可扩展性和恢复能力。

威尼斯官方网站登录 3

威尼斯官方网站登录 4

随着加密货币及区块链技术日益火爆,区块链的可扩展性逐渐成为制约其应用落地的痛点之一,2017年引爆加密世界的加密猫游戏就曾让以太坊网络濒临瘫痪。

图2:MongoDB极高读/写模式的eBay设计模式(图片由eBay的MongoDB世界演示提供)

虽然安全性始终是我们的首要任务,但我们也乐于将确保我们平台可靠性、可扩展性当作Coinbase的主要任务!

eBay目前运行超过3000个非关系型数据库实例,为一系列应用程序提供支持,可在其间管理数PB数据。 在过去,Oracle是“记录系统”,而非关系型数据库则处理“参与系统”中使用的临时数据。 然而,非关系型数据库环境已经成熟。通过一致的时间点备份和恢复,MongoDB现在也在eBay上服务于记录系统的用例。

作为 Coinbase 的主要数据存储区,MongoDB 在数据流量大的时候会出现高延迟,而 Ruby 延迟时间并没有增加。

其次,eBay开发人员可以使用特定的MongoDB写入和读取配置来设计模式,以调整最佳满足不同应用需求的持久性和一致性级别。

这个改进为 Coinbase 平台带来了2017年最大的一次性能提升。

对于更多的写入密集型负载,eBay开发出了“极高读/写模式”,该模式在其美国数据中心部署了一个分布式的MongoDB集群。

这一发现说明了良好监控平台的作用。

在今年的MongoDB全球大会上,eBay的首席NoSQL DBA曲峰提供了弹性应用程序的实用设计模式 — 他的团队开发的一套支持企业级MongoDB部署的架构蓝图。

威尼斯官方网站登录 52017年上半年的交易量井喷(红圈处)较后期而言不足为奇

虽然eBay的所有非关系数据库选择都提供了内置的故障恢复能力,但它们可以使不同的设计影响应用程序的行为。DBA团队在六个维度上评估这些差异:可用性、一致性、持久性、可恢复性、可扩展性和性能。例如,使用点对点、无主设计的NoSQL数据库具有昂贵的数据修复和重新平衡过程,必须在节点发生故障之后启动。此重新平衡过程会影响应用程序吞吐量和延迟,并可能导致连接堆叠,因为客户端等待恢复,这可能导致应用程序停机。为了减轻这些影响,eBay不得不将最初在Oracle上开发的应用级产品分层在这些无数据库之上。这种方法使DBA团队能够将更大的集群分成一系列子集群,从而将重新平衡开销与较小的一组节点隔离开来,同时只影响了一小部分查询。eBay DBA团队构建其弹性设计模式是针对这些不同类型的数据库行为。

威尼斯官方网站登录 6

【编辑推荐】

威尼斯官方网站登录 ,当准备好执行回放时,另一个基于“mongoreplay”名为“Cannon”的工具将根据之前的数据库集群快照将记录的流量回放到新启动的数据库集群上。

作为世界前十十个全球零售品牌,拥有1.7亿活跃买家和10亿在线市场,eBay无法承受系统停机带来的损失。这就是为什么公司依靠MongoDB作为其核心企业数据平台标准之一,为运行ebay.com的多个面向客户的应用程序提供支持。

比较有效的方案就是通过模拟几倍于过去经历的交易量峰值来测试平台环境,来发现下一个问题点可能来自哪里。

曲先生指出,随着近期的产品功能增多,MongoDB正在越来越满足更广泛的应用需求:

添加一个查询缓存层,用于在 Memcached(一个高性能的分布式内存对象缓存系统,用于动态 Web 应用以减轻数据库负载)中缓存查询结果。

例如,一些用户可能拥有多个设备,而某些设备可能由多名用户共用。 糟糕的设备指纹(用于标定设备)识别算法将大量用户置于同一设备中,从而导致单个设备拥有大量 user_id 对象。

在这种设计模式中,一个7节点的MongoDB副本集遍布eBay的三个美国数据中心。此模式可确保在主数据中心发生故障的情况下,数据库集群可以通过在剩余的数据中心之间建立一个仲裁来保持可用性。MongoDB的副本集成员可以被分配选举优先级,以控制哪些Slave成员被认为是在Primary成员失败时的晋升候选人。例如,如果副本集Primary成员失败,则DC1本地的节点将被优先选择。只有整个DC1遭受中断,DC2中的复制集成员才会被认为可以进行选举,根据哪个节点已经执行最近的写操作选择新的Primary成员。 可以通过使用MongoDB的 majority write concern来扩展这种设计模式,以使得能够跨数据中心持久的写入。

威尼斯官方网站登录 7事实证明,去年5月和6月经历的交易量井喷与去年12月和今年1月经历的交易量井喷根本不是一个数量级的。

曲先生介绍了eBay的“MongoDB弹性设计模式”,如图1所示。

威尼斯官方网站登录 8

威尼斯官方网站登录 9

因此,需要一个框架来回答这些问题并可视化 Coinbase 环境组件之间的关系。

这两个因素从根本上改变了工程团队如何考虑可用性,并且引导eBay创建其“弹性设计模式”,以建立最大化平均故障时间(Mean Time To Failure,MTTF)并最大限度地减少平均恢复时间(Mean Time To Recovery,MTTR)的数据库最佳实践。

简而言之,团队现有的监控服务并没有完全利用 Coinbase 平台环境中的可用信息。

曲先生开始讨论多年来可用性概念的变化。过去,网站可以接受每周维护的预定停机时间。随着当前服务的全球化,用户或业务都不会接受如此频繁的停机!此外,大多数公司现在在商业硬件平台上构建其服务,而不是以前的 Sun Solaris / Sparc服务器。虽然商业硬件的成本要低得多,但是它也经常故障。

近日,Coinbase 的大牛工程师 Luke Demi 发文总结了平台去年故障停机的经验与教训,并详细介绍了其平台的可扩展性解决方案。

尽管目前各行各业的去中心化应用如雨后春笋一般持续涌现,但其性能问题一直是未能突破的瓶颈,仍然存在应用场景受限、可扩展性不强等问题。当下,就连V神也是三句话离不开可扩展性话题。

在查询数据库之前,特定高读取流量的数据库集群对任何单个文档的查询操作都会先在查询缓存层中进行,对数据库的任何写入操作也会同时更新缓存。

实践证明,在保障平台的安全性之外,其可靠性和可扩展性也是不容忽视的。

第一个主要异常是查找设备操作的响应信息数据量过大。

威尼斯官方网站登录 10

解决方案就是执行交易流量的捕获和回放,明确地说就是在数据库上按需生成人为的“加密狂热(crypto mania)”。

修改后的数据库驱动程序会记录超过特定响应时间阈值的所有查询操作,以及请求/响应大小、响应时间、源代码和查询类型等重要信息。

威尼斯官方网站登录 11在2017年的交易量开始井喷的早期,每分钟平台后端API请求的数量

团队通过修改 MongoDB 的数据库驱动程序来进一步改进数据库的查询操作。

威尼斯官方网站登录 12

在2018年的 MongoDB 社区大会中,包括 Luke Demi 在内的 Coinbase 工程师都谈到了2017年的经验和教训,以及此后如何增加平台扩展性的解决方案。

威尼斯官方网站登录 13

为未来做准备

事实证明,数据库 MongoDB 的 Ruby 语言驱动程序未完全遵循 MongoDB 驱动程序的设计规范,并且在每次查询数据库时通过执行 ping 命令以检查复制集状态。

在此期间,在中心化交易所 Coinbase 平台之上,几乎所有技术组件都经历了残酷的实战考验。

造成响应信息数据量过大的原因是当时用户和设备之间为多对多关系。

本文由威尼斯官方网站登录发布于区块链,转载请注明出处:Coinbase交易所背后,在弹性应用程序设计上

您可能还会对下面的文章感兴趣: