ShardingSphere

ShardingSphere 是一个开源的分布式数据库中间件生态系统,由 Apache 基金会孵化和维护。它的主要目标是帮助开发者解决分库分表、分布式事务和数据加密等分布式数据库应用中的常见问题。ShardingSphere 提供了多种组件,如 Sharding-JDBC、Sharding-Proxy 和 Sharding-Sidecar,以满足不同的应用场景。以下是对 ShardingSphere 及其主要组件的详细介绍:

ShardingSphere 的核心功能

  1. 数据分片(Sharding)

    • 支持水平分表和分库,即将一个表的数据按照一定的规则分布到多个表或多个数据库中。
    • 支持多种分片策略,包括范围分片、哈希分片、复合分片等。
    • 动态分片配置,支持在运行时调整分片策略。
  2. 分布式事务

    • 支持基于 XA 协议的强一致性事务和基于 TCC(Try-Confirm-Cancel)模型的柔性事务。
    • 提供分布式事务的解决方案,保证数据的一致性和可靠性。
  3. 数据加密

    • 支持对敏感数据进行加密和解密,保障数据在存储和传输过程中的安全。
    • 提供透明的数据加密机制,开发者无需对业务代码进行额外修改。
  4. 读写分离

    • 支持主从复制架构,自动将读请求路由到从库,提高系统的读性能。
    • 提供强一致性、弱一致性等多种读写分离策略。
  5. 影子库压测

    • 支持影子库压测功能,可以在不影响生产环境的情况下进行性能测试。

ShardingSphere 的主要组件

  1. Sharding-JDBC

    • 以 Jar 包的形式嵌入到应用程序中,为 Java 应用提供透明化的数据分片、读写分离和分布式事务支持。
    • 兼容多种 ORM 框架,如 MyBatis、Hibernate 等,几乎不需要修改现有代码。
  2. Sharding-Proxy

    • 作为独立的数据库代理层,提供与 MySQL、PostgreSQL 等数据库协议兼容的接口。
    • 适用于非 Java 应用,如 PHP、Python、Node.js 等语言的应用程序,可以通过配置数据库连接来实现数据分片和读写分离。
  3. Sharding-Sidecar(计划中)

    • 基于 Service Mesh 的架构,提供轻量级的 Sidecar 模式,适用于 Kubernetes 等容器化环境。
    • 提供细粒度的服务治理功能,实现数据访问的动态管理和监控。

读写分离

ShardingSphere 实现读写分离的原理和配置较为简单,通过配置主从数据源,ShardingSphere 会自动将写操作路由到主库,将读操作路由到从库,从而实现读写分离。下面详细讲解 ShardingSphere 如何实现读写分离。

1. 读写分离原理

读写分离的基本思想是将写操作(INSERT、UPDATE、DELETE)定向到主数据库,将读操作(SELECT)定向到从数据库。ShardingSphere 通过在配置文件中定义主从数据源,并通过内部路由策略实现自动的读写分离。

2. 配置主从数据源

以下是一个基本的配置示例,展示了如何配置主从数据源,实现读写分离。

数据源配置

在配置文件中定义主从数据源:

schemaName: my_databasedataSources:master_ds:type: com.zaxxer.hikari.HikariDataSourcedriverClassName: com.mysql.cj.jdbc.DriverjdbcUrl: jdbc:mysql://localhost:3306/master_dbusername: rootpassword: rootslave_ds_0:type: com.zaxxer.hikari.HikariDataSourcedriverClassName: com.mysql.cj.jdbc.DriverjdbcUrl: jdbc:mysql://localhost:3306/slave_db_0username: rootpassword: rootslave_ds_1:type: com.zaxxer.hikari.HikariDataSourcedriverClassName: com.mysql.cj.jdbc.DriverjdbcUrl: jdbc:mysql://localhost:3306/slave_db_1username: rootpassword: root
读写分离规则配置

配置读写分离规则,指定主从数据源和负载均衡策略:

rules:- !READWRITE_SPLITTINGdataSources:pr_ds:writeDataSourceName: master_dsreadDataSourceNames:- slave_ds_0- slave_ds_1loadBalancerName: round_robinloadBalancers:round_robin:type: ROUND_ROBIN
配置解析
  1. dataSources:定义主从数据源,其中 master_ds 是主数据源,slave_ds_0slave_ds_1 是从数据源。
  2. readwrite-splitting:配置读写分离规则,writeDataSourceName 指定主数据源,readDataSourceNames 指定从数据源列表。
  3. loadBalancerName:指定负载均衡策略,ShardingSphere 提供了多种负载均衡策略,如轮询(ROUND_ROBIN)、随机(RANDOM)等。

