Sharding-JDBC 3.x 原理篇之基本介绍

Sharding-JDBC 3.x 原理篇之基本介绍

  • 简介
  • 功能介绍
    • Sharding-JDBC
    • Sharding-Proxy
    • Sharding-Sidecar
    • 混合架构
  • 各大版本间的区别与变化
    • 1.x
      • 功能列表
    • 2.x
      • 功能清单
    • 3.x
      • 功能清单
  • 规划线路图
  • 相关文档及实例

简介

Sharding-JDBC是当当开源的数据库水平切分的中间件,其代表了客户端类的分库分表技术框架(这一点与MyCat不同,MyCat本质上是一种数据库代理)。Sharding-JDBC定位为轻量级数据库驱动,由客户端直连数据库,以jar包形式提供服务,未使用中间层,无需额外部署,无其他依赖,业务系统开发人员与数据库运维人员无需改变原有的开发与运维方式。因此Sharding-JDBC即为增强版的JDBC驱动,可以实现旧代码迁移零成本的目标。
  目前社区较为活跃。目前已广泛应用于现各大互联网公司。通过社区得知,Sharding-JDBC的作者已去京东做全职的Sharding-JDBC开发,相信未来Sharding-JDBC社区的发展将会更好。

功能介绍

目前Sharding-JDBC共有3个主要模块,分别为Sharding-JDBC、Sharding-Proxy、Sharding-Sidecar

Sharding-JDBC

定位为轻量级Java框架,在Java的JDBC层提供的额外服务。 它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。

  • 适用于任何基于Java的ORM框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template或直接使用JDBC。
  • 基于任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, Druid, HikariCP等。
  • 支持任意实现JDBC规范的数据库。目前支持MySQL,Oracle,SQLServer和PostgreSQL。
    Sharding-JDBC 3.x 原理篇之基本介绍_第1张图片

Sharding-Proxy

定位为透明化的数据库代理端,提供封装了数据库二进制协议的服务端版本,用于完成对异构语言的支持。 目前先提供MySQL版本,它可以使用任何兼容MySQL协议的访问客户端(如:MySQL Command Client, MySQL Workbench等)操作数据,对DBA更加友好。

  • 向应用程序完全透明,可直接当做MySQL使用。
  • 适用于任何兼容MySQL协议的客户端。
    Sharding-JDBC 3.x 原理篇之基本介绍_第2张图片

Sharding-Sidecar

定位为Kubernetes或Mesos的云原生数据库代理,以DaemonSet的形式代理所有对数据库的访问。 通过无中心、零侵入的方案提供与数据库交互的的啮合层,即Database Mesh,又可称数据网格。
  Database Mesh的关注重点在于如何将分布式的数据访问应用与数据库有机串联起来,它更加关注的是交互,是将杂乱无章的应用与数据库之间的交互有效的梳理。使用Database Mesh,访问数据库的应用和数据库终将形成一个巨大的网格体系,应用和数据库只需在网格体系中对号入座即可,它们都是被啮合层所治理的对象。
  Sharding-JDBC 3.x 原理篇之基本介绍_第3张图片

Sharding-JDBC Sharding-Proxy Sharding-Sidecar
数据库 任意 MySQL MySQL
连接消耗数
异构语言 仅Java 任意 任意
性能 损耗低 损耗略高 损耗低
无中心化
静态入口

混合架构

Sharding-JDBC采用无中心化架构,适用于Java开发的高性能的轻量级OLTP应用;Sharding-Proxy提供静态入口以及异构语言的支持,适用于OLAP应用以及对分片数据库进行管理和运维的场景。
  ShardingSphere是多接入端共同组成的生态圈。通过混合使用Sharding-JDBC和Sharding-Proxy,并采用同一注册中心统一配置分片策略,能够灵活的搭建适用于各种场景的应用系统,使得架构师更加自由的调整适合与当前业务的最佳系统架构。
  Sharding-JDBC 3.x 原理篇之基本介绍_第4张图片

各大版本间的区别与变化

1.x

Sharding-JDBC是一款基于JDBC的数据库中间件产品,对Java的应用程序无任何改造成本,只需配置分片规则即可无缝集成进遗留系统,使系统在数据访问层直接具有分片化和分布式治理的能力。
  Sharding-JDBC 1.x关注SQL兼容性、分库分表、读写分离、分布式主键、柔性事务等分片功能;Sharding-JDBC 2.x提供了全新的Orchestration模块,关注数据库和数据库访问层应用的治理。2.0.0在治理方面的主要更新是:

  • 配置动态化。可以通过zookeeper或etcd作为注册中心动态修改数据源以及分片规则。
  • 数据治理。提供熔断数据库访问程序对数据库的访问和禁用从库的访问的能力。
  • 跟踪系统支持。可以通过sky-walking等基于Opentracing协议的APM系统中查看Sharding-JDBC的调用链,并提- 供sky-walking的自动探针。
  • 提供Sharding-JDBC的spring-boot-starter。

功能列表

  1. 分库分表
  • SQL解析功能完善,支持聚合,分组,排序,LIMIT,TOP等查询,并且支持级联表以及笛卡尔积的表查询
    支持内、外连接查询。分片策略灵活,可支持=,BETWEEN,IN等多维度分片,也可支持多分片键共用,以及自定义分片策略。
  • 基于Hint的强制分库分表路由
  1. 读写分离
  • 一主多从的读写分离配置,可配合分库分表使用
  • 基于Hint的强制主库路由
  1. 柔性事务
  • 最大努力送达型
  • TCC型(TBD)
  1. 分布式主键
  • 统一的分布式基于时间序列的ID生成器
  • 协议适配&多样性配置
  • 全ORM支持
  • 全数据库连接池支持
  • 多数据库支持(目前支持MySQL,Oracle,SQLServer和PostgreSQL)
  • Spring命名空间支持
  • YAML命名空间支持
  • 基于动态语言的分片策略配置

