原因
数据库集群的主从数据同步存在延时,延迟期间从库上的读请求会读取到不一致的数据,如下图所示。(不管同步还是异步,只要存在数据冗余就存在数据一致性问题)
解决方案
整体思路:数据库的主从同步可以实现数据的最终一致性,延迟时间一般在几毫秒以内,因此可以按照业务对数据不一致时间的容忍程度设计对应的方案。
- 对于绝大部分业务来说,比如订单、消息、搜索等场景,这些业务场景下是可以容忍几毫秒的延时,因此可以直接忽略数据不一致问题;
- 对于不能容忍几毫秒的不一致性的业务,则需要强制性读主。强制性读主太过暴力,一种优化手段是利用缓存记录数据变更时间,如果请求的数据短时间内发生变更则读主,否则读从;
参考:
- 数据库主从不一致,怎么解?