在咱們談高可用的時候,咱們無時無刻不在面對各類故障。顯然,讓系統擁有自愈的能力和機制是面對故障時依舊保持高可用的根本。無狀態的服務的恢復相對簡單,只需自愈機制將故障服務重啓或遷移到正常節點。而對於有狀態的服務,若是狀態是能夠恢復的,不管是從更底層的存儲系統恢復狀態仍是利用副本機制從其餘副本恢復,那麼自愈機制一樣能夠維持有狀態服務的高可用。最後咱們還但願隔離各類故障所產生的變化,讓業務端儘量感知不到故障恢復先後系統所發生的各類微妙變化。數據庫
在一個系統裏無狀態的部分一般是最容易擴展的,在服務發現和路由機制的幫助下無狀態的服務能夠很是容易地橫向擴展到更多的節點上。儘可能消除組件的狀態能夠幫助咱們提高整個系統的可擴展性。但業務是多樣的,系統也是複雜的,不可能理想化地只包含無狀態的組件。在這種狀況下咱們應當收攏狀態,減小須要維護的強狀態組件。若是能進一步將有狀態的服務調整爲可從外部系統恢復的弱狀態服務,對整個系統的可擴展性一樣能起到很是正面的做用。緩存
一般業務系統越往核心組件走狀態越重擴展的代價也越大,層層攔截快速下降須要深刻到核心組件的併發請求量在大型系統設計上是很是常見的。在已讀服務中採用了兩個常見的分層去併發的設計。首先是高效率的緩存,經過提升緩存的命中率咱們將大量的業務請求攔截在系統最薄弱的數據庫層之外。其次是數據壓縮機制,經過使用高效率的壓縮機制來平衡計算和存儲的消耗下降最終落到物理存儲設備上的 I/O 壓力。併發
原文連接:設計