1.4.3 可插拔
在ShardingSphere的整个发展过程中,通过逐步添加新功能的方式对其进行了扩展。为了避免陡峭的学习曲线吓退新的用户和开发人员,导致他们不敢在数据库环境中集成ShardingSphere,ShardingSphere采用了可插拔架构。
ShardingSphere的核心价值不在于它能访问多少数据库、提供多少功能,而在于它的可插拔架构,这种架构的可扩展性极强,对开发人员非常友好。开发人员可在不修改源代码的情况下,给ShardingSphere添加定制的功能。
ShardingSphere的可插拔架构由微内核和3层可插拔模块组成。ShardingSphere架构之上是顶层API,因此内核根本不知道各种功能的存在。对于不需要的功能,只需将相关的依赖删除即可,而这不会给系统带来任何影响。图1.3展示了ShardingSphere的内部结构。
可以看到,3层之间是彼此完全独立的。面向插件的设计意味着内核和功能模块提供了全面的可扩展性支持,让你在构建ShardingSphere实例时,即便将某些功能模块删除(即选择不安装它们),也不会影响总体的使用体验。
1.可供选择的架构
数据库中间件需要提供两方面的支持:访问数据库的驱动程序和独立的代理。考虑到任何架构适配器都存在缺陷,ShardingSphere选择开发多个适配器。
ShardingSphere-JDBC和ShardingSphere-Proxy是两款独立的产品,但你可选择采用混合模式(混合部署),即同时部署它们。这两款产品都提供了数十个增强功能,它们将数据库视为存储节点,适用于Java同构、异构语言、云原生等场景。
图1.3 ShardingSphere的内部结构
2.ShardingSphere-JDBC
ShardingSphere-JDBC是ShardingSphere的前身,它是ShardingSphere生态圈的第一款产品,是一个轻量级Java框架,在Java数据库互连(Java database connectivity,JDBC)层提供额外的服务。ShardingSphere-JDBC提供了极大的灵活性。[1]
● 它适用于所有基于JDBC的对象关系映射(object relational mapping,ORM)框架,如JPA、Hibernate、MyBatis和Spring JDBC Template,我们还可直接将它与JDBC结合起来使用。
● 它支持所有的第三方数据库连接池,如DBCP、C3P0、BoneCP和HikariCP。
● 它支持所有遵循JDBC标准的数据库,当前ShardingSphere-JDBC支持MySQL、PostgreSQL、Oracle、SQL Server和其他所有支持JDBC接入的数据库。
[1]TTL为存活时间(time to live)的缩写。
上述的数据库和ORM框架中可能很多都是你耳熟能详的,那么ShardingSphere-Proxy又提供了哪些支持呢?下面来简要介绍一下。
3.ShardingSphere-Proxy
ShardingSphere-Proxy是ShardingSphere生态圈的第二款产品。作为透明的数据库代理,它提供了一个数据库服务器,其中封装了数据库二进制协议,因此它支持异构语言。这个数据库代理具有如下特征:
● 对应用来说是透明的,因此可直接用作MySQL/PostgreSQL;
● 支持所有与MySQL/PostgreSQL协议兼容的客户端。
图1.4是ShardingSphere-Proxy的典型系统的拓扑结构,展示了ShardingSphere-Proxy所处的位置。
图1.4 ShardingSphere-Proxy的典型系统的拓扑结构
可以看到,ShardingSphere-Proxy是非侵入性的,很容易将其添加到系统中,这提供了极大的灵活性。[2]
你可能会问,这两个适配器有什么不同?下面简单比较它们。有关这两款产品的更深入的对比,请参阅第5章。
[2]CLI为命令行界面(command line interface)的缩写。
4.ShardingSphere-JDBC与ShardingSphere-Proxy比较
在简单的数据库中间件项目中,不同的接入端意味着不同的部署结构,但ShardingSphere是个例外,它支持大量的功能。因此,随着大数据计算和资源需求的日益增长,不同的部署结构有不同的资源分配方案。
ShardingSphere-Proxy有一个可独立部署的分布式计算模块,适用于执行多维数据计算的应用(这些应用对延迟不那么敏感,但需要使用较多的计算资源)。有关ShardingSphere-JDBC和ShardingSphere-Proxy的更深入的对比,请参阅第5章或ShardingSphere官网文档。
5.混合部署
ShardingSphere-JDBC采用非集中式架构,适用于基于Java的轻量级、高性能OLTP应用,而ShardingSphere-Proxy提供了静态入口和异构语言支持,适用于联机分析处理(online analytical processing,OLAP)应用,还适用于管理和操作分片数据库。
因此,ShardingSphere生态圈提供了多个端点。我们通过混合部署ShardingSphere-JDBC和ShardingSphere-Proxy,并采用相同的分片策略,可以打造出适合多个应用场景的系统。图1.5简要展示了ShardingSphere混合部署(同时部署ShardingSphere-JDBC和ShardingSphere-Proxy)的拓扑结构。
通过像图1.5那样同时部署ShardingSphere-JDBC和ShardingSphere-Proxy,可获得混合计算功能,这让你能够调整系统架构,使其更贴合需求。
图1.5 ShardingSphere混合部署的拓扑结构