购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.4 理解ShardingSphere

针对对等数据服务模型存在的瓶颈问题,最佳的解决方案是使用统一的数据服务平台。ShardingSphere是一个独立的数据库中间件平台,它基于Database Plus,致力于在多模型数据库之上打造标准和生态圈。因为基于Database Plus,所以ShardingSphere的3个核心特性是连接、增强和可插拔。接下来将详细讨论这些概念。

1.4.1 连接

ShardingSphere的基本目标是,让你能够易如反掌地连接数据和应用。它力求与既有数据库兼容(让你感觉像直接与数据库交互一样),而不是通过开发新的API来打造全新的数据库标准。

统一的数据库入口(数据库网关)让ShardingSphere能够模拟目标数据库,并透明地访问数据库及其外围生态圈,例如应用SDK、命令行(command line)工具、图形用户界面(graphical user interface,GUI)、监控系统等。ShardingSphere当前支持众多的数据库协议,包括MySQL协议和PostgreSQL协议。

目标中的连接指的是ShardingSphere强大的数据库兼容性,即在数据和应用之间建立独立于数据库的连接,这极大地改善了增强特性。

1.4.2 增强

如果只连接到数据库,而不提供额外功能,那就只能算作实现计划,其效果自然与直接连接到数据库没什么两样。然而,这样的实现计划不仅会增加网络开销,还会降低性能,因此给你带来的价值很低。

ShardingSphere的主要特点是能够捕获数据库入口,并透明地提供额外的功能,例如重定向(分片、读写分离和影子库)、转换(数据加密和数据脱敏)、身份认证(安全性、审计和授权)及治理[熔断、访问限制与分析、服务质量(quality of service,QoS)和可观察性]。

鉴于数据库的碎片化趋势,集中管理所有数据库功能就是一项不可能完成的任务。ShardingSphere提供的额外功能既不是针对单个数据库的,也不是要弥补数据库功能的缺陷,相反,它们旨在消除数据库的束缚,以统一方式解决DBMS关注的问题。

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提供了极大的灵活性。

● 它适用于所有基于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接入的数据库。

上述的数据库和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是非侵入性的,很容易将其添加到系统中,这提供了极大的灵活性。

你可能会问,这两个适配器有什么不同?下面简单比较它们。有关这两款产品的更深入的对比,请参阅第5章。

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混合部署的拓扑结构 ULgst6a+ZYkmqkd2gcuSVeQAApI0as4x4OQ5MIQWypBvGcBCuKMzAc1Q3IYreJN+

点击中间区域
呼出菜单
上一章
目录
下一章
×