1.ShardingSphere实战之读写分离
2.ShardingSphere-Proxy 前端协议问题排查方法及案例
3.分库分表利器之Sharding Sphere(深度好文,看过的人都说好)
4.ShardingSphere-Proxy数据库代理入门使用
5.分库分表:中间件最全方案对比
6.SpringBoot 2 种方式快速实现分库分表,轻松拿捏!
ShardingSphere实战之读写分离
简述
采用ShardingShpere的Sharding-Porxy(透明化的数据库代理端)模式在本地实现mysql数据库读写分离,并通过java应用程序连接
sharding-sphere本地下载并安装最新5.0的beta版本:/overview/
ShardingSphere-Proxy 前端协议问题排查方法及案例
ShardingSphere-Proxy 是 Apache ShardingSphere 的接入端之一,它作为透明化的数据库代理,能够被任何使用或兼容 MySQL / PostgreSQL / openGauss 协议的在线php源码加密客户端访问。相比 ShardingSphere-JDBC,ShardingSphere-Proxy 在异构语言的支持上更具优势,并为 DBA 提供了数据库集群的可操作入口。在数据库协议的开发过程中,ShardingSphere-Proxy 需要开发者不断去完善,以支持不同数据库协议。
本篇文章将介绍在数据库协议开发中常用的工具,并以一次 ShardingSphere-Proxy MySQL 协议问题的排查过程为例,展示工具的使用方法。
首先,Wireshark 是一个常用的网络协议分析工具,能够帮助开发者解析多种协议,包括 MySQL 和 PostgreSQL 协议。开发者可以通过 Wireshark 来分析网络流量,定位问题所在。如果连接 ShardingSphere-Proxy 的环境可以运行 Wireshark,可以直接使用 Wireshark 进行抓包。若无法使用 Wireshark,则可以使用 tcpdump 等工具进行抓包,然后通过 Wireshark 打开抓包文件进行分析。
在使用 Wireshark 或 tcpdump 进行抓包时,需要注意一些细节,比如客户端与服务端建立 TCP 连接后,MySQL 服务端会主动向客户端发送 Greeting,开发者可以通过 Wireshark 的解码功能来查看协议内容。同时,开发者可以增加过滤条件,只显示 MySQL 协议数据,以便更专注于分析 MySQL 相关的流量。
接下来,我们将通过一个具体的golang源码安装案例来介绍如何排查 ShardingSphere-Proxy MySQL 协议问题。在排查过程中,开发者发现使用 MySQL Connector/J 8.0. 作为客户端连接 ShardingSphere-Proxy 5.1.1 执行批量插入操作时遇到报错,更换为 MySQL Connector/J 5.1. 后问题解决。这表明问题可能与协议实现有关。
在详细排查过程中,开发者首先分析了源码中的逻辑,并结合 MySQL 协议文档,发现在批量插入数据时,客户端发送的数据长度超过了单个 MySQL Packet 的长度上限,导致 Proxy 无法正确处理。通过对代码的调试,开发者发现 Proxy 所使用的 readMediumLE() 方法导致了长度溢出的问题,通过更换为 readUnsignedMediumLE() 方法,成功修复了该问题。
在修复了长度溢出的问题后,开发者进一步排查发现,ShardingSphere-Proxy 没有对数据包进行聚合,导致多个数据包被 Proxy 分别解析。由于后续数据包 Sequence ID 大于 0,Proxy 内部的断言逻辑引发了报错。为了解决这一问题,开发者决定在数据解码逻辑中对数据包进行聚合,最终成功修复了问题。
本文通过实际案例展示了 ShardingSphere-Proxy 前端协议问题的排查方法,包括使用 Wireshark 分析网络协议、通过代码分析定位问题、重现问题并修复等步骤。通过这些方法,开发者可以更有效地解决 ShardingSphere-Proxy 在前端协议开发中遇到的问题。
分库分表利器之Sharding Sphere(深度好文,看过的人都说好)
ShardingSphere是一款强大的分库分表工具,最初由当当网内部开发,年开源后不断迭代,如今已发展为Apache顶级项目。它提供了多款开源分布式数据库中间件,包括Sharding-JDBC、视频轮播 源码Sharding-Proxy和Sharding-Sidecar,支持多种数据库和SQL协议,以插件形式扩展功能,开发者可灵活定制。
Sharding-JDBC作为常用组件,作为增强版JDBC驱动,负责在应用端处理分库分表路由和执行。它在数据分片、读写分离、数据加密等方面提供支持,允许用户在客户端无缝集成。Sharding-Proxy作为数据库代理,让用户在不感知分库分表的情况下访问数据库,已支持MySQL和PostgreSQL。
Sharding-Sidecar(开发中)则作为云原生数据库代理,代理数据库访问,尤其适合Kubernetes环境。Sharding-JDBC的核心功能如分片规则配置、分布式事务等,都是通过配置驱动来实现的,它扩展了JDBC的原有能力,如逻辑表、真实表等概念在其中扮演重要角色。
通过示例,Sharding-JDBC简化了分库分表的配置,而Spring Boot集成使其使用更加简便。Sharding-JDBC提供了多种内置的分片策略,包括自动分片、取模、哈希取模等,用户可以根据需求选择或自定义策略。
ShardingSphere-Proxy数据库代理入门使用
Sharding-Proxy,作为分布式数据库中间件,主要功能是作为透明化的数据库代理端。开发人员可以将其视为常规数据库使用,无需关心其具体的hitbox瞄准源码分片规则,这些规则在Sharding-Proxy中进行配置。目前支持MySQL和PostgreSQL版本,兼容包括openGauss在内的PostgreSQL衍生数据库。允许使用任何兼容MySQL/PostgreSQL协议的客户端(如MySQL Command Client、MySQL Workbench、Navicat等)进行操作,为DBA提供便利。
与Sharding-JDBC相比,Sharding-Proxy更侧重于透明化代理,而Sharding-JDBC则更专注于提供Java层面的分库分表功能。在应用中,SQL分片示例如下,将t_order表分为t_order_0和t_order_1两片。
在安装Sharding-Proxy时,需要确保环境具备Java JRE 8或更高版本,并从指定链接下载二进制发布包。安装过程简单,只需解压即可。
配置文件分为两部分:conf/server.yaml和conf/conf-*.yaml。前者用于设置服务相关参数,如proxy账户和权限;后者用于配置分片信息,与Sharding-JDBC配置规则一致。
启动Sharding-Proxy通过特定脚本实现。业务开发仅需连接proxy数据库,proxy会自动屏蔽底层分片逻辑。
DBA可通过运维测试确保proxy的稳定运行。应用测试阶段,业务开发仅需连接proxy数据库,无需直接操作底层分片。
总结,深入理解ShardingSphere-Proxy意味着了解其作为开发运维工具的角色,与ShardingSphere-JDBC的区别,以及两者实现方式和优缺点。阅读源码有助于更全面地掌握其工作机制。
分库分表:中间件最全方案对比
分库分表是互联网公司数据管理的重要策略,在数据规模到达一定阶段后,rippleos系统源码通过将数据分散存储在不同的数据库实例中,以提高系统的性能和扩展性。以MySQL为例,水平分片技术将单表拆分,减少B+树索引的深度,提升查询速度,同时通过分库实现负载均衡,减轻单个数据库的压力。分库分表技术主要分为应用层依赖类中间件和中间层代理类中间件两大类。
应用层依赖类中间件,如TDDL、sharding-jdbc、TSharding、CTrip-DAL等,其特点在于与应用层紧密耦合,需要在应用层中依赖特定的jar包。这些中间件通过重新实现JDBC API,如DataSource、PrepareStatement等,使应用层在基本不改变业务代码的情况下,实现分库分表的能力。其主要工作流程包括SQL解析、SQL重写、SQL路由等,最终通过传统方法执行SQL并合并结果集返回给应用层。这类中间件的优点是无需额外部署,只需要与应用绑定一起发布。然而,缺点是不能跨语言,限制了使用范围。
ShardingSphere是一个由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar组成的分布式数据库中间件解决方案。ShardingSphere提供标准化的数据分片、分布式事务和数据库治理功能,适用于各种语言、容器和云原生环境。Sharding-JDBC定位为轻量级Java框架,提供增强的JDBC功能,无需额外部署。Sharding-Proxy作为透明化的数据库代理端,提供MySQL协议的封装服务,支持异构语言的访问。Sharding-Sidecar(待开发)预计为Kubernetes或Mesos的云原生数据库代理,提供分布式数据访问应用与数据库的交互治理。
混合架构中,OLTP(联机事务处理)和OLAP(联机分析处理)是数据处理的主要分类。OLTP系统注重数据库内存效率,强调并发操作,而OLAP系统则聚焦数据分析,重视SQL执行性能。ShardingSphere通过混合使用Sharding-JDBC和Sharding-Proxy,并采用统一的注册中心配置分片策略,支持灵活构建适用于不同场景的应用系统。
中间层代理类中间件,如Amoeba、Cobar和Mycat等,通过在应用与数据库之间建立代理层,实现标准MySQL协议的转发,支持多种编程语言。Mycat是一个开源分布式数据库系统,提供了MySQL协议的服务器功能,实现分表分库,支持与多个MySQL服务器通信或使用JDBC协议与其他数据库通信。这类中间件在技术实现上与应用层依赖类中间件相似,但强调标准协议的兼容性,易于跨语言使用。
在分库分表技术选型时,需综合考虑产品功能、可扩展性、成熟度和实际应用情况。应用层依赖类中间件适用于与应用紧密耦合的场景,而中间层代理类中间件则提供了更广泛的跨语言支持。最终选择应基于具体的业务需求和技术栈考虑。在上述过程中,ShardingSphere因其全面的功能、跨语言支持和成熟度,成为了一个值得推荐的中间件解决方案。
SpringBoot 2 种方式快速实现分库分表,轻松拿捏!
大家好,我是小富~
(一)好好的系统,为什么要分库分表?
(二)分库分表的 条法则,hold 住!
本文是《分库分表ShardingSphere5.x原理与实战》系列的第三篇文章,本文将为您介绍ShardingSphere 的一些基础特性和架构组成,以及在 Springboot 环境下通过 JAVA编码 和 Yml配置 两种方式快速实现分库分表。
一、什么是 ShardingSphere?
shardingsphere 是一款开源的分布式关系型数据库中间件,为 Apache 的顶级项目。它由 sharding-jdbc 和 sharding-proxy 两个独立项目合并而成,支持多种数据库和ORM框架。
二、为什么选 ShardingSphere?
ShardingSphere 作为分布式数据库中间件,支持分库分表、读写分离、事务管理等功能,与市面上其他分库分表工具相比,它在整体性能、功能丰富度以及社区支持等方面表现突出。
三、ShardingSphere 成员
ShardingSphere 的核心组件为sharding-jdbc 和 sharding-proxy。sharding-jdbc 提供基于 JDBC 的分库分表功能,sharding-proxy 则是基于 MySQL 协议的代理服务,实现透明的分库分表功能。
四、快速实现
使用sharding-jdbc 实现分库分表。通过YML配置和纯Java编码两种方式,快速实现分库分表功能。sharding-jdbc 适用于简单场景,无需额外环境搭建。
准备工作包括数据库和表拆分规则的明确、JAR包引入以及YML配置文件的添加。YML配置方式可实现分库分表,配置包含多数据源信息、分片规则、数据库连接等。
JAVA 编码实现分库分表,通过ShardingSphere API配置分片规则和数据源。对比YML配置,JAVA编码方式更加灵活,适用于二次开发和扩展。
五、总结
本文介绍了ShardingSphere的基本特性和架构组成,通过YML配置和Java编码方式快速实现分库分表。下期文章将深入探讨分库分表的默认分片策略、广播表和绑定表等关键概念。
. ShardingSphere-Proxy 数据库代理
1. 简介
ShardingSphere-Proxy作为ShardingSphere分布式数据库中间件的组成部分,提供了数据库代理功能。它可以在不修改应用程序代码的前提下,实现分库分表、读写分离、逻辑表达式分片等功能。ShardingSphere-Proxy独立运行于应用程序和数据库之间,作为数据库的代理,自动将请求路由至相应的数据库节点。
官网地址: /s/ccaf6...
3. 配置MySQL驱动
下载mysql-connector-java-8.0..jar,并将其放入ext-lib或lib目录下。
mysql-connector-java-8.0..jar包下载地址:来自UC网盘分享 drive.uc.cn/s/f9b1c5d7c...
4. 配置server.yaml
conf目录下的server.yaml配置文件,主要配置代理数据库的用户名、密码、权限。
5. 配置config-sharding.yaml
conf目录下的config-sharding.yaml配置文件,主要配置具体的分库分表规则:
注意上面是url,而不是jdbcUrl,官方如此说明:
否则启动代理数据库会出现如下异常:
6. 配置config-readwrite-splitting.yaml
conf目录下的config-readwrite-splitting.yaml配置文件,主要配置数据库的读写分离。
往write_ds数据库写数据的时候会自动同步到read_ds_0、read_ds_1两个库中。读取数据的时候会随机从read_ds_0、read_ds_1选择一个数据源进行读取。
7. 执行sql脚本
创建sharding_0和sharding_1两个数据库。两个数据库完全一样,包含如下数据表:
8. 启动代理数据库
在bin目录下:
启动日志位置:logs/skywalking-oap-server.log
9. 连接代理数据库
代理数据库对于开发人员来说与普通数据库的操作无异,既可通过命令行,也可通过可视化工具来进行连接和操作。
通过命令连接代理数据库
通过可视化工具连接代理数据库
. 分库分表结果
1)company
在代理数据库company表上添加企业数据记录。
偶数id的企业在sharding_0数据库,奇数id企业在sharding_1数据库。
2)product
在代理数据库product表上添加商品数据记录。
company_id为偶数的商品在sharding_0数据库,company_id为奇数的商品sharding_1数据库。保证了一个企业的商品全部在一个库里面。
3)permission
在代理数据库permission表上添加权限数据记录。
被代理的两个数据库的数据都一样。
. 总结
ShardingSphere-Proxy在数据库和应用程序之间起到了桥梁的作用,对于应用程序来说,它不需要感知ShardingSphere-Proxy的存在,依然可以使用原来的方式操作数据库。也就是说,ShardingSphere-Proxy对于应用程序来说是透明的,不需要额外的代码实现或者调整。
Spring Cloud 微服务系列完整的代码在仓库的sourcecode/spring-cloud-demo目录下。
gitee(推荐): gitee.com/cunzaizhe/xia...
github: github.com/tigerleeli/x...
千锋JavaShardingSphere-Proxy数据库代理入门使用
在处理分库分表等策略后,数据分散到多个数据库实例中,给管理带来了一定挑战。ShardingSphere-Proxy作为一种解决方案,提供了方便的数据库代理管理服务。Sharding-Proxy简介
Sharding-Proxy是一个作为数据库代理的分布式中间件,它以透明的方式工作,允许开发者直接与其交互,而分片策略则在Proxy中进行配置。它支持MySQL和PostgreSQL,兼容OpenGauss等,且能被兼容其协议的客户端如MySQL Command Client、MySQL Workbench等无缝连接,对DBA的操作更加友好。与Sharding-JDBC的区别
Sharding-Proxy与Sharding-JDBC的主要区别在于,Proxy提供了一个代理层,开发人员可以直接连接到Proxy进行操作,而无需关心底层的分片逻辑,Sharding-JDBC则更侧重于数据访问层的配置和管理。应用实践
数据分片SQL:对于t_order表,通过Proxy进行分片,分为t_order_0和t_order_1两个表。 安装与配置:从Apache下载二进制包,需Java JRE 8及以上环境,解压并配置服务账户、权限以及分片信息(参照conf/server.yaml和conf/conf-*.yaml)。 启动与测试:通过启动脚本启动Proxy,然后进行DBA运维和应用测试,开发人员只需配置连接Proxy的数据库。总结
通过学习ShardingSphere-Proxy,可以更好地理解和管理分布式数据库。理解Proxy的定位——作为开发运维的辅助工具,以及它与Sharding-JDBC的异同,包括各自的优缺点和工作原理,是深入掌握这两种工具的关键。然后,结合源码阅读,将更便于运用它们。