架构的存储高性能- 读写分离

读写分离的基本原理是将数据库读写操作分散到不同的节点上,其基本架构如下图所示。

zabbix 读写分离 2023 读写分离实现_高并发


读写分离的基本实现如下:

(1)数据库服务器搭建主从集群,一主一从、一主多从都可以。

(2)数据库主机负责读写操作,从机只负责读操作。

(3)数据库主机通过复制将数据同步到从机,每台数据库服务器都存储了所有的业务数据。

(4)业务服务器将写操作发给数据库主机,将读操作发给数据库从机。

读写分离的实现逻辑并不复杂,但在实际应用过程中需要应对复制延迟带来的复杂性。
以MySQL为例,主从复制延迟可能达到1s,如果有大量数据同步,延迟1分钟也是有可能的。主从复制延迟会带来一个问题:如果业务服务器将数据写入到数据库主服务器后立刻(1s内)进行读取,此时读操作访问的是从机,主机还没有将数据复制过来,到从机读取数据是读不到最新数据的,业务上可能会有问题。例如,用户刚注册完后立刻登录,业务服务器会提示他“你还没有注册”,而用户明明刚才已经注册成功了。
解决主从复制延迟有几种常见的方法。
(1)写操作后的读操作指定发给数据库主服务器。
例如,注册账号完成后,登录时读取账号的读操作也发给数据库主服务器。这种方式和业务强绑定,对业务的侵入和影响较大,如果哪个新来的程序员不知道这样写代码,就会导致一个bug。
(2)读从机失败后再读一次主机。
这就是通常所说的“二次读取”,二次读取和业务无绑定,只需要对底层数据库访问的API 进行封装即可,实现代价较小,不足之处在于如果有很多二次读取,将大大增加主机的读操作压力。例如,黑客暴力破解账号,会导致大量的二次读取操作,主机可能顶不住读操作的压力从而崩溃。
(3)关键业务读写操作全部指向主机,非关键业务采用读写分离。
例如,对于一个用户管理系统来说,注册+登录的业务读写操作全部访问主机,用户的介绍、爱好、等级等业务,可以采用读写分离,因为即使用户改了自己的自我介绍,在查询时却看到了自我介绍还是旧的,业务影响与不能登录相比就小很多,还可以忍受。