分库分表中间件特性分析
随着互联网行业的兴起, 分库分表中间件在很多大型网站获得了成功应用。分库分表中间件本身不具备完整的数据库特性,毕竟顾名思义只是一个中间件,还需要搭建数个关系数据库系统作为服务节点。有些传统企业希望借鉴互联网企业的经验,引入这类中间件来构件分布式系统,以达到降低成本,提升系统性能和灵活性的目的,但是传统企业引入此类架构的风险不容小觑。
SQL语言特性非常丰富,是上层应用操作数据库的标准工具。但是几乎所有的中间件对SQL的支持非常弱,对应用施加种种限制,有的甚至连数据库基本的唯一性约束都无法提供,连接、子查询、分类聚合、排序等基本操作要么需要符合极为有限的条件,要么索性不支持,把特性优雅功能强大的SQL语言限制得支离破碎,成熟的应用开发模式完全不适用,很多数据库的功能被迫提升到业务层,增加项目的复杂度,应用开发或调整的成本和风险违背了企业引入此类架构的初衷。
分布式增加了系统复杂性,涉及的软硬件较多, 出问题的概率急剧上升,数据一致性的保证复杂化,增加了维护的麻烦。中间件作为代理,存取数据需要增加至少一次交互,不可避免有性能损耗。很少有这类系统能提供以tpc-c为模型的事务处理性能指标。
分库分表中间件的分布系统中,数据被分布到多个节点,但是目前的中间件并没有能力有效去管理这些分布数据,SQL功能被肢解就是直接体现,这导致对数据做一些简单的统计分析报表都成了很大的难题。当然也有解决办法,不嫌麻烦的话把这些数据迁移到另外一个系统,比如时尚的hadoop,再编写算法运行一些批作业来完成分析工作,当然这需要额外的投资。
数据库系统作为管理数据,共享数据的平台,需要保证数据的一致性、完整性,方便数据共享,随时提供存取和分析,才能最大体现其价值。目前典型的单机服务器,或基于单机集中式模型构建的读写分离等集群,无论是CPU计算能力,内外存的存储容量,都足以应付传统企业的大部分业务,高性能大容量的PCI-E存储卡的应用也部分抵消了分布式IO优势。采购多台低配的机器去配置一个小型基于分库分表的分布式系统,是不可取的做法。用类似或更底的预算,去配置一台配置稍高的单机系统,采用集中共享模式,将消除中间件架构带来的一切麻烦,极大简化系统维护工作量,提升系统综合效能。