分享一个开源的分布式数据库中间件—sharding-sphere

概述

当我们的业务发展到一定程度,分库分表是一种必然的要求,分库可以实现资源隔离,分表则可以降低单表数据量,提高访问效率。

分库分表的技术方案,一般有两种理念:

  • 集中式的Proxy,实现MySQL客户端协议,使用户无感知
  • 分布式的Proxy,在代码层面进行增强,实现一个路由程序

这两种方式是各有利弊的,集中式Proxy的好处是业务没有感知,一切交给DBA把控,分布式的Proxy其支持的语言有限,例如ShardingShpere-JDBC就只支持Java。

目前我们在通过MySQL的中间件(不改应用)实现读写分离,都可以看到有一大堆产品:Atlas, dbproxy, Ceus, Amoeba, Cobar,MyCat, ProxySQL...这些中间件哪个比较好用呢,这里盖总推荐了Sharding-Shpere ,京东维护的,所以今天我就主要介绍一下Sharding-Shper了。


一、简介

Apache ShardingSphere 是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(规划中)这3款相互独立,却又能够混合部署配合使用的产品组成。它们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如Java同构、异构语言、云原生等各种多样化的应用场景。

ShardingSphere定位为关系型数据库中间件,旨在充分合理地在分布式的场景下利用关系型数据库的计算和存储能力,而并非实现一个全新的关系型数据库。它通过关注不变,进而抓住事物本质。关系型数据库当今依然占有巨大市场,是各个公司核心业务的基石,未来也难于撼动,这个中间件更关注在原有基础上的增量,而非颠覆。

官网:https://shardingsphere.apache.org/index_zh.html

文档:https://shardingsphere.apache.org/document/

Github:https://github.com/sharding-sphere

分享一个开源的分布式数据库中间件—sharding-sphere

分享一个开源的分布式数据库中间件—sharding-sphere

分享一个开源的分布式数据库中间件—sharding-sphere


二、三大核心模块

三大核心模块分别是Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar。

1、Sharding-JDBC

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

  • 适用于任何基于JDBC的ORM框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template或直接使用JDBC。
  • 支持任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, Druid, HikariCP等。
  • 支持任意实现JDBC规范的数据库。目前支持MySQL,Oracle,SQLServer,PostgreSQL以及任何遵循SQL92标准的数据库。

Sharding-JDBC可以通过Java,YAML,Spring命名空间和Spring Boot Starter四种方式配置。

分享一个开源的分布式数据库中间件—sharding-sphere


2、Sharding-Proxy

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

  • 向应用程序完全透明,可直接当做MySQL/PostgreSQL使用。
  • 适用于任何兼容MySQL/PostgreSQL协议的的客户端。
分享一个开源的分布式数据库中间件—sharding-sphere

3、Sharding-Sidecar

Sharding-Sidecar是ShardingSphere的第三个产品,目前仍然在规划中。 定位为Kubernetes或Mesos的云原生数据库代理,以DaemonSet的形式代理所有对数据库的访问。

通过无中心、零侵入的方案提供与数据库交互的的啮合层,即Database Mesh,又可称数据网格。 Database Mesh的关注重点在于如何将分布式的数据访问应用与数据库有机串联起来,它更加关注的是交互,是将杂乱无章的应用与数据库之间的交互有效的梳理。使用Database Mesh,访问数据库的应用和数据库终将形成一个巨大的网格体系,应用和数据库只需在网格体系中对号入座即可,它们都是被啮合层所治理的对象。

分享一个开源的分布式数据库中间件—sharding-sphere



三、sharding-sphere不同产品对比

ShardingSphere的3个产品的数据分片主要流程是完全一致的。 核心由SQL解析 => 执行器优化 => SQL路由 => SQL改写 => SQL执行 => 结果归并的流程组成

分享一个开源的分布式数据库中间件—sharding-sphere

那他们之间有什么区别呢?

Sharding-JDBC的优势在于对Java应用的友好度。

Sharding-Proxy的优势在于对异构语言的支持,以及为DBA提供可操作入口。

Sharding-Sidecar的优势在于对Kubernetes和Mesos的云原生支持。

分享一个开源的分布式数据库中间件—sharding-sphere


觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~

分享一个开源的分布式数据库中间件—sharding-sphere


分享到:


相關文章: