无论是分库分表中间件还是原生分布式数据库,目的都是为了解决数据容量问题,但实际上两种方式有本质区别。那么,具体来说,原生分布式数据库有什么区别,它们的优缺点是什么?下面我们具体谈一谈。 区别一:是否依赖中间件 数据库和表分离的中间件大多采用中间件来补充分布式能力,也就是说在每个数据库节点上构建一个事务处理和查询优化的中间层。在这个系统中,所有的数据库可以是相同的配置,也可以是异构的。把所有数据库组合在一起是一种松耦合的方式,会暴露出很多问题,比如事务处理能力,高可用性限制等等。 原生分布式数据库,它由所有配置相同的数据库组成,每个数据库节点天然具有分布的能力,它是一个紧密耦合的系统,不需要额外中间件的帮助和用户对集群实现细节的关注。可见原生分布式数据库的能力有很大的发展空间,但其发展也有难度。 区别二:是否依赖子分库分表 弹性扩容是检验分布式数据库在面对流量高峰或极端场景下能否持续稳定运行的重要因素。比如一个交易场景,高峰时段每秒可以产生一百万笔订单,每笔订单对于数据库来说都是一笔业务,需要数据库进行扩展。关键在于是否采用分库分表的方法,这极大地制约了容量的扩展。 数据库和分表中间件的分片规则是基于算法提供的,下层计算节点之间没有数据交互,下层计算节点无法按需扩展。原机器按子数据库、子表分成100份,每台机器处理一笔业务。但是,如果你想把它们进一步拆分成1000份和10000份,就很难做到了。这个过程还是需要关闭,开发者手动反汇编库,效率低,灵活性有限,但好在对数据库的依赖也低。 原生分布式数据库有分区表的功能,可以拆分一百份中间件,然后再各拆分一百份,总共一万份,每份至少可以在一台机器上处理。在这个过程中,系统自动按需扩展,不受数量和规模限制,不需要人工干预。 数据库和分表中间件的核心思想是让多个服务器协同工作,完成单个服务器无法处理的任务,尤其是高并发或数据量大的任务。而原生的分布式高可用性设计,可以在普通服务器上实现无限的横向扩展,通过添加低成本的服务器来扩展计算能力,从而提高数据库集群的整体性能。 区别三:是否实现强数据一致性 数据库分离和表分离的中间件由于其架构特点,本质上会对单个数据库进行两次处理,在数据一致性、全局事务能力、全局MVCC、副本控制和高可用性等方面存在不足,需要有针对性的增强。 大多数原生分布式数据库在分布式KV的基础上开发了SQL计算引擎,将分布式存储、事务和计算有机地结合在一起。数据被系统自动分散,并存储了多个副本。一致性协议保证了多个副本和事务日志的一致性,为分布式事务和全局MVCC提供了更全面的支持。 区别四:能否实现平滑的业务迁移 众所周知,数据库是企事业单位的心脏,尤其是在金融、能源、社保、政务等行业。当数据库已经达到容量上限或者不足以满足企业需求的时候,企业也会考虑“换心”来保持活力。这个时候,数据能否顺利迁移到新的数据库,保证数据的正确性不丢失,保证业务不受影响,是一个重要的考虑因素。 由于数据库部门和表部门的中间件不具备分布式能力,在迁移数据时需要进行业务转换。以便数据库可以正常运行。而且由于每个表只能有一个分片规则,业务建模需要重新规划,业务代码需要相应修改,成本很高。 原生分布式数据库由于其高度的兼容性和透明性,可以在不改变业务代码的情况下支持数据迁移,在不损害性能的情况下保证数据库的正常运行。因为整个分布式结构被包装在集群中,所以应用程序无法感知它。相应的,和使用集中式数据库没什么区别,不需要进行分布式改造。此外,由于原生分布式数据库对硬件的依赖性较小,在云时代,可以灵活进行混合云和多云部署以及跨云数据管理,为企业提供更多更便捷的服务选择。 一般来说,数据库分区和表分区的中间件通常在单机数据库上构建数据分区的特性,并支持扩展能力。由于传统单机数据库相对稳定,用户更容易上手。但是,缺点也很明显。其底层不具备分布式能力,仅在宏观架构上打补丁,不断增加机器冗余和系统复杂度,能力天花板较低。原生分布式数据库虽然整体性能更好,但也支持底层模型的调整和各种能力的优化。但由于技术发展时间相对较短,部分产品解决方案的成熟度有待提高。从目前的行业发展趋势来看,随着技术的不断成熟,原生分布式数据库正在成为主流,大量的企业和组织已经开始对传统数据库进行升级。
原生分布式数据库与子数据库子表中间件的区别
点赞
收藏