3. 配置示例(Spring Boot)

在 Spring Boot 项目中,可以通过 Java 配置类来实现读写分离:

Maven 依赖

添加 ShardingSphere 的 Maven 依赖:

<dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId><version>5.0.0</version>
</dependency>
Application.yaml 配置
spring:shardingsphere:datasource:names: master_ds, slave_ds_0, slave_ds_1master_ds:type: com.zaxxer.hikari.HikariDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverjdbc-url: jdbc:mysql://localhost:3306/master_dbusername: rootpassword: rootslave_ds_0:type: com.zaxxer.hikari.HikariDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverjdbc-url: jdbc:mysql://localhost:3306/slave_db_0username: rootpassword: rootslave_ds_1:type: com.zaxxer.hikari.HikariDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverjdbc-url: jdbc:mysql://localhost:3306/slave_db_1username: rootpassword: rootrules:readwrite-splitting:data-sources:pr_ds:write-data-source-name: master_dsread-data-source-names: slave_ds_0, slave_ds_1load-balancer-name: round_robinload-balancers:round_robin:type: ROUND_ROBIN

总结

ShardingSphere 通过提供数据分片、分布式事务、数据加密和读写分离等功能,帮助开发者轻松构建高性能、高可用的分布式数据库系统。其灵活的架构设计和丰富的功能模块,使其成为现代分布式数据库中间件的优秀选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/40417.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Using a text embedding model locally with semantic kernel

题意&#xff1a;在本地使用带有语义核&#xff08;Semantic Kernel&#xff09;的文本嵌入模型 问题背景&#xff1a; Ive been reading Stephen Toubs blog post about building a simple console-based .NET chat application from the ground up with semantic-kernel. Im…

idea中maven全局配置

配置了就不需要每次创建项目都来设置maven仓库了。 1.先把项目全关了 2. 进入全局设置 3.设置maven的仓库就可以了

SpringBoot实现多数据源切换

1. 概述 随着项目规模的扩大和业务需求的复杂化&#xff0c;单一数据源已经不能满足实际开发中的需求。在许多情况下&#xff0c;我们需要同时操作多个数据库&#xff0c;或者需要将不同类型的数据存储在不同的数据库中。这时&#xff0c;多数据源场景成为必不可少的解决方案。…

【CentOS7.6】docker部署EMQX教程,本地镜像直接导入(附下载链接),没法在云服务器上魔法拉取镜像的快来

总览 先把下载链接放在这里吧&#xff0c;这是 EMQX 的 tar 包&#xff0c;能够直接导入 CentOS 的 docker&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1rSGSLoVvj83ai6d5oolg8Q?pwd0108 提取码&#xff1a;0108 一、安装配置教程 1.将 EMQX-latest.tar 包导入…

服务器重装系统时数据丢失?有哪些方法可以避免

为了避免在服务器重装系统时数据丢失&#xff0c;可以采取以下预防措施&#xff1a; 1. 数据备份&#xff1a;在重装系统之前&#xff0c;备份所有重要的数据和配置文件。备份可以通过以下方式进行&#xff1a; - 使用外部存储设备(如USB硬盘、NAS等)进行备份。 - 利用备份软件…

学习成绩总是上不去?中学生把握好这5个环节,助你提高成绩

在中学时代&#xff0c;考试我们并不陌生。每隔一段时间&#xff0c;学校就会安排我们参加考试。学生时代&#xff0c;我们参加的考试有很多。对于中学生来说&#xff0c;考试成绩是我们一直关心的事情。很多学生非常努力的学习&#xff0c;成绩却上不去。这是非常可惜的&#…

[图解]企业应用架构模式2024新译本讲解19-数据映射器1

1 00:00:01,720 --> 00:00:03,950 下一个我们要讲的就是 2 00:00:04,660 --> 00:00:07,420 数据映射器这个模式 3 00:00:09,760 --> 00:00:13,420 这个也是在数据源模式里面 4 00:00:13,430 --> 00:00:14,820 用得最广泛的 5 00:00:16,250 --> 00:00:19,170…

【软件工程中的喷泉模型及其优缺点】

文章目录 一、喷泉模型是什么&#xff1f;二、喷泉模型的优点1. 灵活性和适应性2. 迭代开发3. 风险控制 三、喷泉模型的缺点1. 需求不明确性2. 可能造成资源浪费3. 需要良好的沟通与协作 一、喷泉模型是什么&#xff1f; 喷泉模型是一种迭代增量开发模型&#xff0c;其核心理念…

链篦机回转窑球团生产工艺

