一、读写分离是什么?
简单了说,就是数据库一主一从/一主多从/多主多从的部署方式。先简单介绍下mysql的原生同步机制,其是将master的binlog期间的执行日志根据顺序,拷贝至slave的relaylog中,然后逐一解析和执行。
读写分离的好处在于:
- 硬件处理能力得到了横向的扩增,拿机器和带宽换性能
- 降低了主库服务器的压力,提高并发性能
- 缓解读锁(S锁,共享锁,Shared Lock)和写锁(X锁,排他锁,Exclusive Lock)的竞争
- 系统运行性能得到间接的提升
二、如何判别是否需要读写分离?
谈及读写分离,必定要先了解怎样的应用层场景才需要使用到读写分离模式。以下是几点比较共性的场景特点:
- 以读操作为主的应用或者服务
- 可接受时间上短暂的信息延迟
- 单一线程内同时涵盖读写操作的,使用主库
三、常见的读写分离的方式有哪些?
- 中间件,例如java-amoeba
- 框架特性,例如spring-aop
- 自定义组件,例如在dal层的prepare过程,增加拦截代码,以执行数据源的路由逻辑。