66

Coinbase是如何在其加密货币交易平台上应对扩展性挑战的

 5 years ago
source link: http://www.infoq.com/cn/news/2018/08/coinbase-scaling-challenges?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

在2017年的数字货币热潮中,数字货币交易公司Coinbase在他们的平台上遇到了扩展性方面的挑战。工程团队 主要通过 升级和优化 MongoDB 、热点流量隔离解决了这些挑战,并构建了捕获和回放工具以应对未来的流量暴增。

在2017年5月至6月间,Coinbase的客户流量 飙升 超出了预期的水准,超过了通常最大流量的五倍并导致了 停机 。团队首先解决了一些简单的问题:垂直扩展、升级MongoDB以提升性能、优化索引以及基于热点的流量隔离。现有的监控系统不足以识别上下文信息,所以团队通过代码instrumentation技术进行了增强,以便于记录丢失的数据。尽管有了这些改善,在 2017年12月比特币价格飙升阶段 ,Coinbase还是 再次 遇到了 多次 宕机。从此之后,团队致力于通过捕获和回放工具模拟流量的模式来处理更高的流量。

在最初的停机期间,Coinbase的Ruby应用和MongoDB都遇到了更高的延迟,在耗时方面,Ruby和MongoDB是大致均等的。为了更好地理解这些跨组件调用的上下文信息,团队通过修改 MongoDB的数据库驱动 记录了额外的数据。这帮助他们将问题的范围缩小至一个未经优化的响应对象,该对象增加了网络负载。这个问题的解决使应用程序的性能得到了很大的提升。另外,通过在对象-关系映射层(Object Relational Mapping,ORM)和驱动层增加基于Memcached的缓存提升了大规模读取的吞吐量。 增补缺失的索引 也改善了响应时间。到2017年6月,团队已经将MongoDB集群升级到3.2,它拥有 更快的WiredTiger存储引擎 。Coinbase 使用Redis 来实现限速等服务,这些服务在停机期间曾经受到Redis的 单线程模型影响

为了应对未来可能出现的流量暴增,团队开发了名为Capture和Cannon的工具,它们可以从生产环境的系统中捕获流量,并根据需要针对新系统进行回放,以测试系统的弹性。Capture和Cannon都是基于 mongoreplay 的,mongoreplay工具能够从网络接口捕获针对MongoDB实例的流量,并记录所调用的命令。这些日志可以基于其他的MongoDB实例进行回放。流量能够跨应用服务器进行捕获,然后合并到单个文件之中。捕获到的流量和磁盘快照都保存到了AWS S3之中,Cannon随后能够基于它们进行回放。

Coinbase维护了一个公开的状态信息页面,地址是 https://status.coinbase.com/

查看英文原文: How Coinbase Handled Scaling Challenges on Their Cryptocurrency Trading Platform


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK