张亮:Sharding-Sphere成长记

简介:

在历经八个月的紧张开发与精心打磨之后,Sharding-Sphere社区为程序员献礼,将Sharding-Sphere 3.0.0正式版于10月24日程序员节发布。在3.0.0发布之际,写下此文,与大家共同回顾这段充满纪念的时光,分享我们的前进历程。

前序

关注开源圈的同学可能知道,Sharding-Sphere的前身是Sharding-JDBC。

起源

Sharding-JDBC是一套扩展于Java JDBC层的分库分表中间件,最初起源于当当的内部应用框架ddframe中的数据库访问层组件。由于分库分表需求的相对普遍,并且具备独特的生命力与关注度,因此将其抽离成为独立的项目,命名为Sharding-JDBC,并于2016年初开源。

Sharding-JDBC的最初目标是透明化分库分表所带来的复杂度,包括数据源的管理、根据业务进行的SQL改写等。作为使用Java语言开发的ddframe框架中的一部分,Sharding-JDBC顺其自然的选择了JDBC作为其分库分表扩展点的接入端。正如其名称Sharding-JDBC所昭示,它是在JDBC层进行Sharding(分库分表)的产品。

核心功能完善

Sharding-JDBC在其后的一年中有条不紊的发布了1.x的6个大版本更新,分别是:

 ●  奠定了SQL解析、请求路由、SQL改写、SQL执行和结果归并的分库分表的核心模型的1.0.x
 ●  原生支持Spring和行表达式的1.1.x
 ●  最大努力送达型柔性事务的1.2.x
 ●  读写分离的1.3.x
 ●  分布式主键的1.4.x

 ●  全新SQL解析引擎的1.5.x

分布式治理

