高性能数据库集群的第一种方式是: 读写分离,其本质是将访问压力分散到集群中的多个节点,但是没有分散 存储压力;第二种方式是:分库分表,既可以分散访问压力,又可以分散存储压力。
一 读写分离
读写分离的基本原来是将数据库读写操作分散到不同的节点上,读写分离的基本实现如下:
- 数据库服务器搭建主从集群,一主一从,一主多从都可以
- 数据库主机负责读写操作,从机只能负责读操作
- 数据库主机通过复制将数据同步到从机,每台数据库服务器都存储了所有的业务数据
- 业务服务器将写操作发给数据库主机,将读操作发给数据库从机
注意:这里用的是主从集群,而不是主备集群,备机一般认为仅仅提供备份功能,不提供访问功能;而从机可以理解为仆从,仆从是需要帮助主人干活的,从机是需要提供读数据的功能,所以使用主备还是主从,是要看场景的,这两个词不是完全等同的
读写分离的实现逻辑并不是很复杂,但是在实际应用过程中需要应对复制延迟带来的复杂性
主从复制延迟会带来一个问题:如果业务服务器将数据写入到数据库主服务器后立刻进行读取,此时读操作访问的是从机,主机还没有将数据复制到从机,到从机读取数据是读取不到最新数据的,业务上可能会存在问题。
解决主从复制延迟有几种常见的方法
- 写操作后读操作指定发给数据库主服务器
- 读从机失败后再读一次主机,这就是通常所说的二次读取,二次读取和业务无绑定,只需要对底层数据库访问的API进行封装即可,实现代价较小,不足之处在于如果存在很多的二次读取,将大大增加主机的读操作压力。
- 关键业务读写操作全部指向主机,非关键业务采用读写分离