生球在回转窑氧化焙烧&#xff0c;回转窑头部设有燃烧器&#xff0c;燃料可以采用气体、固体、液体。 来自环冷机一冷却段的高温废气作为二次风进入窑内参与燃烧&#xff0c;烧成成品球进入环冷机。 环冷机采用鼓风冷却&#xff0c;热风风箱分为四段&#xff1a; 一段气体引至…

无人机有哪些关键技术?

一、控制技术 无人机的核心还是在控制上&#xff0c;飞控系统的可靠性、稳定性及可扩展性是其中重要的指标。可靠性上&#xff0c;除了器件选型之外&#xff0c;目前主要靠多余度来增加&#xff1b;稳定性主要体现在多场景下仍能保持良好的工作状态&#xff0c;主要靠算法来进…

QML-各类布局

Colunm布局 Column{id:colspacing: 30Repeater{id:repmodel: ListModel{}Button{width: 100height: 50text: "btn"index}}//开始时候移动move: Transition {NumberAnimation { properties: "x,y"; easing.type: Easing.OutBounce }}//添加时变化add:Transi…

【Nginx】docker运行Nginx及配置

Nginx镜像的获取 直接从Docker Hub拉取Nginx镜像通过Dockerfile构建Nginx镜像后拉取 二者区别 主要区别在于定制化程度和构建过程的控制&#xff1a; 直接拉取Nginx镜像&#xff1a; 简便性&#xff1a;直接使用docker pull nginx命令可以快速拉取官方的Nginx镜像。这个过程…

通透!手把教你如何从头构建一个机器学习模型

目录 1.业务理解 2.数据收集和准备 数据采集 探索性数据分析 (EDA) 和数据清理 特征选择 3.建立机器学习模型 选择正确的模型 分割数据 训练模型 模型评估 4.模型优化 5.部署模型 今天我将带领大家一步步的来构建一个机器学习模型。 我们将按照以下步骤开发客户流失…

赛博解压板

目录 开头程序程序的流程图程序的解压效果(暂无&#xff0c;但可以运行一下上面的代码)结尾 开头 大家好&#xff0c;我叫这是我58。今天&#xff0c;我们要看关于赛博解压板的一些东西。 程序 #define _CRT_SECURE_NO_WARNINGS 1 #define ROW 6//ROW表示行数&#xff0c;可…

【ARM 常见汇编指令学习 7.1 -- LDRH 半字读取指令】

请阅读【嵌入式开发学习必备专栏】 文章目录 LDRH 使用介绍LDRH&#xff08;Load Register Half-word&#xff09;总结 LDRH 使用介绍 在ARMv9架构中&#xff0c;汇编指令LDRH用于从内存中载入数据到寄存器的指令&#xff0c;下面将分别对它进行详细介绍&#xff1a; LDRH&am…

【基础算法】UE中实现轮播

本期作者&#xff1a;尼克 易知微3D引擎技术负责人 当前N 总数M 从0到M-1 从1到M 感谢阅读&#xff0c;以上内容均由易知微3D引擎团队原创设计&#xff0c;以及易知微版权所有&#xff0c;转载请注明出处&#xff0c;违者必究&#xff0c;谢谢您的合作。申请转载授权后台回复【…

【WebKit屏幕方向API全解析】掌握现代Web应用的方向感应

标题&#xff1a;【WebKit屏幕方向API全解析】掌握现代Web应用的方向感应 WebKit作为许多现代浏览器的内核&#xff0c;提供了对HTML5和CSS3的广泛支持&#xff0c;包括对屏幕方向的控制。屏幕方向API&#xff08;Screen Orientation API&#xff09;允许Web应用知道屏幕的方向…

左耳听风_114_113_Go编程模式修饰器

你好&#xff0c;我是陈浩&#xff0c;我名多尔多house.之前呢我写过一篇文章叫做python修饰器的函数式编程。 那这种模式呢可以很轻松的把一些函数啊装配到另外一些函数上。 让你的代码呢更加简单&#xff0c;也可以让一些小功能性的代码复用性更高。 让代码中的函数呢可以…

掌握XD数字设计:打造令人惊艳的用户体验

xd是adobe旗下一款主打UI界面设计-建立原型的软件&#xff0c;它可以将wireframe、design、以及prototype等UI/UX设计流程整合到一个软件中&#xff0c;算是一款与sketch对打的软件。 与PS相比&#xff0c;在UI设计方面&#xff0c;Adobe XD有非常突出的3个优点&#xff1a;能…

从0到1手写vue源码

模版引擎 数组join法&#xff08;字符串&#xff09; es6反引号法&#xff08;模版字符串换行&#xff09; mustache (小胡子) 引入mustache 模版引擎的使用 mustache.render(templatestr,data) mustache.render 循环简单数组 循环复杂数组 循环单项数组 数组的嵌套 musta…