亿级客户和PB级数据规模的金融级数据库实战历程

  

  微众银行在2014年成立之时,就非常有前瞻性的确立了分布式架构的基础架构。当时,腾讯有一款金融级的分布式数据库产品TDSQL,其业务场景和对数据库的可靠性要求,和银行场景非常类似。微众银行和腾讯TDSQL团队合作,共同将TDSQL打造为适合银行核心场景使用的金融级分布式数据库产品,并将TDSQL用于微众银行的核心系统数据库。本文是对整个实践历程的总结。

  

一、背景介绍

  

微众银行在2014年成立之时,就非常有前瞻性的确立了微众银行它的基础架构的方向:摒弃传统的基于商业它产品的集中架构模式,走互联网模式的分布式架构。众所周知,传统银行这架构体系非常依赖于传统的商业数据库,商业存储以及大中型服务器设备,每年也需要巨大的它费用去维护和升级,同时这种集中式的架构,也不便于进行高效的实现水平扩展。从过往经验来看,当时除了oracle等少数传统的商业数据库,能满足金融级银行场景的数据库产品并不多。

  

当时,腾讯有一款金融级的分布式数据库产品TDSQL,主要承载腾讯内部的计费和支付业务,其业务场景和对数据库的可靠性要求,和银行场景非常类似,同时也经受了腾讯海量计费业务场景的验证。

  

微众银行基础架构团队,经过多轮的评估和测试,最终确定和腾讯TDSQL团队合作,共同将TDSQL打造为适合银行核心场景使用的金融级分布式数据库产品,并将TDSQL用于微众银行的核心系统数据库。

  

二,为什么TDSQL ?

  

为什么会选用TDSQL,作为微众银行的核心数据库呢?本章节将会详细介绍TDSQL架构,以及TDSQL的核心特性,看看TDSQL是如何满足了金融级场景的数据库要求。

  

1. tdsql架构介绍

  

TDSQL是基于MySQL/Mariadb社区版本打造的一款金融级分布式数据库集群方案。在内核层面,TDSQL针对MySQL社区版本和Mariadb社区版本的内核,在复制模块做了系统级优化,使得其具备主备副本数据强一致同步的特性,极大提升了数据安全性,同时相对原生的半同步复制机制,TDSQL强一致复制的性能也有极大提升.TDSQL集成了TDSQL代理,TDSQL SQLEngineSQLEngine, TDSQL调度器等多个模块,实现了读写分离,AutoSharding,自动主备强一致性切换,自动故障修复,实时监控,实时冷备等一系列功能.TDSQL架构模型如下面两张图所示。

  

  

  

  亿级客户和PB级数据规模的金融级数据库实战历程

  

  亿级客户和PB级数据规模的金融级数据库实战历程

  

  

  

  

  

我们可以   .

  

  请求通过应用程序发出,经过负载均衡模块,转发到TDSQL SQLEngine集群;TDSQL SQLEngine收到请求后,进行请求解析,然后转发到设置单元内的数据库实例节点上(写请求到主人,读请求可以到主人或奴隶),数据库实例处理好请求后,回包给TDSQL SQLEngine, TDSQL SQLEngine再通过负载均衡模块回包给应用程序。

  

  :TDSQL的一个管理单元称为一个组,每组个单元的每个数据库实例上,都会部署一个TDSQL代理模块.Agent模块会收集所在数据库实例的所有监控信息(包括节点主备角色信息/节点存活状态/请求量/TPS/CPU负载/IO负载/慢查询/连接数/容量使用率等等),上报到动物园管理员集群;管理员相当于整个TDSQL集群元数据存储管理中心,保存了集群所有元数据信息;TDSQL调度器模块会监控管理员的所存储的上报信息,并根据集群状态启动不同的调度任务,相当于TDSQL集群的大脑,负责整个集群的管理和调度。

  

2。TDSQL noshard与分片模式

  

TDSQL提供了noshard与切分两种使用模式,如下图所示。

  

  

  

  亿级客户和PB级数据规模的金融级数据库实战历程

  

  

  

  

  

  ,不做自动的分库分表,在语法和功能上完全兼容于MySQL,缺点是只支持垂直扩容,这会受限于单实例服务器的性能和容量上限,无法进行水平扩展。

  

  。通过TDSQL SQLEngine模块,实现数据库的切分和分布式事务功能,底层的数据打散在多个数据库实例上,对应用层还是统一的单库视图.Shard模式可以实现容量和性能的水平扩展,通过两阶段XA支持分布式事务和各种关联操作,但是目前还不支持存储过程,同时在建表的时候需要业务指定分片键,对部分业务开发来说觉得会有一定的侵入性。

亿级客户和PB级数据规模的金融级数据库实战历程