本文是腾讯云TDSQL首席架构师张文在腾讯云Techo开发者大会现场的演讲实录,演讲主题是《TDSQL在银行传统核心系统中的应用实践》。

我是TDSQL架构师张文,同时也是TDSQL的开发人员之一。今天的分享内容主要包含四个部分,分别为银行行业现状介绍、核心系统分布式改造、TDSQL最佳实践和改造效果。

张文演讲现场

搜索关注“腾讯云数据库”官方微信,回复“1106张文”即可下载本视频演讲PPT。

一、关于TDSQL

银行数据库系统被外企垄断超过99%。数据库的复杂程度比拟操作系统,作为基础性软件数据库对成熟度有着极高的要求,这意味着需要较长的研究周期和测试才可以进入市场,这也是为什么国内商用数据库领域长期被国外企业所垄断。

外企数据库相对收费比较高昂,对于腾讯这种大型互联网企业,比如说搞个游戏充值活动或者过年的微信红包,都会产生突增的负载和流量,按照负载来收费,成本将无法估量。所以,如果用传统的商用数据库,我们赚的钱可能还不够买数据库服务付出的费用,这就倒逼大型互联网企业研发自己的数据库。

TDSQL诞生于腾讯计费平台部,2002年以前计费业务最早使用MySQL就能满足需求,但是随着公司规模的发展,到2007年我们对性能、可用性以及数据一致性要求越来越高,同时腾讯的增值业务、娱乐业务在不断增长,比如Q币,这时我们开始研制服务于计费、定位于金融场景的分布式数据库——TDSQL。

2007-2014年,TDSQL在内部通过不断迭代、踩坑,逐步打磨成了一款比较成熟的数据库产品。2014年TDSQL首次尝试对外输出,成功应用于微众银行的核心系统,开始商业化探索。2019年TDSQL成功应用到张家港银行新核心系统,成为国内第一家投产于银行传统核心系统的分布式数据库,这是TDSQL又一个里程碑式的发展。

二、TDSQL在银行核心系统的实践

刚才提到银行的核心系统,介绍一下什么叫银行的核心系统。

银行的核心系统为什么这么重要?银行的核心系统相当于银行的心脏,大家知道银行是要存钱、管钱的。银行系统分两部分,一个是核心系统,一个是外围系统。核心系统可以比作银行的大脑,所有和钱有关的交易都需要经过核心系统,完成资金的清算核算。换句话说核心系统需要和其他所有关于钱的系统打交道,因而它的业务逻辑也最为复杂、最为关键,它直接影响着银行核心资产相关的数据。如果核心系统比作大脑的话,外围系统更像是四肢躯干。所以,外围系统一般都是泛指各类渠道类业务,比如:手机银行、贷款、柜面、ATM等。而这些外围系统一旦涉及到金钱交易,必须通过核心系统完成资金的清算结算。一个外围系统一般都是一个单一的业务场景,所以一个外围系统故障只影响当前业务,不会影响全局。

此外,银行对数据库的可用性要求极高,如果一家银行长时间不能对外提供服务的话,客户会对他在银行中存的钱担忧,可能会觉得不安全,进而把钱取出来,如果大家都这么做,那么对于银行来说就是挤兑危机。

  1. 传统数据库架构的分布式改造

下面我们来了解一下如何把银行的核心系统数据库从集中式升级成分布式。

在切入正题之前,这里先讲一个小故事,在做分布式改造的时候,一开始大家很有信心感觉非常简单,直接套用即可,进而直接把集中式的系统照搬到分布式,发现效果非常不理想主要表现在性能很差,甚至一些复杂的SQL都跑不出来结果。虽然信心备受打击,但事情都要迈出第一步,如果什么事情都很容易的话,国内当时为何还迟迟没有银行分布式核心数据库的先例?

对于数据库从集中式迁移到分布式遇到的问题,首先我们通过对每一个库表进行分析并重新设计其分片关键字,获取最佳的数据分布策略。从集中式迁移到分布式,多少有一些数据库高级特效的耦合问题,比如说TDSQL不支持序列,而Oracle支持序列同时业务代码中用到了大量序列。需要指出的是,TDSQL已经是一款标准化的数据库产品,但同时TDSQL也非常珍惜在银行传统核心系统的实践机会,因而对于一些行业内比较好的特性建议(比如序列),我们会将其放入迭代特性中开发。

