从零开始学架构三 高性能

从零开始学架构三 高性能

读写分离

读写分离的基本实现是:

  1. 数据库服务器搭建主从集群,一主一从、一主多从都可以。
  2. 数据库主机负责读写操作,从机只负责读操作。
  3. 数据库主机通过复制将数据同步到从机,每台数据库服务器都存储了所有的业务数据。
  4. 业务服务器将写操作发给数据库主机,将读操作发给数据库从机

细节:主从 复制延迟分配机制

解决主从复制延迟有几种常见的方法:

1.写操作后的读操作指定发给数据库主服务器
例如,注册账号完成后,登录时读取账号的读操作也发给数据库主服务器。这种方式和业务强绑定,对业务的侵入和影响较大,如果哪个新来的程序员不知道这样写代码,就会导致
一个bug。
2.读从机失败后再读一次主机
这就是通常所说的“二次读取”,二次读取和业务无绑定,只需要对底层数据库访问的API进行封装即可,实现代价较小,不足之处在于如果有很多二次读取,将大大增加主机的读操
作压力。例如,黑客暴力破解账号,会导致大量的二次读取操作,主机可能顶不住读操作的压力从而崩溃。
3.关键业务读写操作全部指向主机,非关键业务采用读写分离

分配机制

将读写操作区分开来,然后访问不同的数据库服务器,一般有两种方式:程序代码封装和中间件封装。

1.程序代码封装(基于Hibernate进行简单封)

程序代码封装指在代码中抽象一个数据访问层(所以有的文章也称这种方式为“中间层封装”),实现读写操作分离和数据库服务器连接的管理。例如,基于Hibernate进行简单封
装,就可以实现读写分离

2. 中间件封装

中间件封装指的是独立一套系统出来,实现读写操作分离和数据库服务器连接的管理。中间件对业务服务器提供SQL兼容的协议

特点:

  1. 能够支持多种编程语言,因为数据库中间件对业务服务器提供的是标准SQL接口。
  2. 数据库中间件要支持完整的SQL语法和数据库服务器的协议(例如,MySQL客户端和服务器的连接协议),现比较复杂,细节特别多,很容易出现bug,需要较长的时间才能稳定。
  3. 数据库中间件自己不执行真正的读写操作,但所有的数据库操作请求都要经过中间件,中间件的性能要求也很高。
  4. 数据库主从切换对业务服务器无感知,数据库中间件可以探测数据库服务器的主从状态。例如,向某个测试表写入一条数据,成功的就是主机,失败的就是从机
  5. 开源数据库中间件方案中,MySQL官方先是提供了MySQL Proxy,现在MySQL官方推荐MySQL Router。MySQL Router的主要功能有读写分离、故障自动切换、负载均衡、连接池等
  6. 奇虎360公司也开源了自己的数据库中间件Atlas,

分库分表

原文地址:https://www.cnblogs.com/liguo-wang/p/10909985.html