一般來講,在咱們的系統中會把數據永久保存在DB中,而且冗餘一份數據在緩存中。讀請求優先從緩存讀取數據,沒有再從DB讀取,以下圖:緩存
這樣作的好處是能夠減少DB的壓力,提升請求的響應速度。架構
但這種架構在提高系統讀請求處理能力的同時,給系統寫請求的處理帶來了很多的麻煩。由於數據在DB跟緩存中各自保存了一份,如何保證它們之間的數據一致就是須要注意的問題了。異步
當處理寫請求時有兩種方式:分佈式
問題本質上就是一個分佈式數據一致性問題,在不要求強一致性的場景下,咱們只要開闢一個異步任務去保證最終一致性便可。線程
就上面所說的場景來講,發生失敗時,咱們能夠開啓一個異步線程去作數據回填操做,反覆重試直到成功。若是採用異步線程回填數據的方式作最終一致性,那麼這個容錯性是內存級別的,也就是說若是此時重啓服務(線程消失),那麼這個重試任務就丟失了,致使數據不一致。blog