在分库分表功能逐渐成熟之后,在2017年,Sharding-JDBC进入了2.x时代。2.x主要实现的功能是数据库治理,它可以通过注册中心提供对配置的集中化和动态化,以及对数据库和应用进行禁用和熔断。在此基础上,还增加了面向OpenTracing协议的链路追踪能力,并且达成了与国内优秀的APM产品Apache SkyWalking(https://github.com/apache/incubator-skywalking)的合作协议,将Sharding-JDBC的追踪数据对接入SkyWalking,并让SkyWalking将采用Sharding-JDBC作为其存储引擎成为可选项。

至此,分库分表、分布式事务和数据库治理都有了简单的雏形。

发展

随着云原生的普及,应用上云和对异构语言的无差别支持渐渐成为当今主流。仅支持Java的Sharding-JDBC已经无法满足云原生的全部需要,在业界一直争论不休的在客户端(JDBC或其他语言客户端)还是服务端(Proxy)进行分片的优劣,也未有定论。

改名、之后再踏征途

2018年春节前夕,随着核心开发人员的加盟,京东数科(当时还叫京东金融)加入了Sharding-JDBC的开发工作中,并将其定位为面向云化的数据库中间件。在客户端进行分库分表的Sharding-JDBC,虽然可以作为轻量级微服务框架灵活应用,但却没有作为云接入端进行统一管控的能力。因此,一个Proxy接入端呼之欲出。

Sharding-JDBC这个名字在过去的两年中获得了大量的积累,已经具备一定的辨识度,开发团队并不希望完全放弃掉这个名字。因此,最初将新的代理端产品命名为Sharding-JDBC-Server,而将原有的Sharding-JDBC改名为Sharding-JDBC-Driver。

经过了反复的权衡,我们发起了社区投票。最终决定保留Sharding这个关键词,将项目的名称正式改为Sharding-Sphere,意为分片生态圈。无论是分布式事务还是多数据库的治理,其本源都是分片;若采用单一的无分片数据库,后续功能都将无需存在。分片生态圈由根据不同的接入端,由3个子项目组成,它们是基于JDBC客户端接入的Sharding-JDBC(即原有项目)、基于代理端接入的Sharding-Proxy(今年的重点更新)、以及基于Sidecar模式接入的Sharding-Sidecar(明年的产品规划)。

3.0.0于此刻正式起航,主要目标是将Sharding-JDBC的能力完全移植入Sharding-Proxy,使其具备支持异构语言的能力。虽然分片的核心逻辑并未变化,但相比于Sharding-JDBC,Sharding-Proxy有两个难点是需要攻破的。

第一个难点是数据库协议的实现。将代理端伪装成为一个数据库,能够将接入的成本降至最低。Sharding-Proxy选择最常用的MySQL协议做为首先支持的数据库协议,并完整的实现了所有的应用程序运行时所需的协议包(如:COM_QUERY、COM_STMT_PREPARE、COM_STMT_EXECUTE)。目前对于管理端使用的一些协议包还未全部实现。

第二个难点是通信框架。JDBC层的通信是由各个数据库驱动提供商通过BIO的方式实现的,虽然吞吐量欠佳,但却容易实现。代理端为了更高的吞吐量,需要采用NIO的方式。Sharding-Proxy采用Netty作为通信框架,在接入层前端实现了完全无锁的异步通信。目前接入端连接后端数据库时,仍然采用JDBC的方式,未来会将其完全改为Netty异步通信的方式,进一步提升吞吐量,达成前后端完全无锁通信的目标。以下是Sharding-Proxy的架构图:

165551ba27454dc27c009463b7126e29afdab1bb

在2018年5月,基本可用的Sharding-Proxy随着Sharding-Sphere 3.0.0.M1发布。

同时,由于多家公司共同参与开发,Sharding-Sphere决定成立社区,将著作权完全归属至Sharding-Sphere社区,并成立了项目管理委员会(PMC),并且也完善了贡献者和提交者的晋升制度。

随着新的里程碑版本,Sharding-Sphere申请了全新的域名,并重新制作官网,重装发布。

扩大范围、加强合作

Sharding-Sphere的更名,不仅仅是接入端的增强。作为分片生态圈,更完善的分布式事务和数据库治理,也纳入了项目范围。

Sharding-Sphere将原有的分库分表功能更名为数据分片,内容包扩核心流程、读写分离和分布式主键。Sharding-Sphere的核心流程模块的几个重点部分可以通过一张图帮助用户理解,下面分别是路由引擎、改写引擎、执行引擎和归并引擎的剖析图:

c5b7c5e3080f344ed6192f1cea7e48281980871d

Sharding-Sphere对分布式事务进行了重新的设计和定位。废弃掉原有的最大努力送达型柔性事务,取而代之的是采取刚柔并济的实现方案:同时支持XA的强一致事务,以及基于Saga的最终一致性事务,基于消息的最终一致性事务也在规划中。

分布式事务模块将定位从自研转向整合,即整合现有的成熟事务方案,为本地事务、XA事务和柔性事务提供统一的分布式事务接口,并尽量弥补各个方案对数据库层面的缺失。分布式事务模块提供一套SPI事务处理接口,能够无缝对接分布式事务的各个实现方案。分布式事务模块的架构图如下:

8097a92bd7a50d4b4f6f114fa9819df345094bf0

Sharding-Sphere经过比较分析,选择采用Apache ServiceComb的分布式事务解决方案来实现柔性事务, 通过在ServiceComb Saga执行引擎基础上扩展sql执行模块,实现了基于分布式Saga的事务执行和回滚功能。

分布式事务模块将于3.1.0的版本发布,目前仍处于紧张的开发阶段。

在数据库治理方面,Sharding-Sphere全数保留了之前的功能,并提供了全新的APM链路追踪数据,可以通过SkyWalking更直观的观测Sharding-Sphere。但目前仍未包括数据库弹性扩缩功能,该部分功能将于明年规划。

在高速发展的同时,Sharding-Sphere迎来了新的合作伙伴——翼支付。翼支付成立了创新中心部门,并投入开发资源加入到了Sharding-Sphere的开发团队。这使得Sharding-Sphere的开源社区更加多元化和健康成长。Sharding-Sphere属于社区而非公司,因此欢迎有兴趣参与开发的公司一起打造更加多元化的社区和更加完善的项目。

上线、然后发布

在Sharding-Sphere的旗下产品Sharding-Proxy逐渐成熟的同时,京东数科当仁不让的成为了第一个吃螃蟹的人。京东数科将部分核心业务系统通过小流量 -> 大流量 –> 全流量的流程切换到Sharding-Proxy,目前Sharding-Proxy在生产环境中已经管理并运行着万级别数据节点。

在经受考验之后,随之而来的Sharding-Sphere 3.0.0.M2、3.0.0.M3和3.0.0.M4相继发布。在经历了大量的性能调优和功能完善之后,终于在10月24日的程序员节发布3.0.0稳定版。在经历了京东数科严酷的生产环境验证后,相信Sharding-Sphere可以成为架构师们进行技术选型时的其中一个参考。

面向未来

Sharding-Sphere 3.0.0的发布并非终点,而是新的起点。3.1.0已经在同步开发,也将于不久的将来面世,提供更加优化的分布式事务解决方案。计划于明年开启的4.0.0对Sidecar模式的接入端以及自动化的弹性伸缩功能也完成了初步规划。Sharding-Sphere的线路规划如下图:

99a3672b207c1a8183a780e71277336790b00d99

大事记

回顾心路历程,Sharding-Sphere立足于当下,着眼于未来:

2018.2

 ●   Sharding-Sphere团队升级组建,并开始着手Sharding-Proxy开发。

2018.5

 ●   Sharding-JDBC正式更名为Sharding-Sphere, 同时上线新官网。这预示着它新时代的到来。
 ●   Sharding-Sphere著作版权完全归属社区shardingsphere.io,并继续使用Apache 2.0协议。
 ●   Sharding-Sphere 3.0.0.M1发布,Sharding-Proxy正式上线。
2018.6
 ●   Sharding-Sphere与Apache ServiceComb建立合作伙伴关系,并开始分布式事务的全面规划。
 ●   Sharding-Sphere与中国电信旗下翼支付建立合作伙伴关系,共同打造Sharding-Sphere新未来。
2018.8
 ●   Sharding-Proxy上线京东数科生产环境,并经受住了线上大规模生产数据的考验。
Sharding-Sphere 3.0.0.M2发布,数据库治理模块升级改造,提供更稳定功能。
2018.9
 ●   Sharding-Sphere 3.0.0.M3发布,提供对XA分布式事务的支持。
 ●   Sharding-Sphere 3.0.0.M4发布, 改造自动化执行引擎,支持多逻辑数据库切换,增强链路追踪。

2018.10

 ●  Sharding-Sphere 3.0.0正式版发布。

如何获取

Sharding-JDBC

<groupId>io.shardingsphere</groupId><artifactId>sharding-jdbc-core</artifactId><version>3.0.0</version>

Sharding-Proxy

docker pull shardingsphere/sharding-proxy
源码

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

https://gitee.com/sharding-sphere/sharding-sphere

官网

http://shardingsphere.io


原文发布时间为:2018-10-26

本文作者:张亮

本文来自云栖社区合作伙伴“中生代技术 ”,了解相关信息可以关注“中生代技术”。

相关文章
|
数据采集 监控 物联网
一些常用的 Salesforce IoT Cloud 中间件工具
以下是一些常用的Salesforce IoT Cloud中间件工具
|
搜索推荐
小模型将成为私有化落地的主流选择
小模型将成为私有化落地的主流选择
701 2
小模型将成为私有化落地的主流选择
|
关系型数据库 MySQL Java
MySQL的主从复制 && SpringBoot整合Sharding-JDBC解决读写分离
MySQL的主从复制 && SpringBoot整合Sharding-JDBC解决读写分离
703 0
|
2月前
|
自然语言处理 安全 机器人
OpenClaw(Clawdbot)一键部署+直连苹果生态Skills教程,无需Mac Mini也能玩转iPhone/iCloud
OpenClaw的爆火让Mac Mini成了数码圈抢手货,二手市场溢价严重,而苹果生态的「围墙花园」似乎也让非Mac用户望而却步——想让OpenClaw对接iPhone、iCloud,难道必须为硬件买单?答案是否定的。只需在阿里云轻量应用服务器完成OpenClaw零基础一键部署,再安装专属苹果生态Skills,就能通过飞书控制台直接接管iPhone、操作iCloud,实现相册同步、日程管理、云盘操作、设备查找等全功能,用低成本云服务器打破苹果的硬件壁垒,真正做到「无Mac也能玩转OpenClaw+苹果生态」。
2999 9
|
10月前
|
人工智能 文字识别 自然语言处理
熊猫 OCR 识别软件下载,支持截图 OCR、PDF 识别、多语言翻译的免费全能工具,熊猫OCR识别
本文介绍了几款实用的图文识别软件,包括熊猫OCR、Umi-OCR和天若OCR_本地版。熊猫OCR功能强大,支持多窗口操作、AI找图找色、OCR识别等;Umi-OCR免费且高效,具备截图OCR、批量处理等功能;天若OCR界面简洁,适合快速文字识别。文章还提供了下载链接及软件特点、界面展示等内容,便于用户根据需求选择合适的工具。
1107 36
|
网络协议 应用服务中间件 网络安全
IP申请SSL证书的条件和方法
为IP地址申请SSL证书与域名证书流程不同,主要因SSL基于域名验证。部分CA允许为公有或私有IP地址申请证书,需满足拥有IP所有权、支持单IP或自签名证书、IP可公开访问及符合CA政策等条件。申请步骤包括访问CA官网、选择证书类型、提交申请、验证所有权并安装证书。替代方案是使用自签名证书,适合内部网络或开发环境。
1402 11
|
算法 安全 网络协议
政务网站使用的国密SSL证书申请
国密SSL证书采用我国自主研发的SM2公钥算法体系及国密SSL安全协议,符合国家政策与法规要求,提供身份验证、数据加密和完整性保护,广泛应用于政府机构的信息系统,确保政务数据安全。以下是申请步骤简介。
政务网站使用的国密SSL证书申请
|
Ubuntu Python
ubuntu升级Python版本
现在,你已成功升级了Python版本并可以使用新版本进行开发和运行程序。
1646 1
|
容灾 关系型数据库 分布式数据库
|
物联网 5G 智能硬件
【专栏】无线通信的基础术语,如频段、带宽、调制与解调,以及Wi-Fi、蓝牙、ZigBee等无线技术
【4月更文挑战第28天】本文介绍了无线通信的基础术语,如频段、带宽、调制与解调,以及Wi-Fi、蓝牙、ZigBee等无线技术。还涉及无线信号传播、信道容量、信噪比等概念。理解这些术语有助于深入理解无线通信原理,便于设计和优化无线系统。随着无线技术的不断发展,持续学习是关键。开始你的无线通信探索之旅吧!
1035 0