作者丨小智
金融级技术架构的特性是什么?如何保证高一致、高性能、高可用、高可靠等特性的实现?中台、微服务应该如何考虑?TDMesh 的架构设计是怎样的?在 ArchSummit 全球架构师峰会北京 2019 上,InfoQ 记者带着这些问题对腾讯计费首席架构师陈宁国进行了采访。
腾讯计费,是孵化于支撑腾讯内部业务千亿级营收的互联网交易平台,它汇集了国内外主流支付渠道,承载腾讯公司收入大盘, 百亿级账户、百亿级日交易、覆盖 180+ 个国家(地区)、服务数万业务和上百万商户,是一个全方位的一站式计费平台。
腾讯计费部门成立至今已经 15 年,作为腾讯集团的统一计费平台,为所有业务提供渠道支付、精准营销、账户托管、安全风控、清分结算、计费分析等一揽子营收解决方案。腾讯计费的特点,可以说是金融属性和互联网海量属性相结合的产物,这个在行业都是极具特点的,譬如我们有几百亿的账户托管,这可以堪称世界上最大的账户平台,保有量和交易量都是世界级的(日请求近 200 亿);我们的数据库 TDSQL,已经支撑微众银行快速的从零发展到超 1 亿客户,2019 年“双 11“,微众银行创下 5.08 亿笔的交易规模峰值,2019 年的平安夜,交易规模又再次达到 5.33 亿笔的峰值;在新兴前沿领域,我们构建金融级别的区块链服务,在国密算法、同态加密、区块的流水线高并行处理、共识算法 PBFT/Raft 优化、及存储和部署的弹性扩展方面都有显著的改进,目前账本存储空间相比常规减少 80%,单链 PBFT 共识算法性能达 6000 TPS,是国内唯一一家通过性能测试的区块链平台,荣获中国信通院颁发的可信区块链评测通过证书。应用场景上,已有包括保险直赔、资金结算、供应链金融、智慧医疗和公益慈善等多个领域的具体落地,客户包括交通银行、龙江银行、深证通、城市商业银行资金清算中心、东华医为、爱心人寿等。
腾讯计费在技术发展过程中,面临着基础设施如数据库 / 消息队列 / 区块链,和应用层的接入管理、配置管理、逻辑管理等一系列一致性、可用性、稳定性挑战,其中如一致性,就包括对于任何的故障,包括网络异常、操作系统宕机、设备损坏等,都能确保整体业务流程或者全部成功,或者全部失败,不会有中间状态,交易前后金额一分不差。为统一解决这些问题,腾讯计费打造了一套名为 TDMesh 的金融级核心交易解决方案。
腾讯计费金融级的这套解决方案最早发端于 2004 年,08 年实现存储层 7*24 高可用,即保证系统能做到一周 7 天、24 小时不间断在线服务。在存储基础做好以后,12 年开始做开放平台,把计费对外服务标准化,规模化接入业务。此后的 14、15 年至今,主要面向移动端、海外和企业端服务,全面支持业务发展。
作为直接与交易打交道的部门,腾讯计费对金融级技术架构有着自己的理解与做法,陈宁国总结了金融级技术架构的四大特性:
金融级高一致。腾讯计费承载游戏账户、积分权益、泛娱乐订阅及广告客户等百亿级账户类存储,交易高峰期数十万级每秒,日交易量超百亿,平均每天的版本或流程变更超百项。在巨量的交易规模下,如何确保千亿年营收的零差错,实现金融级一致性,是计费的最核心关键问题。
高性能。计费流程,如游戏点券消费、按次的广告点击扣费等,访问高频且常伴有热点,加上如活动放量时流量的数十倍突发,叠加瞬间峰值超百万 tps,这需要计费具备很高的单机性能和整体余度;
高可用。计费服务目前全球已部署 100+ 集群,作为一个大跨度的支付系统,必然要面对各种网络异常,不同国家支付渠道的差异,配置和数据处理的困难等问题,这些都要求计费服务具备很强的业务容灾和数据容灾能力,有充分的弹性和容错设计,不可用时间控制在全年分钟级别;
高可靠。主要针对存储层,只要响应成功就代表数据一定落盘,对于如操作系统崩溃等意外宕机能确保数据不丢;同时, 对分布式任何节点的故障,引发的本机数据损坏和脑裂等问题,也都要求数据严格不错不丢。
为了支持“四高”的金融级技术要求,TDMesh 也做了针对性的架构设计与开发。
为实现系统高可用,快速功能扩展,腾讯计费的策略是大系统小做,即微服务化设计。通过合理的功能拆分,及精细服务治理如服务的注册、发现、熔断、自愈、负载均衡、链路跟踪等实现功能的快速扩展和流量的高效调度,以此达成整体系统的高可伸缩。
微服务更多关注的是系统功能规划和运营问题,不同的团队可以独立地设计、开发和部署各自的服务,可以完全掌控微服务的生命周期。但是,微服务化同样带来一些需要解决的问题:
1)需解决服务依赖,如配置关联;
2)每个服务本身的类同逻辑管理,如事务;
3)每个服务所使用存储的统一,如分表模式等;
4)服务细化后对发布变更等的精细管控。
腾讯计费, 当前已是中台化设计,通过合理的功能组织,明确模块边界,内部类同逻辑的组件化抽象,及统一的服务鉴权、服务间配置、服务内事务、和服务的统一存储等规范,来实现整体服务的高可复用,提升研发效能。腾讯计费中台,由业务中台、功能中台、及基础的研发中台、核心的技术解决方案 TDMesh 组成。
计费团队承接的不仅有腾讯集团的整体业务,还有国内客户、海外业务等不同行业、不同领域乃至不同法规、文化下的高复杂性的业务场景。互联网的效率追求,在计费团队的技术体现就是将业务抽象统一到中台,以高可复用的组件化设计解决相似的那些业务问题。
从技术架构层面来看,TDMesh 已经形成完善而丰富的金融级技术产品体系。
TDMesh,由上至下,覆盖从接入到存储,各个环节有四高要求的组件,加上在运营上的服务调度、监控、变更灰度和数据分析等管控模块。具体为
TDEA 统一的入口调度、协议管理、和服务鉴权 ;
TDCC 配置引擎,多环节复杂关联配置的高一致管理 ;
TDXA 交易引擎,应用层复杂长链路交易逻辑的高一致管理 ;
TDF 高性能基础服务框架 ;
TDMQ 高一致高性能的分布式消息队列 ;
TD-Hold 高一致高性能分布式缓存 ;
TDSQL 金融级高一致高可靠数据库 ;
TDLedger 去中心化的高一致记账机制,区块链;
运营系统,实现服务的统一调度和弹性管理。
这些组件模块相互配合,共同构成一个高一致的金融级核心交易架构解决方案。
对于应用开发而言,APP(业务系统)只要对接 TDXA,就可以一步接入 TDMesh 的所有组件,实现从配置、接入、应用层事务、到订单存储、消息通信、对账等整个交易业务链的一整套标准化处理,来实现自身服务的高一致等四高要求。
TDMesh 已在腾讯计费深度实践应用,实现 99.99%+ 的高可用和零差错计费。对于金融行业的客户,有很好的参考和应用价值。其中如数据库 TDSQL,已为超过 500 家公有云客户,中国银行、建设银行、微众、微保等近 30 家专有云客户提供数据库服务,并国内首次在江苏张家港农商银行的核心业务系统成功应用。
TDXA 是腾讯自研的应用层交易引擎,通过统一的应用层事务管理,确保微服务架构下的逻辑高一致。其设计目的旨在通过彻底的将业务纯逻辑和交易控制解藕,引入事务范式,来达到确保交易系统稳定、提升研发效率。架构设计如下:
TDXA 主要适用于 OLTP(联机事务处理过程,多用于一线业务操作)长事务的处理场景。计费服务基于微服务的架构,通常对于一次完整的交易流程进行多达几十次的网络调用,包括 RPC 接口、原生的 DB 接口、KV 接口等。基于高一致要求,如果由开发者自己来处理各种异常来保证高一致,代码的复杂度和不可控性显而易见。因此 TDXA 的核心使用价值,在于通过统一的组件,将一致性问题处理标准化,保证服务高一致和高质量前提下,有效减少开发者处理错误或异常的工作量,满足业务发展时交易场景多元化及交易量快速增长对计费系统高一致,高性能,高可靠的要求。
TDMQ 分布式消息队列是云原生的架构设计,具备跨城高一致、高可靠、高并发的 MQ。已广泛应用在腾讯计费场景,支持日均 100 亿 + 的请求传递,包括支付主路径、实时对账、实时监控、大数据实时分析等方面。
TDMQ 云原生的一个典型特点是,支持存储计算分离,上层计算层由独立的 broker 组成,支持高性能的网络访问和 topic 管理,下层存储层实现日志流的高一致复制。这样就能按业务性能或容量需求分别扩展,来实现整体的成本最优。TDMQ 典型的功能特性还有如延迟消息、事务消息、消息追踪、完整的多租户支持,任意的消费者数量等,这对于高并发消费等场景友好。另外,在运营上,还支持快速的数据平滑迁移、逻辑隔离等特性,以避免多 topic 间生产消费的互相影响。
传统金融行业对高一致、高性能、高可用、高可靠等“四高”的要求非常严格,金融系统出现的任何细微错误都可能带来巨额损失,而在全面云计算时代,对于金融级技术架构的要求只会越来越高,对成本和效率的追求也会越来越严苛,而 TDMesh 互联网 + 金融属性的基因决定了我们天生就是要不断的追求极致的性价比和易用性。如何不断适配业务发展的新场景、新特性,满足金融级业务特有的高一致、高安全等需求,用技术推动行业发展,是包括 TDMesh 在内的所有金融级技术架构需要去不断改进打磨和持续优化的地方。
点个在看少个 bug👇