本文根据 PingCAP DevCon 2021 上来自微众银行资深数据库架构师黄蔚的分享整理而成,主要阐述 TiDB 在微众银行的应用实践,包括微众银行选择 TiDB 的背景和 TiDB 的部署架构,以及 TiDB 在贷款核心批量场景的应用,最后分享了基于 TiDB 优化方案的最佳实践和未来规划。
从 2018 年底微众银行开始接触 TiDB 的团队,到 2019 年上线,TiDB 在数据库的选型之中展现了很多独有的优势。
TiDB 兼容 MySQL 协议,同时也兼容 MySQL 的生态工具,比如备份、恢复、监控等等,不管是应用本身还是运维或是开发人员,从 MySQL 迁移到 TiDB,其成本和门槛都较低。对于 TiDB 原生的计算、存储分离的架构,用户将不必担心容量或者单机性能的瓶颈,某种程度可以把 TiDB 当作一个很大的 MySQL 来使用。同时 TiDB 的数据多副本强一致的特性对金融场景来说十分重要,TiDB 还天然支持多 IDC 的部署架构,可以支持应用做到同城多活的部署架构。此外,TiDB开源社区的运营也非常活跃,比如在 AskTUG 平台可以看到很多用户的典型问题的处理方法,包含大量的宝贵经验可以借鉴,可以进一步降低用户使用 TiDB 的门槛。
现在使用 TiDB 的用户越来越多,不管是互联网头部厂商或者金融行业用户都在大量使用,这也是 TiDB 产品越来越成熟的体现,也给更多用户使用 TiDB 带来了更强的信心。
TiDB 的特性是否能够满足金融机构高可用的架构需求?
这是 TiDB 在微众银行的部署架构,如图所示,首先 TiKV 选择三副本,分别部署在同城的三个数据中心,这样可以实现 IDC 级别的高可用,同时在每个 IDC 部署了一套 TiDB Server,通过绑定到负载均衡器提供 VIP 服务,这样使得应用可以做到多活接入的模式。这套架构也经受过 IDC 级别的真实故障的演练验证,将其中一个 IDC 的网络全部断掉,观察到集群可以快速恢复,我们认为TiDB 能够符合金融场景高可用的要求。
贷款核心批量核算是金融行业比较经典且非常重要的场景,我们将其接入到了 TiDB。下图是之前微众银行贷款核心批量应用场景的架构,左边这部分有很多业务单元,相当于把用户的数据做了单元化拆分,每一个单元化数据可能不一样,但架构和部署模型是一样的,底层用的是单实例数据库,同时批量是在每一个单实例数据库上面运行,最终把批量结果 ETL 到大数据平台给下游使用,那么这个架构有哪些瓶颈或者优化点呢?
它是一个纯批量的应用,意味着有大量的批量的写入、更新以及运算,而且数据量都特别大,亿级或者十亿级别以上,随着业务快速开展,借据数、用户数和流水数据也在持续增涨,如果使用单机数据库来承载,首先受限于单机数据库的性能上限,跑批耗时会越来越长,而且之前单机数据库负载已经很高,IO、CPU 已经达到 70% ~ 80%,如果想提升跑批效率,应用通过增加并发的方式是有风险的,因为数据库负载太高可能造成主备复制延迟或者遇到故障无法进行快速主备切换,所以效率很难提升;其次单机数据库对这种亿级或者十亿级的表加字段或者数据管理难度非常大,虽然微众银行日常会用 online DDL 工具比如 pt-online-schema-change 来做表变更操作,但也会有小概率锁表风险。另外基于资源利用率考虑,批量系统和联机系统复用了同一套单机数据库,所以如果批量任务造成高负载,很可能会影响联机交易。基于这些背景问题,微众银行借助 TiDB 做了架构优化的升级。
升级改造后的架构如下图所示,可以看到微众银行把各个业务单元的数据通过 DM 工具把数据实时同步和汇总到 TiDB,然后批量 APP 直接基于 TiDB 做批量计算,再把结果传到大数据平台,相当于借助了 TiDB 的水平扩展性来达到批量效率的水平扩展。之前是传统的 MySQL 主备架构,会要求 APP 服务器 要跟 MySQL 的主节点是部署在同一个 IDC,而如果是跨机房访问,网络延时会比较大进而影响批量耗时,所以其他 IDC 的 APP服务器 就处于 standby 的状态,会有一定的资源浪费,而 TiDB 架构的所有 TiKV 节点可以同时读写,所以可以多个 IDC 同时启动批量任务,最大化资源利用率。
TiDB 在微众银行贷款核心业务场景中的使用,总结有三个主要的价值收益。
以上这些收益可以看到比较明显的效果,那么微众银行做了哪些优化或者遇到了哪些问题呢?
微众银行从 2018 年开始调研及 POC,2019 年上线了第一个 TiDB 的应用,当前 TiDB 在微众银行的应用领域已覆盖了贷款、同业、科技管理、基础科技等等,当前还有多个核心业务场景在做 POC 测试。针对未来的规划有五个方面:
1.TiDB 的云原生 + 容器化。可以带来比如自动化运维能力的提升、资源调配的能力等等。
2.基于 Redis + TiKV 的持久化方案。主要是替换 Redis + MySQL 的兜底方案,借助 TiKV 天然的高可用特性来做持久化的方案。
3.基于 SAS 盘低成本应用。微众银行在行内有很多归档场景,数据量特别大,因为受监管要求需要保留很长时间,针对这种存储容量要求高但低频访问的场景,TiDB 基于 SAS 盘低成本的方向也会做一些试点。
4.国产化 ARM 平台的 TiDB 应用。去年微众银行已经有业务上了 TiDB ARM,未来随着国产化的趋势,这块将会被继续加大投入力度。
5.TiFlash 的评估与应用。TiFlash 提供的是 HTAP 的能力,尤其像实时风控以及轻量 AP 查询的场景会带来很大帮助,这也是微众银行未来的重点规划方向。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。