前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >案例研究:Square Cash App

案例研究:Square Cash App

作者头像
CNCF
发布2019-12-04 15:45:23
9830
发布2019-12-04 15:45:23
举报
文章被收录于专栏:CNCFCNCF

Square:Vitess如何为Cash App提供“近乎无限的规模”

公司:Square Cash App

地点:加州旧金山

工业:金融服务

挑战

自2009年以来,Square为小企业提供了快捷方便的信用卡支付服务。四年前,该公司通过其Cash App扩展到p2p交易领域。在经历了一些稳步增长之后,该应用在2016年人气飙升,短短几个月就拥有了数百万用户,并登上了应用商店下载量的榜首。问题?“我们有一个很大的单体的几十万行代码,这是建立在单一的MySQL数据库的假设上;它从一开始就没有被设计成可伸缩的。”工程经理Jon Tirsen说。随着用户的不断增加,公司不得不为数据库投入越来越昂贵的硬件;同时,Tirsen的三人团队需要替Cash App的可伸缩性问题想出一个长期解决方案。“因为我们有增长轨迹,我们真的需要很快很快的解决它,接受我们产品方面的挑战。”他说。

解决方案

团队首先开始尝试将数据提取到基于MySQL构建的键值存储中。他表示:“这是一个天生可伸缩的存储平台,但功能不那么丰富。”此外,这个解决方案需要重写数十万行代码,“我们根本没有时间去做。”他说。所以团队提出自己解决切分MySQL。当时,解决Square规模问题的默认方式是在应用程序中解决问题,而不是在基础设施层,在Facebook或Pinterest等许多其他公司也是如此。然后Square有人提出了Vitess,一个用于MySQL水平扩展的开源数据库集群系统。项目仍然相对较新,但是Tirsen开始挖掘代码之后,他意识到这将可用于Cash App。“好处是,如果我们解决了一次,我们其它类似的基础设施可以使用相同的方式扩展。”Tirsen说:“这令人兴奋,意味着我们不需要完全重建我们的系统。我们只要让Vitess工作,系统就会工作。也许我们需要改变系统的是5%,而不是95%。”Tirsen的团队花了大约一年的时间进行改变,并让Vitess适应Square的基础设施。

影响

第一个Vitess的切分在2017年11月美国东部时间凌晨5点进行,“宕机时间不到一秒,所以用户看不到。”Tirsen说:“这非常令人兴奋。如今,他补充道:“这完全是例行公事。上周我们做了十次切分。”Tirsen说他最自豪的这一事实:“我们不需要完全改变开发者构建应用程序的方式,因此,尽管我们做这个很急剧的变化,让我们的体系结构可伸缩时,特性团队正在Cash App平台上构建不可思议的功能应用。我们就像在飞机还在空中飞行的时候换引擎一样。”事实上,在工作的一年里,公司推出了像Cash card这样引人注目的功能。展望Cash App的持续增长,Tirsen说:“你必须继续努力,但Vitess确实为你提供了近乎无限的规模。”

“你必须继续努力,但Vitess确实为你提供了近乎无限的规模。” - Jon Tirsen,Square工程经理

自2010年Square推出读卡器和移动应用以来,对数百万人来说,从出租车司机、市场销售商到大型企业,通过信用卡支付变得容易得多。

四年前,该公司通过其Cash App扩展到p2p交易领域。在经历了一些稳步增长之后,该应用在2016年人气飙升,短短几个月就拥有了数百万用户,并在应用商店最受欢迎的下载榜上登顶。

问题?“我们有一个很大的单体的几十万行代码,这是建立在单一的MySQL数据库的假设上;它从一开始就没有被设计成可伸缩的。”工程经理Jon Tirsen说。随着用户的不断增加,公司不得不为数据库投入越来越昂贵的硬件;同时,Tirsen的三人团队需要替Cash App的可伸缩性问题想出一个长期解决方案。“因为我们有增长轨迹,我们真的需要很快很快的解决它,接受我们产品方面的挑战。”他说。

