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_database

dataSources:
  master_ds:
    type: com.zaxxer.hikari.HikariDataSource
    driverClassName: com.mysql.cj.jdbc.Driver
    jdbcUrl: jdbc:mysql://localhost:3306/master_db
    username: root
    password: root
  slave_ds_0:
    type: com.zaxxer.hikari.HikariDataSource
    driverClassName: com.mysql.cj.jdbc.Driver
    jdbcUrl: jdbc:mysql://localhost:3306/slave_db_0
    username: root
    password: root
  slave_ds_1:
    type: com.zaxxer.hikari.HikariDataSource
    driverClassName: com.mysql.cj.jdbc.Driver
    jdbcUrl: jdbc:mysql://localhost:3306/slave_db_1
    username: root
    password: root
读写分离规则配置

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

rules:
  - !READWRITE_SPLITTING
    dataSources:
      pr_ds:
        writeDataSourceName: master_ds
        readDataSourceNames:
          - slave_ds_0
          - slave_ds_1
        loadBalancerName: round_robin

loadBalancers:
  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_1
      master_ds:
        type: com.zaxxer.hikari.HikariDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        jdbc-url: jdbc:mysql://localhost:3306/master_db
        username: root
        password: root
      slave_ds_0:
        type: com.zaxxer.hikari.HikariDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        jdbc-url: jdbc:mysql://localhost:3306/slave_db_0
        username: root
        password: root
      slave_ds_1:
        type: com.zaxxer.hikari.HikariDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        jdbc-url: jdbc:mysql://localhost:3306/slave_db_1
        username: root
        password: root
    rules:
      readwrite-splitting:
        data-sources:
          pr_ds:
            write-data-source-name: master_ds
            read-data-source-names: slave_ds_0, slave_ds_1
            load-balancer-name: round_robin
        load-balancers:
          round_robin:
            type: ROUND_ROBIN

总结

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

nginx部署多个项目;vue打包项目部署设置子路径访问;一个根域名(端口)配置多个子项目

本文解决&#xff1a; vue打包项目部署设置子路径访问&#xff1b;nginx部署多个子项目&#xff1b;一个ip/域名 端口 配置多个子项目&#xff1b;配置后&#xff0c;项目能访问&#xff0c;但是刷新页面就丢失的问题 注&#xff1a;本文需要nginx配置基础。基础不牢的可见文…

SEELE框架:图像中主体重定位的创新方法

现有的图像编辑工具多集中于静态调整&#xff0c;如替换图像中的特定区域或改变整体风格&#xff0c;对于动态调整——特别是图像中主体的位置变化则显得力不从心。这种局限性激发了对更加先进和灵活的图像编辑技术的探索。复旦大学数据科学学院的研究团队提出了一种名为SEELE的…

jmeter-beanshell学习1-vars使用获取变量和设置变量

最近又开始了用jmeter做自动化&#xff0c;不管怎么实现&#xff0c;都逃离不了用beanshell&#xff0c;最后把所有校验都放在了beanshell判断&#xff0c;效果还不错。 首先jmeter有很多beanshell相关的元件&#xff0c;取样器、前置处理器、后置处理器、断言&#xff0c;暂时…

把Windows打造成一个NTP网络时间服务器,为网关提供校时服务

把Windows打造成一个NTP网络时间服务器&#xff0c;为网关提供校时服务。主要目的是为了解决&#xff1a;当网关不能上外网的时候&#xff0c;可以使用局域网的电脑来当做NTP服务器&#xff0c;实现校时功能。 跟着小编来看&#xff0c;如何使用NTP网络时间服务器来同步时间。 …

推荐3款Windows系统的神级软件,免费、轻量、绝对好用!

DiskView DiskView是一款用于管理和查看磁盘空间的工具&#xff0c;它集成了于微软的Windows操作系统资源管理器中&#xff0c;以显示直观的磁盘空间使用情况。该软件通过生成图形化地图&#xff0c;帮助用户组织和管理大量文件和文件夹&#xff0c;从而高效地管理磁盘空间。用…

数字信号处理及MATLAB仿真(2)——离散系统

上回书说到如何来编写一些简单的离散时间序列&#xff0c;今天咱们就来谈谈一些关于常系数差分方程的操作吧。 说到这里咱们对于常系数差分方程可能最关心的就是怎么去求解了。 其中最关键的部分就是filter函数&#xff0c;可以用来计算系统在输入信号为x的输出信号y。大家学过…

【C++】日期类

鼠鼠实现了一个日期类&#xff0c;用来练习印证前几篇博客介绍的内容&#xff01;&#xff01; 目录 1.日期类的定义 2.得到某年某月的天数 3.检查日期是否合法 4.&#xff08;全缺省&#xff09;构造函数 5.拷贝构造函数 6.析构函数 7.赋值运算符重载 8.>运算符重…

elasticsearch-users和elasticsearch-reset-password介绍

elasticsearch 内置 elastic, kibana, logstash_system,beats_system 共4个用户&#xff0c;用途如下&#xff1a; elastic 账号&#xff1a;内置的超级用户&#xff0c;拥有 superuser 角色。 kibana 账号&#xff1a;用来连接 elasticsearch 并与之通信。Kibana 服务器以该用…

