导读
支付宝最重要、最基础的系统工作是记账,记账的准确性、及时性和吞吐直接影响着用户的支付体验和资金安全。账务数据库作为账务数据存储和处理底盘,在很大程度上决定了整个账务系统所能实现的性能(如吞吐、延迟、抖动毛刺等),是整个支付业务的基石。这个问题在客户基数大场景复杂的支付宝尤为突出。
Maxwell账务数据库是一款软硬件高度优化的账务系统,产品核心完全由C语言及汇编完成,完全自主开发,无第三方库依赖,极致可控。
本文以蚂蚁热点账务问题为例,分享在面临这些问题所进行探索的成果:Maxwell高性能账务数据库,以及落地情况。
如何解决热点账务问题?
随着支付宝用户量的不断增长和业务场景的日趋多样,账务系统面临着越来越多的挑战,热点账户更新的便是其中一个典型问题。所谓热点账户是指产生资金流入流出请求笔数巨大的账户,请求持续时间可能是秒级,也可能较长一段时间。热点账户普遍存在于大商户的支付收单场景,如直播大V带货、聚划算、商户活动营销等,形成对单个账户的账务请求洪峰,如若账务系统处理能力不足,不仅会影响支付体验,还可能会导致系统的大范围故障,甚至是集群的雪崩。
为应对单账户记账的挑战,业界普遍采用缓冲、汇总、拆分、限流等方式来进行优化、将热点账户配置成非实时记账等方式处理,但是这些方式在缓解记账问题的同时又带来了新的问题:
*可能导致透支,出现资损
*账务余额更新不及时,用户体验差
*热点账务记账人工成本高
*一旦出现异常,恢复成本高,且可能导致大客户流失
暂时抛开具体实现,梳理上述场景,热点账务系统需要具备以下特点:
*高可靠,无需赘言
*高吞吐,直面洪峰,无需复杂且有副作用的“奇技淫巧”
*低时延,账务处在悠长且复杂的支付流程的同步链路上,对处理时延有严格的控制,否则会导致支付失败等一系列后果
*低抖动,不论是吞吐抖动还是时延抖动都会带来上下游的冲击,产生请求超时、堆积等问题
*无性能拐点,即便出现请求数超过了账务系统的最大吞吐也不能出现性能拐点,导致整个链路性能迅速恶化甚至雪崩。
*支持事务,保证资金流入流出原子性
*系统吞吐能够线性扩展,随着系统可用资源的增加线性增加
为了解决热点账户问题,在调研大量现有技术方案,结合业务技术指标论证之后,我们最终决定从零研发符合要求的高性能账务系统。最后采用如下图所示构架实现,项目首期即实现将单账户记账吞吐相比原方案提升570倍,经过优化迭代目前已提升至1000倍。
如下图所示,记账请求由客户端发送至账务处理集群,每个集群由三个Worker组成,每个Worker由如下三个自研核心模块组成:
*Raft保证多副本之间数据一致性、实现高可用
*账务逻辑负责账务数据处理,维护数据ACID特性等(本文不涉及账务处理逻辑本身,可以将其抽象成数据处理计算过程);
*Maxwell存储引擎负责账务数据的存储和更新
Maxwell账务数据库的优势
Maxwell账务数据库在实现超高的记账吞吐的同时保证了性能稳定,其原因在于坚持全链路视角优化账务过程,核心模块的设计实现高度契合了计算机软硬件的特性,能将软硬件的性能发挥到极致。
*账务逻辑下沉,计算向数据靠近,提升账务执行效率
*Maxwell存储引擎充分发挥SSD磁盘特性,重构了磁盘数据的组织维护方式,从根本上解决数据读写放大、空间放大的问题,从而消除由此引发系统抖动、拐点等不稳定问题
*账务进程支持单机百万级账务事务并行处理能力,并可线性扩展集群并发。
*核心模块内置自主缓存管理模块,可根据场景调优数据缓存策略
*核心模块内置网络管理模块,实现超低延迟网络包收发、处理
*基于SPDK实现的用户态文件系统,进一步提升磁盘IO访问效率,减少操作系统影响
*优化降低请求之间数据共享引起的锁竞争,减少大批量请求并发导致的性能下降、抖动、拐点
*ARaft自适应调整RLog分发过程,能兼顾小流量和大压力场景,同时可以缓冲副本间网络抖动的影响
*由C语言+汇编开发,无GC,无隐式资源分配等操作,行为可控,将操作系统的影响降到最低
以下重点介绍Maxwelld的 两个性能:ARaft、存储引擎
ARaft与另一广泛使用的开源实现相比,相同测试条件,平均时延相等的情况下,两者吞吐和P999时延分布如下图。
ARaft的吞吐是其9.1倍,且时延基本保持恒定。
随着测试时间推移,开源实现出现Compaction,如下图所示,随即请求吞吐大幅下降,同时延时陡增。而ARaft可以保持吞吐、时延的稳定。
在存储引擎方mian,账务数据库在相同平均记账请求20000 TPS测试条件下,采用不同存储引擎记账服务如下图所示:
*使用RocksDB的方案记账吞吐在10000-40000 TPS之间波动,记账的平均耗时在数毫秒到1200ms之间剧烈波动,大大超过账务所能容忍的耗时,事实上会导致记账失败等一系列后果
*采用Maxwell存储引擎的账务数据库的吞吐基本稳定20000 TPS,记账的平均耗时也稳定在3ms。
综上,Maxwell账务数据库是一款软硬件高度优化的账务系统,产品核心完全由C语言及汇编完成,完全自主开发,无第三方库依赖,极致可控。为提供用户高可靠、高吞吐、无拐点、无抖动、低延迟的账务解决方案,同时满足相同业务量所需的服务器资源大大减少,降低硬件资源投入、能耗、运维等业务成本。
经受住了双十一大促检验
Maxwell账务数据库经过优化迭代已将性能在原有方案上1000倍,由于其良好的性能,承载数据也从几千个账号扩展到几亿个,应用场景覆盖到金融的方方面面,不仅可以提供良好的用户体验,还年节省成本过亿元。
通过不断迭代沉淀,它也从一个解决热点账户的专用系统变成服务更多业务场景的高性能账务数据库,在继承优良性能特性的同时,可以快速构建定制。
目前基于Maxwell的解决方案在全站范围内铺开,目前已涉及主站、网商、国际 ,涵盖电商直播、新零售、出行、钱包营销、商户批扣结算、核算日切等多块核心业务,稳稳地经受住了双十一大促的检验。接下来主账务(支付宝余额户)、核算内部户、基金大账户等重头戏也将陆续上线,同时,国内红包营销等相关的业务也在进一步接洽中。
微贷风控场景。用户在使用花呗等微贷业务时,需要对用户进行实时风险评估。风控特征平台按照一定的风险模型进行风险评估,过程中会查询大量用户相关特征数据。由于该过程在业务同步链路执行,为保证业务体验,对特征数据查询的耗时和毛刺非常敏感。Maxwell业务中承载千亿级 主+客体特征数据的在线服务,无抖动实时读写构架特征数据库,将风控性能提升10倍,同时所需服务器资源减少10倍,综合提升超过100倍
金融时序场景 。金融数据库是蚂蚁金融智能操作系统的存储底盘,库储有海量历史与实时经济相关数据,如股票,债券行情及预测数据,宏、微观经济指标等,服务投研、投顾、行业研判等领域。Maxwell使用服务成本低的Docker平台,单副本服务最低仅需3Core,系统吞吐可随系统资源线性扩展,多副本方式部署,提供金融级可靠性,其中单副本仅使用17core,即可提供每秒70万条时序数据时间顺序写入,每秒9万条时序数据完全随机写入,以及单副本每秒4万次查询请求,且多副本均可提供查询服务。最终解决时序数据查询时间延迟大,亿级数据导入、时序访问成本高的综合性问题。
数金资产池估值。资产池的运营管理包含多个资产池。资产池内资金、债券等资产会不断流转转换,不同资产价格也随时间不断变动。业务上需要掌握资产池内的资产总价值,保证收益稳定、运营风险平衡可控。Maxwell在业务中充分发挥快速查询能力,将数据跑批过程转换为实时更新资产值估值,资产池估值所需时间提升1200倍实现实时估值,同时所需要的硬件资源降低至原方案的1/6,可用性提升至99.999%。
小结
面对巨大业务压力的同时,我们从年初开始规划,积极推进Maxwell账务数据库标准化建设,为账务行业领域提供统一的高性能方案,同时进一步夯实底层能力,释放软硬件一体化的技术红利。随着整体生产集群规模的扩大,面对千余运行实例、众多业务集群和Maxwell版本迭代,对我们的集群运维能力建设也提出了巨大的挑战。
作者介绍//
马凌,现任蚂蚁集团高性能计算团队负责人,精于底层开发性能优化,主要成果如下 : 有35篇专利,其中12篇美国专利,包括CPU体系架构、分布式存储、以及区块链,其中多核一致性专利在最新的CPU落地生产 ;开发的Glibc汇编代码被大多数x86服务器使用,包括memcpy、memset,strcpy、strlen、strcmp等,完成的高频交易系统(<2us), 接近理论值;利用CPU,OS,网络,SSD特性,结合CPU-Friendly Coding,负责领导开发软硬件高度统一的账务数据库Maxwell已在支付宝核心链路全面生产, 综合性能提升100~1200倍