目錄
- 實現基本可用的幾個策略
- 1、流量削峰(不同地區售票時間錯峰出售)
- 2、延遲響應,異步處理(買票排隊,基于隊列先收到用戶買票請求,排隊異步處理,延遲響應)
- 3、體驗降級(看到非實時數據,采用緩存數據提供服務)
- 4、過載保護熔斷/限流,直接拒絕掉一部分請求,或者當請求隊列滿了,移除一部分請求,保證整體系統可用)
- 5、 故障隔離(出現故障,做到故障隔離,避免影響其他服務)
- 6.、彈性擴容(基于Metric和Monitor實現系統態勢感知,做到彈性伸縮)
- 實現最終一致性的具體方式
- 1、讀時修復
- 2、寫時修復
- 3、異步修復
- 使用BASE理論
- 總結
- reference
BASE理論是CAP理論中AP的延申,強調可用性。它的核心是基本可用(Basically Available)和最終一致性(Eventually consistent)
實現基本可用的幾個策略
基本可用本質是一種妥協,也就是出現節點故障或者系統過載時,通過犧牲非核心功能的可用性,保障核心功能的穩定運行。
實現基本可用的幾個策略:
1、流量削峰(不同地區售票時間錯峰出售)
以訂票系統設計為例,在春運期間,開始售票前后會出現及其海量的請求峰值。
可以在不同的時間,出售不同區域的票,將訪問請求錯開,削弱請求峰值。
2、延遲響應,異步處理(買票排隊,基于隊列先收到用戶買票請求,排隊異步處理,延遲響應)
還以訂票系統為例。用戶提交購票請求后,往往會在隊列中排隊等待處理,可能幾分鐘或十幾分鐘后,系統才開始處理,然后響應處理結果。
3、體驗降級(看到非實時數據,采用緩存數據提供服務)
以互聯網系統為例,若出現網絡熱點事件,產生了海量的突發流量,系統過載,大量圖片因為網絡超時無法顯示,那么可以用小圖片代替原始圖片,降低圖片的清晰度和大小,提升系統處理能力。
4、過載保護熔斷/限流,直接拒絕掉一部分請求,或者當請求隊列滿了,移除一部分請求,保證整體系統可用)
把接收到的請求放在指定的隊列中排隊處理,如果請求等待時間超時,這時直接拒絕超時請求;如果隊列滿了之后,就清除隊列中一定數量的排隊請求,保護系統不過載,實現系統基本可用。
5、 故障隔離(出現故障,做到故障隔離,避免影響其他服務)
6.、彈性擴容(基于Metric和Monitor實現系統態勢感知,做到彈性伸縮)
實現最終一致性的具體方式
最終一致性是指:系統中所有的數據副本在經過一段時間的同步后,最終能夠達到一個一致的狀態。也就是說在數據一致性上存在一個短暫的延遲。
實現最終一致性有幾種具體的方式:
1、讀時修復
在讀取數據時,檢測數據的不一致,進行修復。
如Cassandra 的 Read Repair,在Cassandra 系統查詢數據的侍好,如果檢測到不同節點的副本數據不一致,系統就自動修復數據
2、寫時修復
在寫入數據時,檢測數據的不一致,進行修復,主要通過失敗重試。
如Cassandra 的Hinted Handoff實現,Cassandra 集群的節點之間遠程寫數據的時候,如果寫失敗就將數據緩存下來,然后定時重傳,修復數據的不一致。
3、異步修復
通過定時對賬檢測副本數據的一致性,并修復。
寫時修復不需要做數據一致性比對,性能消耗較低,推薦使用。
在實現最終一致性的時候,推薦同時實現自定義寫一致性級別(比如 All、Quorum、One、Any)讓用戶可以自主選擇相應的一致性級別。
使用BASE理論
DATA節點的核心功能是讀和寫,所以基本可用是指讀和寫的基本可用。可以通過分片和多副本,實現讀和寫的基本可用。即將同一業務的數據先分片,然后以多份副本的形式分布在不同的節點上。保障多節點多副本集群。
為了達到最終一致性,通過寫時修復和異步修復。并且實現自定義寫一致性級別,用戶在寫數據的時候,可以根據業務數據的特點設置不同的寫一致性級別。
總結
ACID 理論是傳統數據庫常用的設計理念,追求強一致性模型。BASE 理論支持的是大型分布式系統,通過犧牲強一致性獲得高可用性。BASE 理論在很大程度上,解決了事務型系統在性能、容錯、可用性等方面痛點。BASE 理論在 NoSQL 中應用廣泛,是 NoSQL 系統設計的事實上的理論支撐。
對于任何集群而言,不可預知的故障的最終后果,都是系統過載。如何設計過載保護,實現系統在過載時的基本可用,是開發和運營互聯網后臺的分布式系統的重中之重。
reference
《分布式協議與算法實戰.韓健》