分享超级实用的3款AI工具,让工作效率轻松翻倍

Hey&#xff0c;职场小伙伴们&#xff01;每天被堆积如山的工作压得喘不过气&#xff1f;加班成了日常&#xff0c;效率却不见提高&#xff1f;别急&#xff0c;今天就让我来给你们揭秘3款AI神器&#xff0c;它们将是你职场上的得力助手&#xff0c;让你的工作效率轻松翻倍&…

政务单位网站SSL证书选择策略

在数字化快速发展的今天&#xff0c;政务单位网站作为政府与公众沟通的重要桥梁&#xff0c;其安全性和可信度显得尤为重要。SSL证书作为保障网站安全的重要手段&#xff0c;其选择对于政务单位网站来说至关重要。本文将探讨政务单位网站在选择SSL证书时应该考虑的因素&#xf…

2024暑假集训第四次考试(终极测试)

作者的话 虽然这是最后一次考试&#xff0c;也是10天暑假集训的终极测试&#xff0c;但是题目难度反而没那么高&#xff0c;这里的难度是思考深度&#xff0c;但是主要是广范围的考所学知识的简单应用&#xff08;也就是基本都是模版题的应用&#xff0c;只不过知识面广&#x…

国际水务交流 | 一带一路沿线水环境考察暨中马水务合作论坛

从具体区域来看&#xff0c;“一带一路"沿线国家环境问题复杂而多样&#xff0c;各国生态环境特征差异明显 东南亚尤其是东盟地区受热带季风影响&#xff0c;降水较多&#xff0c;洪水高发&#xff0c;也是世界生物最为多样最为丰富的地区之一&#xff0c;这一区域面临森…

WBCE CMS v1.5.2 远程命令执行漏洞(CVE-2022-25099)

前言 CVE-2022-25099 是一个影响 WBCE CMS v1.5.2 的严重安全漏洞&#xff0c;具体存在于 /languages/index.php 组件中。该漏洞允许攻击者通过上传精心构造的 PHP 文件在受影响的系统上执行任意代码。 技术细节 受影响组件&#xff1a;/languages/index.php受影响版本&…

欧洲智慧能源展揭幕,海博思创闪耀登场展示储能创新

近日&#xff0c;备受瞩目的欧洲智慧能源展&#xff08;The Smarter E Europe&#xff09;盛大开幕&#xff0c;吸引了全球能源行业的目光。在这场国际性的盛会中&#xff0c;中国储能行业的领军企业海博思创凭借卓越的技术实力和创新的解决方案&#xff0c;成为展会上一颗耀眼…

性能压测 -优化 Nginx的动静分离

两件事情 1.以后将所有的项目的静态资源都应该放在nginx里面 2.nginx 规则&#xff1a;/static/***所有请求都有nginx直接返回 nginx 配置一下配置文件&#xff0c;然后把html 的静态资源&#xff0c;绑定好是Nginx优先级高的静态资源路径&#xff0c;就去交给nginx静态资源…

电子发票时代企业如何实现电子发票无纸化管理?

“全电发票”、“报销入账归档”、“无纸化办公”与“金税四期”一道&#xff0c;成为数智化时代当之无愧的热词。2012年起&#xff0c;我国不断出台政策推动电子发票及电子会计档案&#xff0c;2020年更是连续出台《关于规范电子会计凭证报销入账归档的通知》&#xff0c;全电…

2024第二届电子通信与计算机科学技术国际会议(ICECCST 2024)

2024第二届电子通信与计算机科学技术国际会议(ICECCST 2024) 会议简介 2024第二届电子通信与计算机科学技术国际会议&#xff08;ICECCST 2024&#xff09;是一次重要的学术盛会&#xff0c;将在中国厦门举行。会议的主要目的是为全球的电子通信和计算机科学技术领域的专家、…

【信息学奥赛】CSP-J/S初赛07 排序算法及其他算法在初赛中的考察

本专栏&#x1f449;CSP-J/S初赛内容主要讲解信息学奥赛的初赛内容&#xff0c;包含计算机基础、初赛常考的C程序和算法以及数据结构&#xff0c;并收集了近年真题以作参考。 如果你想参加信息学奥赛&#xff0c;但之前没有太多C基础&#xff0c;请点击&#x1f449;专栏&#…

【车载开发系列】GIT安装详细教程

【车载开发系列】GIT安装详细教程 【车载开发系列】GIT安装详细教程 【车载开发系列】GIT安装详细教程一. GIT软件概念二. GIT安装步骤三. GIT安装确认三. GIT功能使用1&#xff09;Git Bash2&#xff09;Git CMD3&#xff09;Git FAQs4&#xff09;Git GUI 一. GIT软件概念 G…

【YOLOv5/v7改进系列】改进池化层为ASPP

一、导言 Atrous Spatial Pyramid Pooling (ASPP)模块是一种用于多尺度特征提取的创新技术&#xff0c;旨在提升深度学习模型在语义图像分割任务中的表现。ASPP模块通过在不同的采样率下应用空洞卷积&#xff0c;可以捕获不同大小的对象以及图像的上下文信息&#xff0c;从而增…