当前位置:   article > 正文

ShardingSphere

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
读写分离规则配置

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

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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
配置解析
  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>
  • 1
  • 2
  • 3
  • 4
  • 5
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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

总结

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/793811
推荐阅读
相关标签
  

闽ICP备14008679号