如今,我们正处于数据库从互联网基础软件转变为社会数字化基础软件的时代,在传统集中式数据库已不能满足大规模数据承载需求与高并发处理需求的形势下,基于海量数据场景应用而生的分布式数据库迎来应用热潮。据IDC调研,目前约26.8%的企业级市场用户部署了分布式数据库,超过90%的企业认可分布式数据库部署后的效果,
在分布式数据库中,主要有三类解决方案,一类是以中间件+单机数据库为主的分布式数据库,下层的单机数据库提供存储和执行能力,在多个单机数据库上封装一层中间层,以统一分片规则管理及处理分布在不同数据库节点的数据,并提供SQL解析,请求转发和结果合并的能力;第二类是原生分布式数据库,在架构设计之初,便根据分布式一致性协议做底层设计,因此,数据的存储、查询、处理都天然具备分布式特性,各数据节点提供对等的读写服务,组成统一的集群对外提供服务;第三类是通过构建分布式共享存储实现扩展,采用非对称计算节点,大部分公有云数据库都属于此类。在本文中,我们重点说说前两类。
无论是分库分表中间件还是原生分布式数据库,目的都是解决数据容量问题,但实际上,二者的实践路径有本质区别。那么具体而言,分库分表中间件与原生分布式数据库的区别在哪,各自有哪些优劣势?原生分布式数据库与如今热炒的云原生数据库又是什么关系?笔者采访了OceanBase CTO杨传辉(日照),以下为他的解读。
区别一:是否依赖中间件
分库分表中间件大多采用中间件来补充分布式的能力,也就是说在各数据库节点上,架构一层事务处理和查询优化的中间层。在这套系统中,各个数据库可能是同构型,也可能是异构型,将各个数据库组合在一起,是一种松耦合的方式,会暴露不少问题,如事务处理能力、高可用受限等。
原生分布式数据库,由各个同构型的数据库组成,每个数据库节点天然具备分布式的能力,无需借助额外的中间件,也无需用户关注集群实现细节,是一个紧耦合的系统。由此可见,原生分布式数据库的能力有很大发展空间,但其开发难度也较大。
区别二:是否依赖分库分表
弹性扩容能力是考验分布式数据库面对流量高峰或极端场景时能否持续稳定运行的重要因素。比如在交易场景中,高峰时每秒可产生一百万笔订单,每笔订单对于数据库而言都是一个业务,需要数据库做扩容处理,其中的关键点就在于是否采用分库分表的方式,这对扩容能力有很大制约。
分库分表中间件的分片规则基于算法提供,下层计算节点之间并不会进行数据交互,扩展下层计算节点的时候就无法按需扩展。通过分库分表将原有机器划分为一百份,每台机器处理一笔业务,而如果想进一步拆分为一千份、一万份就很难做到了。这个过程还需要停机,由开发人员手动拆库,效率低,且弹性有限,但好在对数据库的依赖也低。
原生分布式数据库中设有分区表的功能,可以将中间件所拆分的一百份,每份再拆一百份,总共一万份,且每一份都至少能在一台机器被处理。在此过程中,系统自动扩容、按需扩容,不受数量和规模的限制,且无需人为干预。
分库分表中间件的核心理念是让多台服务器协同工作,完成单台服务器无法处理的任务,尤其是高并发或者大数据量的任务。而原生分布式高可用设计能够在普通服务器上实现无限水平扩展,通过添加低成本服务器即可扩展算力,提升数据库集群的整体性能。
区别三:是否实现数据强一致
分库分表中间件由于其架构特性,本质是将把单机数据库进行二次处理,在数据一致性、全局事务能力、全局MVCC、副本控制、高可用等方面存在短板,需要有针对性增强。
大多数原生分布式数据库是在分布式KV的基础上发展出SQL计算引擎,将分布式存储、事务、计算有机的结合在一起,数据由系统自动打散并存储多个副本,通过一致性协议保证多个副本和事务日志的一致性,对分布式事务、全局MVCC等支持更为彻底。
区别四:能否实现业务平滑迁移
众所周知,数据库对企业与机构来说是心脏所在,尤其是金融、能源、社保、政务等行业。当数据库已达到能力天花板或不足以满足企业需求时,企业也会考虑“换心”来维持活力。此时数据能否平滑迁移至新的数据库,保证数据的正确性且不丢失、保证业务不受影响是重要考虑因素。
分库分表中间件由于本身不具备分布式的能力,进行数据迁移时需要对业务做改造。才能使数据库正常运行。而且,由于每张表只能有一个分片规则,业务建模需要重新规划,业务代码也要相应修改,改造成本高。
而原生分布式数据库因其高兼容和透明性的优势,可以在不改业务代码的情况下,支持数据迁移,并保证数据库正常运行,不损害性能。因为整个分布式结构是包裹在集群内部的,应用对此无感知,对应用来说,与使用集中式数据库没有区别,所以不需要分布式改造。此外,由于原生分布式数据库对硬件依赖少,在云时代,可以灵活进行混合云和多云部署,以及跨多云的数据管理,为企业提供了更多且更方便的服务选择。
总的来说,分库分表中间件通常是在单机数据库之上构建数据分区的特性,支持扩展能力。因为基于传统的单机数据库,相对来说比较稳定,用户更容易上手。但缺点也很明显,其底层不具备分布式能力,只是在宏观架构上加补丁,不断增加机器冗余和系统复杂度,能力天花板较低。原生分布式数据库虽然综合表现更佳,而且支持调整底层模型,优化各方面的能力。但由于技术发展时间相对短,一些产品解决方案成熟度待提升。从眼下的行业发展趋势来看,随着技术的不断成熟,原生分布式数据库正在成为主流,大量企业与组织开始着手对传统数据库进行升级。
云原生数据库天然生长在云环境中,而且都是分布式的。云原生数据库有两种分布式的方式,一种方式是计算存储分离,例如,计算部分采用集中式数据库,存储采用远程的、分布式的文件系统。另一种方式是,计算与存储都采用分布式。
而原生分布式数据库既可以部署在本地或私有云,也可以部署在公有云上。比如OceanBase,除了支持计算存储分离的分布式之外,它还支持计算系统的分布式扩展,提升系统的处理能力。当它被部署到云上,就成为了云原生分布式数据库,提供与本地相同的用户体验。
此外,原生分布式数据库部署灵活的特性意味着不被特定硬件和服务绑定,能够做到机房部署、任意公有云部署,甚至集群内跨多基础设施的混合云或多云部署,被称为“多云原生”。
分库分表中间件在十多年前顺应互联网时代而生,相比传统集中式数据库,它确实帮助很多企业解决了降本增效的根本问题,顶住了更多的服务压力。如今十几年过去,新的数据库处理需求使传统分布式数据库的不足与限制暴露无遗,适应新环境需求的解决方案,即原生分布式数据库应时而生,逐渐变得炙手可热。未来,原生分布式数据库结合云原生,将发挥更大的能力。
而企业在选择数据库时,不管是分库分表中间件还是原生分布式数据库,亦或云原生分布式数据库,首要考虑数据的正确性。怎么判定数据库是否能够保证数据正确性呢?
第一,这款分布式数据库经过了核心业务场景的检验,比如在金融、大促等海量、实时的数据处理场景中,持续稳定。
第二,该分布式数据库已经在行业中证明自己,如TPC-C(主要测试联机交易处理能力)、TPC-H(检测系统处理复杂查询分析能力的多个方面)等数据库行业公认的测试,以及行业企业的良好口碑。
此外,每个企业需要根据业务特性选择数据库的功能特性,可以视情况做具体取舍。如今,分库分表中间件面临的挑战愈发巨大,具备一体化架构的原生分布式数据库正成为不少企业试用并应用的对象。其兼顾集中式与分布式的双重技术优势,将多种负载能力融合于一套数据库中。一方面具备强兼容性,能够兼容传统数据库如MySQL、Oracle的功能与单机性能;一方面具备强扩展性,当机器容量不足时,只需扩展机器,就能够解决大规模的需求。重要的是,一套系统便可处理OLTP(联机事务处理)与OLAP(联机分析处理)的需求,并保证事务的ACID(原子性、一致性、隔离性和持久性),加之本地部署与多云部署的灵活特性,也更适用于社会数字化时代。