解决了这个语法差异之后,又发现一个问题,由于银行的核心系统都是运行多年的老系统,这些老系统在早期开发时为了让业务层更简单,将很多计算相关的操作也放在了数据库层,即用到了很多函数、存储过程、触发器。在我们内部尽可能不使用这些特性,这些特性不适用于分布式场景下,同时一旦使用后,将来还会面临复杂的迁移工作。此外,数据库应该专注于数据存取,计算相关的复杂逻辑放在业务层更符合规范,对这些问题经TDSQL团队与跟业务方一起沟通评估,将更合适放在应用层的部分逻辑上移,最终实现了更为彻底的分布式架构。

最后是性能问题解决,对于银行这类金融企业经常会有一些跑批类业务,这类业务的特点是大多都是较为复杂的AP型的SQL,这类SQL对于OLTP型分布式数据库来说是一个比较大的挑战。主要体现在数据的存储方式上,复杂的SQL一般涉及多个表之间的数据,对于集中式所有数据存储在一个节点上,不存在跨节点取数据,而分布式架构下,数据分散在不同物理节点,一旦涉及多个节点的关联查询,会导致性能急剧下降。针对银行业务的这种AP型场景,TDSQL在复杂SQL处理方面做了一系列优化,如:子查询上体、左连接消除,丰富下推策略等,尽可能提高处理复杂sql的性能。最后当前述工作做完之后,其实我们已经达到交付标准,对于张家港行来说已经够用了。但是,毕竟是作为全国第一家投产于传统核心系统的分布式数据库,作为第一家就应该有一个第一家的样子,所以步骤5是一个持续优化的过程,利用TDSQL一系列性能优化、诊断工具,对每一条可优化sql进行优化,最终把性能提升到极致。步骤5结束后,张家港行新核心系统从刚开始的不可用,到后来表现优异,宛如从一架马车进化成了一艘火箭。

刚刚讨论了改造过程,我们看到其实这个改造过程说简单也不简单,说难其实也没有太复杂,总体思路是一个先跑通再优化,从简单到复杂的过程。因为在银行业务里,大部分都是一些相对不算是特别复杂的SQL,特别复杂的SQL往往都是跑批类的,而银行大部分业务都是高频交易,所以,解决了高频交易,代表解决了问题的百分之九十的问题,剩下只是花多少时间的问题。总结成一句话就是:“先解决高频率,再解决跑批类”。

  1. 分布式事务

作为分布式数据库,尤其是银行场景的分布式数据库,最关心的就是分布式事务。

比如银行里A、B两人需要转帐,用户A的账户是在第一个物理结点,用户B的账户是在第二个物理结点。对于转账这个场景,也就是对A、B账户的余额的操作,要么全部成功,要么全部失败,不能给A扣了款B没有加款,或者B加了款A没有扣款,这就是TDSQL分布式事务的保证。所以说,如果分布式数据库不支持健壮的分布式事务,那么它很难适应银行类金融场景。当然,分布式事务由于涉及到多个数据节点,同时需要额外做很多的校验和通信,因而一定会有性能损耗,TDSQL这里通过大量优化仅损耗25%。TDSQL的分布式事务基于MySQL经典的两阶段提交,在MySQL的XA事务上二次开发,修复了大量官方BUG保证分布式事务的健壮性。

  1. 高可用部署架构

说完了分布式事务,再来聊聊银行的高可用部署架构。这是一个标准的两地三中心架构。同城部署,总行机房和灾备机房两个机房之间的数据同步基于TDSQL的强同步复制,保证在主机房写成功的同时,至少在备机房的一个节点上落盘成功。异地机房,主要用来做异地的灾备实例。

  1. 数据同步

下面我们再来聊聊数据同步,对银行来说,尤其是第一家核心系统采分布式数据库的银行,无论上线前你讲得再好,演练得再好,或者说测试得再好,也还是有一定的不确定因素。这就引出了个Oracle灾备的方案,将Oracle作为备胎和TDSQL保持实时同步关系,在极端情况下允许从TDSQL切换到Oracle。也许这个方案永远都不会用,但是正因为有了这个兜底方案,对银行来说用分布式数据库才更有信心。

