主从架构如何保证读写一致性(主从网络延迟)

发布时间 2023-06-14 15:54:56作者: 上好佳28

问题

在高并发的场景下,一般是读写分离,写主库,读从库。

但是主从同步存在延迟,原因可能有

a. 主库的从库太多

b. 从库硬件配置比主库差

c. 慢 SQL 语句过多

d. 主从库之间的网络延迟

e. 主库读写压力大

如果数据写入主库之后还未来得及同步到从库,此时读从库就会读到脏数据

解决方案

1、基于数据库中间件(canal)

1)所有的读写请求都走数据库中间件,通常情况下,写请求路由到主库,读请求路由到从库

2)记录所有路由到写库的key,在主从同步时间窗口内(假设是500ms),如果有读请求访问中间件,此时有可能从库还是旧数据,就把这个key上的读请求路由到主库。

3)在主从同步时间过完后,对应key的读请求继续路由到从库。

能保证一致但是数据库中间件的成本较高

2、基于缓存

写流程

1)如果key要发生写操作,记录在cache里,并设置“经验主从同步时间”为的cache超时时间,例如500ms

2)然后修改主数据库

读流程:

1)先到缓存里查看,对应key有没有相关数据

2)有相关数据,说明缓存命中,这个key刚发生过写操作,此时需要将请求路由到主库读最新的数据。

3)如果缓存没有命中,说明这个key上近期没有发生过写操作,此时将请求路由到从库,继续读写分离。、

成本低,但对数据库的操作增加了对缓存的操作