2.x

通过2.x提供的数据治理能力,sharding-jdbc的架构图是:
Sharding-JDBC 3.x 原理篇之基本介绍_第5张图片
  2.x沿用了1.x的SQL解析、SQL路由、SQL改写、SQL执行以及结果归并的这一套分片化体系。与1.x的最大区别是增加了为数据治理使用的注册中心模块,目前支持最常用的zookeeper和etcd两种注册中心的实现。
  Sharding-JDBC对分布式配置、分布式治理以及调用链路追踪分析这几个分布式应用的几个核心关注点进行了实现,与服务治理框架类似,数据库访问层的治理可以提供更加细粒度的层级进行熔断等操作。
  配置动态化将Sharding-JDBC的配置信息放入注册中心。Sharding-JDBC的配置较为灵活,同时支持Java Config、YAML、Spring命名空间和Spring-boot-starter四种方式。配置动态化模块将不同的配置方式统一转换为JSON,并存储至注册中心,并通过监听配置节点的来探知配置信息的修改。配置信息修改会触发Sharding-JDBC数据源的重建,可以在不重启应用的前提下刷新数据源配置,以动态增减数据库和修改分片策略。
  数据治理部分,Sharding-JDBC目前主要提供熔断和禁用相关的能力,未来会做进一步的扩展。熔断是针对数据库访问的应用,可以通过设置注册中心相关节点达到熔断某一运行中的应用对数据库的访问,而不间断其其他行为。在实际应用场景中,对于某些对整体数据库带来操作压力的服务,可以采用该方式减轻数据库的压力,而相关服务会自动降级,所有对数据库的访问将返回空结果集,或通过订阅异常的方式自定义降级行为。禁用功能主要是针对于读写分离中的从库,Sharding-JDBC支持可支持分库分表+读写分离或独立使用读写分离的两种方式。读写分离目前采用一主多从的方式,可以通过对某个从库的禁用以做到从库的不停机动态切换。
  和服务化调用链类似,数据库访问同样需要采集、追踪和分析其调用链路。Sharding-JDBC完全遵守Opentracing协议,将数据库的分片SQL和数据源发送至支持Opentracing协议的APM产品。Sharding-JDBC还与sky walking深度合作,提供了sky walking的自动探针,可以让使用Sharding-JDBC的应用自动将调用链路追踪对接至任何标准系统。
  本次2.0版本的开发,受到了数人云的大力支持,他们不但贡献了Sharding-JDBC的核心代码,还提供了hawk的统一配置中心平台,也会于近期开源。通过对Sharding-JDBC注册中心的读写,提供了对配置的图形化界面支持。Hawk的架构图如下:

Sharding-JDBC 3.x 原理篇之基本介绍_第6张图片
著名的apm开源软件Sky-walking也将于近期采用Sharding-JDBC作为其底层存储追踪日志的存储引擎。整合了Sharding-JDBC作为存储引擎的Sky-walking架构图如下:
Sharding-JDBC 3.x 原理篇之基本介绍_第7张图片
Sharding-JDBC将与配置中心hawk,APM的sky-walking一起打造分布式服务的生态圈。

功能清单

在1.x版本的基础上又增加了下列功能

  1. 分库分表
  • 自定义的灵活分片策略,支持多分片键共用,支持inline表达式
  1. 读写分离
  • 支持同一线程内的数据一致性
  • 支持分库分表与读写分离共同使用
  • 支持基于Hint的强制主库路由
  • 分布式治理(2.x新增功能)
  • 支持配置中心,可动态修改配置
  • 支持客户端熔断和失效转移
  • 支持Open Tracing协议

3.x

Sharding-Sphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar这3款相互独立的产品组成。他们均提供标准化的数据分片、读写分离、柔性事务和数据治理功能,可适用于如Java同构、异构语言、容器、云原生等各种多样化的应用场景。
  Sharding-Sphere定位为关系型数据库中间件,旨在充分合理地在分布式的场景下利用关系型数据库的计算和存储能力,而并非实现一个全新的关系型数据库。它与NoSQL和NewSQL是并存而非互斥的关系。NoSQL和NewSQL作为新技术探索的前沿,是非常值得推荐的。而Sharding-Sphere关注未来不变的东西,进而抓住事物本质。关系型数据库当今依然占有巨大市场,是各个公司核心业务的基石,我们目前阶段更加关注在原有基础上的增量,而非颠覆。其架构如下图所示:

Sharding-JDBC 3.x 原理篇之基本介绍_第8张图片

功能清单

3.x已更新名字为Sharding-Sphere,包名也随之转换。

  1. 数据分片
  • 分库 & 分表
  • 读写分离
  • 分布式主键
  1. 分布式事务(Doing)
  • XA强一致事务
  • 柔性事务
  1. 数据库治理
  • 配置动态化
  • 熔断 & 禁用
  • 调用链路追踪
  • 弹性伸缩 (Planing)

规划线路图

Sharding-JDBC 3.x 原理篇之基本介绍_第9张图片

相关文档及实例

1.x文档:http://shardingsphere.io/document/legacy/1.x/cn/01-start/
2.x文档:http://shardingsphere.io/document/legacy/2.x/cn/01-start/
3.x文档:http://shardingsphere.io/document/current/en/overview/

你可能感兴趣的:(BAT面试题)