近日,腾讯云发布了分布式数据库解决方案(DCDB),旨在解决集中式(单机)数据库在存储容量、并发性能、快速扩容等因业务增长而达到瓶颈的问题。
分布式数据库是部署在腾讯云上的一种支持自动水平拆分(分表)的Share Nothing架构的分布式数据库,简称为DCDB。腾讯公司90%以上交易、转账,资金等核心系统都使用了DCDB。
什么是分布式数据库DCDB?
DCDB对外呈现为一个完整的逻辑实例,后端实际上是若干物理节点(或独立的数据库实例)组成。逻辑实例屏蔽了物理层实际存储规则,业务无需关心数据层如何存储,也无需在业务代码中集成拆分方案或再购买中间件,只需要像使用集中式(单机)数据库一样使用DCDB即可。
从DCDB的原理可知,虽然从客户端视角来看,是一张表;但实际上读写负载是分散到若干物理分片(承载在不同物理节点的物理表),因此,从理论上DCDB的并发性能、处理能力、存储容量可以线性增长。
弹性扩展,一键扩容
DCDB支持实时在线扩容,扩容时只需要到腾讯云控制台点击,系统将自动实现扩容和水平拆分规则的调整。扩容过程对业务完全透明,无需业务停机,也不会中断业务链接。扩容时仅部分分片存在秒级的只读(只读是实际在做数据校验),整个集群不会受影响(原理简图如下)。
更多的高级特性,满足不同应用场景
DCDB可通过只读帐号等方案支持读写分离,与普通读写分离不同的是,DCDB主从节点中的每个从机都支持只读。如果配置有多个从机,将自动分配到低负载从机上,以支撑大型应用程序的读取流量。
DCDB提供热点更新能力,秒杀或大型活动可能导致瞬时超大并发修改数据库某个参数值。传统的方案是将商品库的子库前置在Cache层或业务层,通过蜕化数据强一致(后通过第三方对账确保库存和抢购一致),而仅保证单个用户看到的库存减少规律一致。稍稍研究下,我们就会发现,这种实现方案相当复杂。而 DCDB通过在数据库层直接实现热点更新能力来做到满足业务秒杀的需求,不仅减少了出错的概率,还提升了极大的开发效率。
DCDB支持分式布事务,可以为银行转账、电商交易等业务提供支持有效支持,通过多种优化,目前分布式事务提供了高于开源XA(分布式事务简称)50%的性能。
DCDB使用了两级分区方案:第一级即我们常说的水平拆分,原理是使用HASH算法,使得数据能均匀的分散到后端的所有节点;第二级分区使用RANGE算法,使得相关的数据能够落在一个逻辑分区。二级分片可以均衡数据分布和访问,为快速一键扩容提供基础支撑,也可以满足快速删除流水数据等场景。
DCDB还有全局唯一数字序列、统一参数管理、兼容MySQL函数等众多高级特性,可满足各类业务需求。
高可用与强同步(MAR)
在生产系统中,通常都需要用高可用方案来保证系统不间断运行;数据库作为系统数据存储和服务的核心能力,其可用要求高于计算服务资源。目前,数据库的高可用方案通常是让多个数据库服务协同工作,当一台数据库故障,余下的立即顶替上去工作,这样就可以做到不中断服务或只中断很短时间;或者是让多台数据库同时提供服务,用户可以访问任意一台数据库,当其中一台数据库故障,立即更换访问另外数据库即可。
由于数据库中记录了数据,想要在多台数据库中切换,数据必须是同步的,所以数据同步技术是数据库高可用方案的基础;当前,MySQL原生为异步同步,主机故障时容易造成数据丢失。因此腾讯自主研发了的基于MySQL协议的异步多线程强同步复制方案(Multi-thread Asynchronous Replication MAR),相比MySQL原生的异步复制,其性能、效率和适用性更据优势。MAR强同步方案强同步技术具有以下特点
l确保主从节点数据实时完全一致;
l对业务层面完全透明;
l将串行同步线程异步化,引入线程池,但不占用工作线程,大幅度提高性能;
l支持集中式或分布式架构;
l支持自动成员控制,故障节点自动从集群中移除,节点恢复自动加入,无需人工干预;
l无需共享存储设备。
强同步原理如下图,由于采用线程池能力,强同步(MAR)性能上优于其他主流同步方案,通过对比在跨可用区(IDC机房,延迟约10~20ms)同样的测试方案下,MAR技术性能优于MySQL5.6半同步约5倍,与MySQL5.7的异步同步性能基本一致。
解决性能、并发、存储等难题
众所周知,互联网业务普遍存在用户基数大、实时并发高等特点。部分核心交易系统数据库单表已经上亿行且访问日益变慢,制约业务发展。DCDB提供线性水平扩展性能,能够极大提升数据库处理能力,应对超大并发、超高性能、海量数据存储的场景。需要说明的是,分布式系统虽然解决了性能并发等难题,但其架构天生带来的缺陷就是无法完全兼容MySQL等单机语法,因此迁移到DCDB可能仍需一定开发,但相对于业务能力的提升开发成本或许可以忽略。
正是因为DCDB众多优势,腾讯云DCDB已经应用于包括腾讯充值(米大师)、微信支付、阅文集团(起点等)、三一重工(树根互联)、微众银行等数十万个业务,场景包括金融交易、春节红包、电子商务交易平台、O2O、分支IT系统向总部聚合、物联网传感器数据、大型游戏等各类场景;配合强同步和高可用等能力,DCDB目前已经应用在包括股份制银行等等500多家金融客户的业务场景中。