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

栏目: 数据库 · 发布时间: 5年前

内容简介:数据库读写分离,之前也说过这次在回顾下吧:主从复制,proxy读写分离,jar包进行读写分离。三种方式体量不同,根据自己的需求找到最合适的,一起说下。我们一般应用访问数据库无非是读取数据、修改数据、插入数据、删除数据。

数据库读写分离,之前也说过这次在回顾下吧:主从复制,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人故事会,谢谢!

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

已是最新文章


以上所述就是小编给大家介绍的《『互联网架构』软件架构-解密电商系统-读写分离各种实现优缺点与解决方案(83)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

PHP高级程序设计

PHP高级程序设计

Kevin McArthur / 汪泳 等 / 人民邮电出版社出版 / 2009.7 / 45.00元

今天,PHP已经是无可争议的Web开发主流语言。PHP 5以后,它的面向对象特性也足以与Java和C#相抗衡。然而,讲述PHP高级特性的资料一直缺乏,大大影响了PHP语言的深入应用。 本书填补了这一空白。它专门针对有一定经验的PHP程序员,详细讲解了对他们最为重要的主题:高级面向对象、设计模式、文档、测试和标准PHP库等内容。同时,为适应目前Web开发的新趋势,作者还全面探讨了MVC架构和Z......一起来看看 《PHP高级程序设计》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

在线进制转换器
在线进制转换器

各进制数互转换器