数据同步方案这里另一个设计是多源同步解决方案——TDSQL到其他异构数据库的导入导出。TDSQL抱着一个开放的态度让用户选择接入,并不绑架用户,如果哪一天银行客户用了TDSQL,觉得用得不好,或者觉得TDSQL不满足他的需求或有比它更好的,通过数据同步方案可以轻松将数据迁出,TDSQL支持业内标准格式的数据订阅,方便数据的导入导出。

  1. 自动化数据库运营管理

    下面我们继续再往下看到的是TDSQL自动化运营管理平台。作为银行科技部门的运维,希望尽可能快速上手,减少人员培训成本,运维系统尽可能自动化高,集成化高。

赤兔监控就是一个数据库的监控指标,提供上百项的数据库监控,数据库各项健康状态、性能参数一目了然;监控通过结合智能告警,及时捕获数据库异常状态,通知DBA相关责任人处理。扁鹊系统,是一套强大的智能DBA诊断系统,基于腾讯海量运维经验,结合强大的语法、规则库,对数据库进行一键诊断、迅速定位性能问题。一键运维,顾名思义所有运维操作集成到页面上,降低运维人员误操作的概率。需要强调的是,我们TDSQL跟传统数据库厂商有什么不同,传统数据库厂商研发数据库产品,卖给客户使用,而我们在卖给客户之前,首先在自己内部充分验证和适用,先拿自己的业务体验和采坑。

  1. 性能和成本双优化

    刚刚介绍了那么多,最后我们分享一下以张家港行为例,银行传统核心完成分布式改造之后达到的效果,主要是成本和性能两方面。

先看性能,查询交易100毫秒之内,高频率交易300毫秒,贷款结息3分钟,日终跑批14分钟,这是银行披露的数据。目前这个性能已经完全满足张家港行未来十年的业务量。

再看成本,按照Oracle的架构,硬件方面需要采用大型机、小型机,张家港行采用腾讯云TDSQL分布式数据库架构后的硬件成本,只有传统架构成本的1/5甚至更低。此外,由于TDSQL是分布式的架构,支持水平扩展,通过不断增加硬件资源可继续提高吞吐量。

所以,当看到这样的成本性价比,相信任何一个有商业头脑的银行,当目前核心涉及到更新换代时,肯定不会再像以往那么坚定的选择国外厂商,而是更多考虑国内互联网公司的分布式数据库。

腾讯云分布式数据库TDSQL在银行传统核心系统中的应用实践的更多相关文章

  1. [转帖]中信银行信用卡业务数据库实现国产替换,湖北银行新核心系统项目正式验收,阿里云与MongoDB达成战略合作

    中信银行信用卡业务数据库实现国产替换,湖北银行新核心系统项目正式验收,阿里云与MongoDB达成战略合作 http://www.itpub.net/2019/10/31/3942/ 中信银行 gold ...

  2. [转帖]单集群10万节点 走进腾讯云分布式调度系统VStation

    单集群10万节点 走进腾讯云分布式调度系统VStation https://www.sohu.com/a/227223696_355140 2018-04-04 08:18 云计算并非无中生有的概念, ...

  3. 又拿奖了!腾讯云原生数据库TDSQL-C斩获2021PostgreSQL中国最佳数据库产品奖

    日前,开源技术盛会PostgresConf.CN & PGconf.Asia2021大会(简称2021 PG亚洲大会)在线上隆重召开,腾讯云作为业内领先的云数据库服务商受邀出席,多位专家深入数 ...

  4. 腾讯云原生数据库TDSQL-C入选信通院《云原生产品目录》

    近日,中国信通院.云计算开源产业联盟正式对外发布<云原生产品目录>,腾讯云原生数据库TDSQL-C凭借其超强性能.极致效率的弹性伸缩和完善的产品化解决方案体系,成功入围目录. 全球数字经济 ...

  5. 腾讯云原生数据库TDSQL-C架构探索和实践

    作为云原生技术先驱,腾讯云数据库内核团队致力于不断提升产品的可用性.可靠性.性能和可扩展性,为用户提供更加极致的体验.为帮助用户了解极致体验背后的关键技术点,本期带来腾讯云数据库专家工程师王鲁俊给大家 ...

  6. 华为云分布式数据库中间件DDM和开源MyCAT对比

    前言 华为云分布式数据库中间件(Distributed Database Middleware)是解决数据库容量.性能瓶颈和分布式扩展问题的中间件服务,提供分库分表.读写分离.弹性扩容等能力,应对海量 ...

  7. 日吞吐万亿,腾讯云时序数据库CTSDB解密

    一.背景 随着移动互联网.物联网.大数据等行业的高速发展,数据在持续的以指数级的速度增长,比如我们使用手机访问互网络时的行为数据,各种可穿戴设备上报的状态数据,工厂中设备传感器采集的指标数据,传统互联 ...

  8. 腾讯云分布式高可靠消息队列服务CMQ架构

    在分布式大行其道的今天,我们在系统内部.平台之间广泛运用消息中间件进行数据交换及解耦.CMQ是腾讯云内部自研基于的高可靠.强一致.可扩展分布式消息队列,在腾讯内部包括微信手机QQ业务红包.腾讯话费充值 ...

  9. 腾讯云分布式高可靠消息队列CMQ架构

    版权声明:本文由张浩原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/126 来源:腾云阁 https://www.qclou ...

