本文是腾讯云TDSQL首席架构师张文在腾讯云Techo开发者大会现场的演讲实录,演讲主题是《TDSQL在银行传统核心系统中的应用实践》。
我是TDSQL架构师张文,同时也是TDSQL的开发人员之一。今天的分享内容主要包含四个部分,分别为银行行业现状介绍、核心系统分布式改造、TDSQL佳实践和改造效果。
一、关于TDSQL
银行数据库系统被外企垄断超过99%。数据库的复杂程度比拟操作系统,作为基础性软件数据库对成熟度有着极高的要求,这意味着需要较长的研究周期和测试才可以进入市场,这也是为什么国内商用数据库领域长期被国外企业所垄断。
外企数据库相对收费比较高昂,对于腾讯这种大型互联网企业,比如说搞个游戏充值活动或者过年的微信红包,都会产生突增的负载和流量,按照负载来收费,成本将无法估量。所以,如果用传统的商用数据库,我们赚的钱可能还不够买数据库服务付出的费用,这就倒逼大型互联网企业研发自己的数据库。
TDSQL诞生于腾讯计费平台部,2002年以前计费业务早使用MySQL就能满足需求,但是随着公司规模的发展,到2007年我们对性能、可用性以及数据一致性要求越来越高,同时腾讯的增值业务、娱乐业务在不断增长,比如Q币,这时我们开始研制服务于计费、定位于金融场景的分布式数据库——TDSQL。
2007-2014年,TDSQL在内部通过不断迭代、踩坑,逐步打磨成了一款比较成熟的数据库产品。2014年TDSQL尝试对外输出,成功应用于微众银行的核心系统,开始商业化探索。2019年TDSQL成功应用到张家港银行新核心系统,成为国内家投产于银行传统核心系统的分布式数据库,这是TDSQL又一个里程碑式的发展。
二、TDSQL在银行核心系统的实践
刚才提到银行的核心系统,介绍一下什么叫银行的核心系统。
银行的核心系统为什么这么重要?银行的核心系统相当于银行的心脏,大家知道银行是要存钱、管钱的。银行系统分两部分,一个是核心系统,一个是外围系统。核心系统可以比作银行的大脑,所有和钱有关的交易都需要经过核心系统,完成资金的清算核算。换句话说核心系统需要和其他所有关于钱的系统打交道,因而它的业务逻辑也为复杂、为关键,它直接影响着银行核心资产相关的数据。如果核心系统比作大脑的话,外围系统更像是四肢躯干。所以,外围系统一般都是泛指各类渠道类业务,比如:手机银行、贷款、柜面、ATM等。而这些外围系统一旦涉及到金钱交易,必须通过核心系统完成资金的清算结算。一个外围系统一般都是一个单一的业务场景,所以一个外围系统故障只影响当前业务,不会影响全局。
此外,银行对数据库的可用性要求极高,如果一家银行长时间不能对外提供服务的话,客户会对他在银行中存的钱担忧,可能会觉得不安全,进而把钱取出来,如果大家都这么做,那么对于银行来说就是挤兑危机。
1. 传统数据库架构的分布式改造
下面我们来了解一下如何把银行的核心系统数据库从集中式升级成分布式。
2. 分布式事务
作为分布式数据库,尤其是银行场景的分布式数据库,关心的就是分布式事务。
比如银行里A、B两人需要转帐,用户A的账户是在个物理结点,用户B的账户是在第二个物理结点。对于转账这个场景,也就是对A、B账户的余额的操作,要么全部成功,要么全部失败,不能给A扣了款B没有加款,或者B加了款A没有扣款,这就是TDSQL分布式事务的保证。所以说,如果分布式数据库不支持健壮的分布式事务,那么它很难适应银行类金融场景。当然,分布式事务由于涉及到多个数据节点,同时需要额外做很多的校验和通信,因而一定会有性能损耗,TDSQL这里通过大量优化仅损耗25%。TDSQL的分布式事务基于MySQL经典的两阶段提交,在MySQL的XA事务上二次开发,修复了大量官方BUG保证分布式事务的健壮性。
3. 高可用部署架构
说完了分布式事务,再来聊聊银行的高可用部署架构。这是一个标准的两地三中心架构。同城部署,总行机房和灾备机房两个机房之间的数据同步基于TDSQL的强同步复制,保证在主机房写成功的同时,至少在备机房的一个节点上落盘成功。异地机房,主要用来做异地的灾备实例。
4. 数据同步
下面我们再来聊聊数据同步,对银行来说,尤其是家核心系统采分布式数据库的银行,无论上线前你讲得再好,演练得再好,或者说测试得再好,也还是有一定的不确定因素。这就引出了个Oracle灾备的方案,将Oracle作为备胎和TDSQL保持实时同步关系,在极端情况下允许从TDSQL切换到Oracle。也许这个方案永远都不会用,但是正因为有了这个兜底方案,对银行来说用分布式数据库才更有信心。
数据同步方案这里另一个设计是多源同步解决方案——TDSQL到其他异构数据库的导入导出。TDSQL抱着一个开放的态度让用户选择接入,并不绑架用户,如果哪一天银行客户用了TDSQL,觉得用得不好,或者觉得TDSQL不满足他的需求或有比它更好的,通过数据同步方案可以轻松将数据迁出,TDSQL支持业内标准格式的数据订阅,方便数据的导入导出。
5. 自动化数据库运营管理
下面我们继续再往下看到的是TDSQL自动化运营管理平台。作为银行科技部门的运维,希望尽可能快速上手,减少人员培训成本,运维系统尽可能自动化高,集成化高。
赤兔监控就是一个数据库的监控指标,提供上百项的数据库监控,数据库各项健康状态、性能参数一目了然;监控通过结合智能告警,及时捕获数据库异常状态,通知DBA相关责任人处理。扁鹊系统,是一套强大的智能DBA诊断系统,基于腾讯海量运维经验,结合强大的语法、规则库,对数据库进行一键诊断、迅速定位性能问题。一键运维,顾名思义所有运维操作集成到页面上,降低运维人员误操作的概率。需要强调的是,我们TDSQL跟传统数据库厂商有什么不同,传统数据库厂商研发数据库产品,卖给客户使用,而我们在卖给客户之前,首先在自己内部充分验证和适用,先拿自己的业务体验和采坑。
6. 性能和成本双优化
刚刚介绍了那么多,后我们分享一下以张家港行为例,银行传统核心完成分布式改造之后达到的效果,主要是成本和性能两方面。
先看性能,查询交易100毫秒之内,高频率交易300毫秒,贷款结息3分钟,日终跑批14分钟,这是银行披露的数据。目前这个性能已经完全满足张家港行未来十年的业务量。
再看成本,按照Oracle的架构,硬件方面需要采用大型机、小型机,张家港行采用腾讯云TDSQL分布式数据库架构后的硬件成本,只有传统架构成本的1/5甚至更低。此外,由于TDSQL是分布式的架构,支持水平扩展,通过不断增加硬件资源可继续提高吞吐量。
所以,当看到这样的成本性价比,相信任何一个有商业头脑的银行,当目前核心涉及到更新换代时,肯定不会再像以往那么坚定的选择国外厂商,而是更多考虑国内互联网公司的分布式数据库。