我們經常需要設計具有高可用性、高可擴充套件性和高吞吐量的系統。 它們到底是什麼意思?
下圖為影印件系統設計備忘單,包括“三高”的常見解決方案。
高可用性意味著我們需要達到乙個正常執行時間長。我們通常將設計目標描述為:"3 個 9"或"4 個 9"。"4個九",即 9999% 的正常執行時間,這意味著服務只能中斷 8 次64 秒。
為了實現高可用性,我們需要在系統中冗餘設計。有幾種方法可以做到這一點:
熱-熱 兩個例項接收相同的輸入,並將輸出傳送到下游服務。 如果其中乙個出現故障,另乙個可以立即接管。 由於雙方都向下游傳送輸出,因此下游系統需要能夠處理重複資料。
hot-warm兩個例項接收相同的輸入,只有熱端將輸出傳送到下游服務。 如果熱側出現故障,則熱側將接管並開始向下游服務傳送輸出。
單個領導例項從上游系統接收資料,並將其複製到其他副本。
無領導的集群沒有領導者。 任何寫入操作都將複製到其他例項。 只要寫入例項數加上讀取例項數大於例項總數,我們就得到有效資料。 這稱為仲裁。
這意味著需要該服務在一段時間內處理大量請求。常用的指標是 QPS(每秒查詢數)或 TPS(每秒事務數)。
為了實現高吞吐量,我們通常在架構中進行新增快取以避免通過速度較慢的 IO 裝置,例如資料庫或磁碟。 我們還可以增加計算密集型任務的執行緒數。 但是,新增過多的執行緒會降低效能。 因此,我們需要識別系統的瓶頸,提高系統的吞吐量。
我們也可以在系統中使用它非同步處理有效地單獨隔離耗時且資源密集型的元件。
高可擴充套件性意味著系統可以快速輕鬆地擴充套件到:容納更多容量(水平可伸縮性)或更多功能(垂直可伸縮性)。 通常,我們通過檢視響應時間來決定是否需要擴充套件系統。
為了實現高可擴充套件性,您需要隔離每個服務的職責。 因此,微服務被廣泛採用。 我們還利用服務註冊和負載均衡器將請求路由到適當的例項。
發布一系列龍卡,分享數百萬現金