原因
數據庫集羣的主從數據同步存在延時,延遲期間從庫上的讀請求會讀取到不一致的數據,如下圖所示。(不管同步還是異步,只要存在數據冗餘就存在數據一致性問題)
解決方案
整體思路:數據庫的主從同步可以實現數據的最終一致性,延遲時間一般在幾毫秒以內,因此可以按照業務對數據不一致時間的容忍程度設計對應的方案。
- 對於絕大部分業務來說,比如訂單、消息、搜索等場景,這些業務場景下是可以容忍幾毫秒的延時,因此可以直接忽略數據不一致問題;
- 對於不能容忍幾毫秒的不一致性的業務,則需要強制性讀主。強制性讀主太過暴力,一種優化手段是利用緩存記錄數據變更時間,如果請求的數據短時間內發生變更則讀主,否則讀從;
參考: