1 高性能数据库集群
1.1 读写分离
目的:分散数据库读写操作的压力
基本原理:将数据库读写操作分散到不同的节点上
复杂度:主从复制延迟和分配机制
1.1.1 主从复制延迟
带来的问题:
如果业务服务器将数据写入到数据库主服务器后立刻(1 秒内)进行读取,此时读操作访问的是从机,主机还没有将数据复制过来,到从机读取数据是读不到最新数据的,业务上就可能出现问题。
常见解决方法:
1 写操作后的读操作指定发给数据库主服务器
2 读从机失败后再读一次主机
这就是“二次读取”;
二次读取和业务无绑定,只需要对底层数据库访问的 API 进行封装即可,实现代价较小;
不足之处在于如果有很多二次读取,将大大增加主机的读操作压力,也会一定的危险性,例如,黑客暴力破解账号,会导致大量的二次读取操作,主机可能顶不住读操作的压力从而崩溃。3 关键业务读写操作全部指向主机,非关键业务采用读写分离
1.1.2 分配机制
将读写操作区分开来,然后访问不同的数据库服务器,一般有两种方式:程序代码封装和中间件封装。
- 程序代码封装(中间层封装)
程序代码封装指在代码中抽象一个数据访问层,实现读写操作分离和数据库服务器连接的管理
基本架构:
特点:
1 实现简单,而且可以根据业务做较多定制化的功能。
2 每个编程语言都需要自己实现一次,无法通用,如果一个业务包含多个编程语言写的多个子系统,则重复开发的工作量比较大。
3 故障情况下,如果主从发生切换,则可能需要所有系统都修改配