第2章 从集中式到分布式数据库
话说天下大势,分久必合,合久必分。周末七国分争,并入于秦。及秦灭之后,楚、汉分争,又并入于汉。汉朝自高祖斩白蛇而起义,一统天下,后来光武中兴,传至献帝,遂分为三国。
天下大势的分分合合,正如走路使用两条腿,左右交替进行,才能行稳致远。只有左,或者只有右,都只能步履蹒跚。
20世纪70~80年代,集中式数据库的代表Oracle、Db2问世,之后不断推陈出新,在商业银行独领风骚数十年。但随着商业银行业务模式的不断创新,产生了大量数据,特别是交易吞吐量开始有了上千倍的增长。在这种情况下,现有的集中式数据库受制于硬件的发展,遇到了性能和容量瓶颈,如何提升数据库的处理能力就摆在了所有商业银行的面前。
在现有的计算机体系结构和硬件没有获得实质性突破(如量子计算的商用)之前,聪明的人类通过对架构的改进,推出了分布式数据库,极大地增强了系统的整体性能和容量,满足了当前飞速发展的业务需要!
集中式和分布式就如数据库的两条腿,交替迈进,有力地推动了数据库领域的发展,本章将详细讲解数据库从集中式到分布式的演进过程。
随着商业银行数字化业务的加速发展,以及摩尔定律的失效,集中式数据库由于采用单机部署而遇到了性能和容量瓶颈,这不仅意味着业务发展受到影响,而且某种程度上也会影响现有系统的稳定性和可用性。
早在2010年,一些大型的互联网公司就遇到这类制约业务发展的技术问题。最原始的方案就是将一个MySQL数据库拆分为多个库。为了应用程序访问拆分后的多个数据库,阿里巴巴开发了TDDL(Taobao Distributed Data Layer)框架,解决分库分表对应用的透明化以及异构数据库之间的数据复制;2016年,当当网又发起了Sharding-JDBC项目,这些方案都是通过包装JDBC来屏蔽MySQL分库分表的逻辑,实现业务系统如同使用单机数据库一样方便。
后来,JDBC封装框架逐渐演变到中间件。在TDDL的基础上,阿里巴巴逐渐发展出来了DRDS;当当网发起的Sharding-JDBC转移到京东数科。京东数科的数据库技术人员之后又孵化出来了Sharding-Proxy,目前已经作为Apache软件基金会的顶级项目,名称为Apache ShardingSphere。这些方案都是以一个虚拟的MySQL Server提供更透明和无侵入的客户端接入服务。
另一方面,随着Google的Spanner、阿里巴巴的OceanBase和PolarDB、AWS的Aurora、PingCAP的TiDB、Cockroachlabs的CockroachDB等商业或开源技术的不断发展,分布式数据库开始大规模兴起。这些技术试图通过一个直接的分布式数据库来解决上述问题,而不仅是包装JDBC或者中间件来解决。
以上种种对于企业来说,都是通过采用类似Apache ShardingSphere这种分布式的数据库中间件或者CockroachDB这种分布式数据库作为整体解决方案,增强数据库的吞吐能力,保证高可用和实时强一致性的同时,实现线性的水平扩展能力,在一定规模上提升企业信息系统的数据管理上限。
本章以某商业银行电商管家系统讲起,介绍该系统演化中每一个阶段的技术特点、解决的问题、适用的场景等;最后进入本章的主题,将以中信银行自研的金融级分布式数据库——GoldenDB为例,深入讲解其原理、应用开发和运维最佳实践。