读写分离

基于MySql自身提供的主从复制架构,写操作请求发往主库,读操作请求发往从库。一个主库可以挂多个从库。主库完成写操作后,将数据通过binlog方式同步给从库。

主从复制工作原理

主库完成写操作后,将变更写入binlog日志,从库的IO线程从主库的binlog日志拉取拷贝数据变更日志,写入到relay中继日志,然后从库的SQL线程从relay日志中重放sql写操作,完成数据的同步。

主从复制延时较长解决方案

由于从库从主库拷贝日志以及串行执行SQL的特点,在高并发情况下,从库与主库的数据同步是有延时的。换句话说,在主库刚写入的数据,在从库不一定立马能读到。这就需要一定的策略来解决这个问题。
常见的解决方案有两种(均基于MySql提供的机制):
1.半同步复制:在主库写入数据时,强制串行同步到从库,等待至少一个从库的IO线程写入relay中继日志并回复ack报文后,才认为写操作完成。
2.并行复制:从库开启多个SQL线程,并行执行relay日志的不同库的binlog变更操作,然后并行重放SQL变更操作,相比串行能够达到降低延时的目的。

另外,在应用程序和MySql架构层面,也有如下方案:
1.设计多主结构,单个主库写压力过大导致的延时问题,分摊到多个主库,能够降低同步延时。
2.刚写入的数据,如果想立马读出来,就不从从库读,改为强制从主库读取,避免延时导致的读取不到数据问题。
3.重写代码,对于不要求立马读出来的业务场景,尽可能不立马读数据,等一会再读。


小强大人
34 声望4 粉丝