团队首先开始尝试将数据提取到基于MySQL构建的键值存储中。他表示:“这是一个天生可伸缩的存储平台,但功能不那么丰富。”此外,这个解决方案需要重写数十万行代码,“我们根本没有时间去做。”他说。

“当我们做这个很急剧的变化,让我们的体系结构可伸缩时,特性团队正在Cash App之上构建不可思议的功能应用。” - Jon Tirsen,Square工程经理

所以团队提出自己解决切分MySQL。当时,解决Square规模问题的默认方式是在应用程序中解决问题,而不是在基础设施层,在Facebook或Pinterest等许多其他公司也是如此。然后Square有人提出了Vitess,一个用于MySQL水平扩展的开源数据库集群系统。

这个项目还是一个相对较新的项目,但在Tirsen开始深入研究代码之后,他意识到它将适用于Cash App。Vitess满足了团队的两个关键需求:基础设施或平台层查询路由,将查询发送到正确的数据库,和在线切分无需停机。

此外,“好处是,如果我们解决了一次,我们其它类似的基础设施可以使用相同的方式扩展。”Tirsen说:“这令人兴奋,意味着我们不需要完全重建我们的系统。我们只要让Vitess工作,系统就会工作。也许我们需要改变系统的是5%,而不是95%。”

“这是一个令人惊讶的意外收获,我们可以跨不同公司之间合作解决问题,而这通常没有正式的合作方式。” - Jon Tirsen,Square工程经理

Tirsen的团队花了大约一年的时间来改变,以及让Vitess适应整个Square基础设施。为了使外部数据库能够与Vitess工作,团队重新构建了许多切分工作流。

“我们所做的最大的事情是改变了切分的工作方式。”Tirsen说:“以前,Vitess通过停止复制来进行碎片分割,但由于我们无法控制外部数据库,所以我们将其改为使用MySQL内置支持的一致快照,你可以在固定的时间点查看数据库,即使数据库仍在更新。然后你就可以根据这个一致快照复制数据库了。”

这项工作成果已经贡献到上游,现在在Vitess社区中普遍使用。Tirsen说:“这是一个令人惊讶的意外收获,我们可以跨不同公司之间合作解决问题,而这通常没有正式的合作方式。”

接下来,团队在登台和测试环境中大量地实践了切分。“除了最后一次查询重新路由之外,你可以练习整个分片拆分,在那里你基本上开始写入新的分片,而不会影响任何生产流量。”Tirsen说。

"Vitess将成为基础设施的重要组成部分,确保我们构建的所有东西在默认情况下都是可伸缩的。" - Jon Tirsen,Square工程经理

第一个Vitess的切分在2017年11月美国东部时间凌晨5点进行,“宕机时间不到一秒,所以用户看不到。”Tirsen说:“这非常令人兴奋。如今,他补充道:“这完全是例行公事。上周我们做了十次切分。”

总的来说,Tirsen说他最自豪的这一事实:“我们不需要完全改变开发者构建应用程序的方式,因此,尽管我们做这个很急剧的变化,让我们的体系结构可伸缩时,特性团队正在Cash App平台上构建不可思议的功能应用。我们就像在飞机还在空中飞行的时候换引擎一样。”事实上,在工作的一年里,公司推出了像Cash card这样引人注目的功能。

展望Cash App的持续增长,Tirsen认识到解决可伸缩性问题将永远是他的团队进行的工作。他们目前正在构建一个基于Kubernetes、Prometheus、Envoy、Jaeger和其他CNCF技术的开发平台,Tirsen认为该平台可以支持潜在的数千名开发者。他表示:“Vitess将成为这一必不可少的基础设施的一部分,以确保我们构建的所有东西在默认情况下都是可伸缩的。”他说:“你必须继续努力,但Vitess确实为你提供了近乎无限的规模。”

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CNCF 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档