转载

『互联网架构』软件架构-解密电商系统-读写分离各种实现优缺点与解决方案(83)

数据库读写分离,之前也说过这次在回顾下吧:主从复制,proxy读写分离,jar包进行读写分离。三种方式体量不同,根据自己的需求找到最合适的,一起说下。

『互联网架构』软件架构-解密电商系统-读写分离各种实现优缺点与解决方案(83)

(一)什么是读写分离

我们一般应用访问数据库无非是读取数据、修改数据、插入数据、删除数据。

而我们对数据库一般分为: master(主库也是写库) slave(从库也为读库)

而读写分离的意思就是:所有的写(insert update delete)操作走主库、其他走从库。

  • 目的是什么?

    我们一般应用对数据库而言都是“读多写少”,也就是说对数据库读取数据的压力比较大。读写分离的主要目的是降低主库的压力。 降低主库的读的压力。只是降低主库读的压力,并不是说不能用主库来查询(下单立刻查询订单状态)。

  • 前提条件:
  1. 读库 slave 需要跟写库 master 的数据一致。
  2. 写数据必须写到证据库。
  3. 读取数据必须到读库,这不一定,特殊的业务需求可能需要走主库,主从同步需要时间,可以强制路由走主库。
  • 行业用的多的

    主多从 mysql 集群方案,至少两个库。一主一从。

  • 主从复制

『互联网架构』软件架构-解密电商系统-读写分离各种实现优缺点与解决方案(83)

Master my.cnf 配置:

binlog-do-db=tlshop
binlog-ignore-db=mysql
binlog_format=mixed
log-bin=mysql-bin
server-id=1

Slave my.cnf 配置

replicate-do-db=tlshop
replicate-ignore-db=mysql
server-id=2
#以下的配置是5.6 之前版本
#master-host=192.168.0.15
#master-port=3306
#master-user=root
#master-password=123456

slave 动态配置节点信息

1.进入master数据库,输入

show master status/G

『互联网架构』软件架构-解密电商系统-读写分离各种实现优缺点与解决方案(83)

2.进入slave数据库,输入

change master to master_host='192.168.0.15', master_user='root', master_password='123456',
master_log_file='(输入1中show master status里面的 File)', master_log_pos=‘(输入1中show master status里面的 Position)’;

slave start;//启动

(二)读写分离

  • 业界方案

    代理层 proxy: Atlas 开源软件

    应用层: Sharding-jdbc

  • 代理层 Atlas

    官网https://github.com/Qihoo360/Atlas

Atlas 是由 Qihoo 360 公司 Web 平台部基础架构团队开发维护的一个基于 MySQL 协议的数据中间层项目。它在 MySQL 官方推出的 MySQL-Proxy 0.8.2 版本的基础上,修改了大量bug,添加了很多功能特性。目前该项目在 360 公司内部得到了广泛应用,很多 MySQL 很多 MySQL 业务已经接入了 Atlas 平台,每天承载的读写请求数达几十亿条。同时,有超过 50 家公司在生产环境中部署了 Atlas,超过 800 人已加入了我们的开发者交流群,并且些数字还在不断增加。

『互联网架构』软件架构-解密电商系统-读写分离各种实现优缺点与解决方案(83)

『互联网架构』软件架构-解密电商系统-读写分离各种实现优缺点与解决方案(83)

主要功能

1. 读写分离。

2. 从库负载均衡。

3. IP 过滤。

4. 自动分表。

5. DBA 可平滑上下线 DB。

6. 自动摘除宕机的 DB。

Atlas 配置

『互联网架构』软件架构-解密电商系统-读写分离各种实现优缺点与解决方案(83)

强制路由:

注释的方式强制走主库。

Alatas:

/*master*/ select 字段 from 表名

业务需要 下单即查

Sharding-jdbc

Sharding-JDBC 是一个开源的分布式数据库中间件,它无需额外部署和依赖,完全兼容 JDBC和各种 ORM 框架。 Sharding-JDBC 作为面向开发的微服务云原生基础类库,完整的实现了分库分表、读写分离和分布式主键功能,并初步实现了柔性事务。之前有专门的文章『互联网架构』(65)

https://shardingsphere.apache.org/index_zh.html
<dependency>
  <groupId>io.shardingjdbc</groupId>
  <artifactId>sharding-jdbc-core-spring-namespace</artifactId>
  <version>${sharding-jdbc.version}</version>
</dependency>
<dependency>
  <groupId>io.shardingjdbc</groupId>
  <artifactId>sharding-jdbc-core</artifactId>
  <version>${sharding-jdbc.version}</version>
</dependency>

<master-slave:data-source id="dataSource" master-data-source-name="dataSourceMaster"
slave-data-source-names="dataSourceSlave,dataSourceSlave,dataSourceSlave" strategytype="ROUND_ROBIN" />

『互联网架构』软件架构-解密电商系统-读写分离各种实现优缺点与解决方案(83)

PS:Alatas:

1.程序不需要管主从配置的具体细节

2.实现原理是 proxy,所以性能上会下降

3.而且需要维护其高可用

4.减少了程序员技能要求

5.只支持 mysql

Sharding-jdbc:

1.主从配置在程序中,所以增加了程序员的技术要求

2.实现原理是 jdbc 增强,所以支持任何数据库类型 性能比上面那个强

3.而且不需要维护。

4.Mysql、 Oracle、 sql server

百度未收录

>>原创文章,欢迎转载。转载请注明:转载自IT人故事会,谢谢!

>>原文链接地址:上一篇:

已是最新文章

原文  https://idig8.com/2019/06/16/hulianwangjiagouruanjianjiagou-jiemidianshangxitong-duxiefenligezhongshixianyouquedianyujiejuefangan/
正文到此结束
Loading...