【愚公系列】2022年04月 .NET架构班 042-分布式中间件 ShardingSphere-Proxy之读写分离

举报
愚公搬代码 发表于 2022/04/07 18:05:00 2022/04/07
【摘要】 前言说到读写分离,我们先了解下什么是主从复制。主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库,主数据库一般是准实时的业务数据库。一台服务器充当主服务器,而另外一台服务器充当从服务器。此时主服务器会将更新信息写入到一个特定的二进制文件中,并会维护文件的一个索引用来跟踪日志循环,这个日志可以记录并发送到从服务器的更新中去。一台从服务器连接到主服务器时,从服务器会通知主服务...

前言

说到读写分离,我们先了解下什么是主从复制。

主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库,主数据库一般是准实时的业务数据库。一台服务器充当主服务器,而另外一台服务器充当从服务器。

此时主服务器会将更新信息写入到一个特定的二进制文件中,并会维护文件的一个索引用来跟踪日志循环,这个日志可以记录并发送到从服务器的更新中去。

一台从服务器连接到主服务器时,从服务器会通知主服务器从服务器的日志文件中读取最后一次成功更新的位置。然后从服务器会接收从哪个时刻起发生的任何更新,然后锁住并等到主服务器通知新的更新。

读写分离简单俩说就是基于主从复制架构,一个主库,有多个从库,主库主要负责写,写完后主库会自动把数据给同步给从库。

读写分离架构图:
在这里插入图片描述

一、ShardingSphere-Proxy之读写分离

1.案例复现

product为代理数据库,product真实的写库,product_0和product_1真实的读库。

案例:商品表product,如果在3307添加商品数据,数据会添加到product_0和product_1中,这个时候,如果查询商品数据并发量比较大,超过了单个数据处理最高处理能力,就会出现数据库压力过大,导致数据库性能下降或者宕机的问题。如何解决数据库性能或者宕机问题?

方案:使用读写分离

# 3、创建客户端连接库
schemaName: ebusinesss

#1、连接mysql
dataSources:
  productdatasources_0:
    url: jdbc:mysql://localhost:3306/ebusinesss?serverTimezone=UTC&useSSL=false
    username: root
    password: root
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50
    minPoolSize: 1
  productdatasources_0_read0:
    url: jdbc:mysql://127.0.0.1:3308/ebusinesss?serverTimezone=UTC&useSSL=false
    username: root
    password: root
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50
    minPoolSize: 1
  productdatasources_0_read1:
    url: jdbc:mysql://127.0.0.1:3309/ebusinesss?serverTimezone=UTC&useSSL=false
    username: root
    password: root
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50
    minPoolSize: 1
rules:
- !READWRITE_SPLITTING
  dataSources:
    pr_ds0:
      writeDataSourceName: productdatasources_0
      readDataSourceNames:
        - productdatasources_0_read0
        - productdatasources_0_read1
      loadBalancerName: test
  # 负载均衡算法配置
  loadBalancers:
    test: # 负载均衡算法名称
      type: ROUND_ROBIN
- !SHARDING
  tables:
    product:
      actualDataNodes: productdatasources_0.product_${0..1}
      tableStrategy:
        standard:
          shardingColumn: ProductId
          shardingAlgorithmName: product_MOD
      keyGenerateStrategy:
        column: Id
        keyGeneratorName: snowflake           
  shardingAlgorithms:
    product_MOD:
      type: MOD
      props:
        sharding-count: 2
  keyGenerators:
    snowflake:
      type: SNOWFLAKE
      props:
        worker-id: 123
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。