随机推荐

  1. 第二篇CTF-MISC

    第一篇写成了日记,发布不了.第一篇CTF-MISC 04.坚持60S 附件下载下来,是个jar的文件,打开 耶?这是嘛呀? 反正没看懂,既然是jar文件,直接上jd-gui反编译一波试试 这么明显的f ...

  2. Windows10 上Docker 安装运行Consul

    背景简介 Consul是一种服务网格解决方案,提供具有服务发现,配置和分段功能的全功能控制平面. 这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全服务网格. Consul需要数据平面并 ...

  3. 关于XXE漏洞

    XXE漏洞 0x01.xxe是什么 介绍 XXE 之前,我先来说一下普通的 XML 注入,这个的利用面比较狭窄,如果有的话应该也是逻辑漏洞 1.1xml定义 XML用于标记电子文件使其具有结构性的标记 ...

  4. jenkins pipeline构建后发送邮件通知

    jenkins pipeline构建后发送邮件通知 mail配置 进入系统配置 找到最下边的邮件通知 创建任务 Pipeline片段 post { always { bat "" ...

  5. CRM系统选型时的参考哪些方面

    企业不论在制定营销策略或是在进行CRM系统选型时,首先都是要了解自身的需求.每一家企业的情况和需求都有很大差异,CRM系统的功能也都各有偏重.有些CRM偏重销售管理.有些注重于营销自动化.有些则侧重于 ...

  6. Centos7中安装elasticsearch

    第一步:必须要有jre支持 elasticsearch是用Java实现的,跑elasticsearch必须要有jre支持,所以必须先安装jre 第二步:下载elasticsearch 进入官方下载 h ...

  7. JavaScript中使用eval()方法解析json串

    最近在js用到了eval()方法,在这里做个笔记 当时是这么用的:data = eval("("+data+")"); data为后台向前台传送的一个json串 ...

  8. STM32学习进程

    新建一个自己的工程模板,以我所用的MDK4为例 MDK4软件图标 (1)新建一个自己储存数据的文件夹.以我自己为例(文件夹名字任取自己记住熟悉就行,以下将以我的文件夹文件进行操作讲解) 新建的总体文件 ...

  9. Requests 方法 -- post请求操作实践

    1.登录Jenkins抓包 ,小编的Jenkins部署在Tomcat上,把Jenkins.war 包放置到webapps目录. 本次用浏览器自带抓包,按下F12操作,主要看post就可以,登录是向服务 ...

  10. 微信小程序云开发-云存储-带图片的商品列表携带id跳转至商品详情

    一.商品列表页 1.wxml文件 在view中添加点击事件goToGoodDetail,绑定数据data-id <!-- 添加点击事件goToGoodDetail --> <view ...