ShardingSphere分库分表
由于ShardingSphere-JDBC是无侵的分库分表架构,在不进行动态扩展的时候就可以通过配置文件完成配置。
官网地址:https://shardingsphere.apache.org/document/current/cn/overview/
sharding jdbc支持读写分离,可实现一主多从,但不支持多主多从
一、发展历程
ShardingSphere 的起源,我们不得不提 Sharding-JDBC 框架,该框架是一款起源于当当网内部的应用框架,并于 2017 年初正式开源。从 Sharding-JDBC 到 Apache 顶级项目,ShardingSphere 的发展经历了不同的演进阶段。
在2016年开始、开源,当时它的名字还是Sharding JDBC。2017年发布了2.0版本,主打数据库治理功能;2018年正式更名为Sharding Sphere,而Sharding JDBC则演变为生态圈中的一部分,并且在同年开发了具有独立形态的Proxy代理,当年10月份通过Apache的投票,正式成为Apache孵化项目,也再次更名为Apache Sharding Sphere。大概一年半时间左右,成为Apache顶级项目,到了2021年迎来了5.0版本,从而开启一个新的机缘,提出了Databace Plus理念,是指构建数据库的上层标准。
简单来说,Sharding Sphere对于数据库不是去替换,而是提供了增强能力,如分布式、数据加密等能力,在未来像6.0版本会推出全面云化的功能,7.0会面向生态,这是大概的发展历程。
二、ShardingSphere构成
2.1 设计原理
ShardingSphere 采用 Database Plus 设计哲学,该理念致力于构建数据库上层的标准和生态,在生态中补充数据库所缺失的能力。
特点:
连接:打造数据库上层标准
通过对数据库协议、SQL 方言以及数据库存储的灵活适配,快速构建多模异构数据库上层的标准,同时通过内置 DistSQL 为应用提供标准化的连接方式。
增强:数据库计算增强引擎
在原生数据库基础能力之上,提供分布式及流量增强方面的能力。前者可突破底层数据库在计算与存储上的瓶颈,后者通过对流量的变形、重定向、治理、鉴权及分析能力提供更为丰富的数据应用增强能力。
可插拔:构建数据库功能生态
2.2 ShardingSphere-JDBC
ShardingSphere-JDBC定位为轻量级Java 框架,在Java 的JDBC 层提供的额外服务。它使用客户端直连数据库,以jar 包形式 提供服务,无需额外部署和依赖,可理解为增强版的JDBC 驱动,完全兼容JDBC 和各种ORM 框架。
优点:
- 适用于任何基于JDBC 的ORM 框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template 或直接使用JDBC
- 支持任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, HikariCP 等
- 支持任意实现JDBC 规范的数据库,目前支持MySQL,PostgreSQL,Oracle,SQLServer 以及任何可使用JDBC 访问的数据库
2.3 ShardingSphere-Proxy
定位为透明化的数据库代理端,提供封装了数据库二进制协议的服务端版本,用于完成对异构语言的支持。目前提供MySQL 和PostgreSQL(兼容openGauss 等基于PostgreSQL 的数据库)版本,它可以使用任何兼容MySQL/PostgreSQL 协议的访问客户端(如:MySQL Command Client, MySQL Workbench,Navicat 等)操作数据,对DBA 更加友好。
优点:
- 向应用程序完全透明,可直接当做MySQL/PostgreSQL 使用
- 兼容 MariaDB 等基于 MySQL 协议的数据库,以及 openGauss 等基于 PostgreSQL 协议的数据库;
- 适用于任何兼容 MySQL/PostgreSQL 协议的的客户端,如:MySQL Command Client, MySQL Workbench, Navicat 等。
2.4 混合部署架构(jdbc与proxy结合)
ShardingSphere-JDBC 采用无中心化架构,与应用程序共享资源,适用于 Java 开发的高性能的轻量级 OLTP 应用; ShardingSphere-Proxy 提供静态入口以及异构语言的支持,独立于应用程序部署,适用于 OLAP 应用以及对分片数据库进行管理和运维的场景。
Apache ShardingSphere 是多接入端共同组成的生态圈。 通过混合使用 ShardingSphere-JDBC 和 ShardingSphere-Proxy,并采用同一注册中心统一配置分片策略,能够灵活的搭建适用于各种场景的应用系统,使得架构师更加自由地调整适合于当前业务的最佳系统架构。
2.5 ShardingSphere-Sidecar(TODO)
定位为Kubernetes 的云原生数据库代理,以Sidecar 的形式代理所有对数据库的访问。通过无中心、零侵入的方案提供与数据库交互的啮合层,即Database Mesh,又可称数据库网格。