解决问题,读压力,解决不了存储压力
读表利用索引提升查询速度,主表可以不建很多索引提升写入速度。
带来问题
- 主从复制延迟
例如:注册完账号后,登陆显示无该用户
解决方法
- 写操作后的读操作指定发给主服务器
例如:注册完后,登陆读主库,这种方式和业务强绑定,如果新来的人不知道这样写代码,就会导致一个bug - 读从机失败在去读主机(二次读取)
对业务无绑定,只需要对底层数据库访问api进行封装即可,实现代价较小,不足之处在于如果有很多二次读取,将大大增加主机读的压力。 - 关键业务读写全部指向主机,非关键业务采用读写分离
例如:注册登陆业务读写全部访问主机,用户介绍、爱好可以采用读写分离。
- 分配机制
1.程序代码封装
优点实现简单。
缺点每个编程语言都要实现一次,如果主从发生切换,则需要所有系统都修改配置并重启
目前开源的 淘宝的TDDL
2.中间件封装
优点支持多种编程语言,主从切换无感知(中间件可探测主从状态,比如发一个写语句,成功的是主)
缺点,实现复杂,所有读写请求经过中间件对性能要求高
目前开源的 奇虎360 atlas
网友评论