专栏首页编程坑太多『互联网架构』软件架构-解密电商系统-读写分离各种实现优缺点与解决方案(83)

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

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

(一)什么是读写分离

我们一般应用访问数据库无非是读取数据、修改数据、插入数据、删除数据。 而我们对数据库一般分为: master(主库也是写库) slave(从库也为读库) 而读写分离的意思就是:所有的写(insert update delete)操作走主库、其他走从库。

  • 目的是什么?

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

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

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

  • 主从复制

Master my.cnf 配置:

binlog-do-db=tlshopbinlog-ignore-db=mysqlbinlog_format=mixedlog-bin=mysql-binserver-id=1

Slave my.cnf 配置

replicate-do-db=tlshopreplicate-ignore-db=mysqlserver-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

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 人已加入了我们的开发者交流群,并且些数字还在不断增加。

主要功能

  1. 读写分离。
  2. 从库负载均衡。
  3. IP 过滤。
  4. 自动分表。
  5. DBA 可平滑上下线 DB。
  6. 自动摘除宕机的 DB。

Atlas 配置

强制路由: 注释的方式强制走主库。 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" />

PS:Alatas: 1.程序不需要管主从配置的具体细节 2.实现原理是 proxy,所以性能上会下降 3.而且需要维护其高可用 4.减少了程序员技能要求 5.只支持 mysql Sharding-jdbc: 1.主从配置在程序中,所以增加了程序员的技术要求 2.实现原理是 jdbc 增强,所以支持任何数据库类型 性能比上面那个强 3.而且不需要维护。 4.Mysql、 Oracle、 sql server

本文分享自微信公众号 - 编程坑太多(idig88),作者:诸葛阿明

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-06-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 原来Java大数据才是真正的高富帅!

    IT故事会
  • 「走进k8s」Kubernetes1.15.1的ConfigMap(26)

    PS:ConfigMap是kubernetes的一个核心的概念,跟上次说的service一样,这个在实际的环境中使用很频繁。当ConfigMap以数据卷的形式挂...

    IT故事会
  • 『高级篇』docker之课程管理dubbo入门操练(14)

    PS:dubbo的入门也就到这里,从spring 和springboot 对dubbo的整合。

    IT故事会
  • MySQL Master High Available 理论篇(一)

    一、概况 MHA 提供自动master故障转移以及在最短的时间内(10~30秒)提升slave为new master MHA 解决了切换后的数据不一致问题 所有...

    小小科
  • MySQL Master High Available 理论篇(二)

    六、核心参数详解 6.1 参数矩阵图 ? ? Local Scope 每个server域的参数 在application 配置文件(app.cnf)中:[ser...

    小小科
  • MHA VIP切换脚本

        MHA能够在10~30秒内实现自动故障检测和故障转移,适用于对高可用性,数据完整性要求较高的场合。要做到无缝切换,还需要依赖于VIP漂移。VIP漂移比较...

    Leshami
  • MHA部署笔记(centos6+mysql5.6)

        MHA版本:mha4mysql-manager-0.56-0.el6.noarch.rpm mha4mysql-node-0.56-0.el6.noar...

    二狗不要跑
  • 谈谈分布式里的master

    技术与管理,两者之间总感觉有冲突,把大量的时间放在管理之中,让人感觉相当的烦躁。

    SRE运维实践
  • DevOps 性能测试的优秀实践与工具

    众所周知,如果研发出来的软件产品最终根本无法达到最初设计的目的,并且满是缺陷和bug的话,这对于应用开发人员来说就是最大的噩梦。同时,对于测试人员而言,无论是应...

    DevOps时代
  • Redis Cluster 会丢数据吗?

    Redis Cluster 不保证强一致性,在一些特殊场景,客户端即使收到了写入确认,还是可能丢数据的。

    dys

扫码关注云+社区

领取腾讯云代金券