ShardingSphere遵循的核心设计理念是Database Plus。在过去几年,数据库行业在快速扩展,新解决方案层出不穷,它们致力于填补因互联网相关行业发展而带来的日益庞大的空白。
一些著名的例子有MongoDB、PostgreSQL、Hive和Presto。这些解决方案深受欢迎,这表明在数据库领域,碎片化是个日益严重的问题,而最近风险资本的涌入进一步深化了这种趋势。在DB-Engines的数据库排名榜上,榜上有名的数据库超过350个,还有很多数据库没有进入榜单。在卡内基梅隆大学的Database of Databases榜单上,当前列出了792个值得关注的DBMS。
如此多的DBMS充分说明了企业对DBMS的需求方向有多广泛。然而,凡事都有两面性,数据库这样的繁荣带来了如下问题。
● 应用高层需要使用不同的数据库方言来与不同类型的数据库通信,需要在保留既有连接池的同时添加新的连接池。
● 需要聚合来自不同数据库的分布式数据。
● 需要满足碎片化数据库的相同需求,如加密。
● 在生产环境中,需要运维不同类型的数据库,这可能带来严重的效率问题,加重DBA的负担。
我们推出了Database Plus,在碎片化数据库之上添加一个标准化的层和生态,以提供统一的操作服务,将数据库之间的差异隐藏起来。在这样的环境中,应用只需与标准化的服务通信。另外,在应用和数据库之间可添加额外的功能。这种机制让这层(ShardingSphere)能够拦截流量、分析所有的请求、修改内容并将查询重新路由到目标数据库。
基于Database Plus这种简单而重要的理念,ShardingSphere能够提供分片、数据加密、数据库网关和影子库等。在第1章介绍过,Database Plus理念的核心特性连接、增强和可插拔,这里再简要回顾一下。
● 连接意味着将应用连接到数据库。在有些情况下,应用不需要知道数据库的变化情况,即便在架构底部添加或删除了特定类型的数据库,应用也无须做相应的调整,因为它们的通信对象自始至终都是ShardingSphere。
● 增强意味着通过ShardingSphere改善数据库功能。用户为什么要通过ShardingSphere而不是原始数据库进行交互呢?坦率地说,仅靠连接理念不足以说服用户去考虑使用ShardingSphere,因此对ShardingSphere来说,增强理念是不可或缺的,这样ShardingSphere才能够在将应用连接到数据库的同时,向用户提供额外的宝贵功能,如分片、加密和身份认证。
● 支持可插拔是由于用户的需求和面临的问题各异,用户希望ShardingSphere能够考虑自己的需求,这意味着必须支持用户定义(定制的)规则和配置,然而产品销售方(或产品厂商)的立场完全相反,他们更愿意提供标准化的产品,这样可避免额外的劳动、开发和定制开销,因此必须寻找解开这个“死结”的答案。ShardingSphere社区经过努力,让ShardingSphere提供了与大多数功能相关的API。大致而言,ShardingSphere通过与这些API交互来执行核心工作流程,因此不管具体的实现是什么样的,ShardingSphere都能够很好地工作。对于每项功能,ShardingSphere都提供了正式实现和默认实现以支持开箱即用,同时提供了无限的定制空间。
这些功能都是可插拔的,如果不想实现分片功能,可省略其插件配置,只提供一个数据加密设置文件,让数据库是加密的;如果要同时使用分片和加密功能,只需将这种要求告知ShardingSphere,它就会封装这两项配置,为你打造一个加密的分片数据库。
前文提到,数据库的繁荣导致了市场的碎片化,无法满足众多新开发的应用的各种服务需求。新的行业需求导致应用和碎片化数据库之间出现缝隙,图2.4对此做了概述。
Database Plus的好处可总结为如下几点:
● 使用标准化层隐藏了不同数据库在用法方面的差异;
● 极大地减少了为替换数据库而需要投入的精力;
● 通过提供增强功能解决了众多恼人的问题;
● 根据具体情况组装不同的功能插件;
● 大多数内核层都允许用户自定义实现功能代码。
这种更新理念始于ShardingSphere 5. x 。以前,ShardingSphere的定位是分片中间件层,旨在帮助用户对数据库进行分片。那时ShardingSphere只是一个轻量级驱动程序,与现在的定位完全不同。用户直言不讳地表达了期望,希望除分片功能外,ShardingSphere还能支持其他更有价值的功能。为满足社区的期望,我们将其他卓越功能纳入开发计划。
图2.4 新的行业需求导致应用和碎片化数据库之间出现的缝隙
然而,如果只是简单地组合各种功能,架构将难以维护,同时很难以可持续的方式紧跟发展潮流。为满足这些需求并消除ShardingSphere项目最初的混乱状况,我们做出了艰苦努力,最终推出了支持前述3种特性的Database Plus。
这个迭代过程让ShardingSphere有别于其他类似的分片产品。坦率地说,Citus和Vitess深受欢迎,它们在扩展PostgreSQL和MySQL方面表现非常出色。当前,Citus和Vitess专注于分片和其他相关功能,类似于旧版本的ShardingSphere,ShardingSphere采取的是一条全新的路径。