熔斷
當某個服務呼叫慢或者有大量超時現象(過載),系統停止後續針對該服務的呼叫而直接返回,直至情況好轉才恢復呼叫。這通常是為防止造成整個系統故障而採取的一種保護措施,也稱過載保護。很多時候剛開始,可能只是出現了區域性小規模系統故障,但後來故障影響的範圍越來越大,最終導致了全域性性的後果。
限流對某個服務呼叫設定最高qps閾值,高於閾值的請求放棄呼叫直接返回。這種模式不能解決服務依賴的問題,只能解決系統整體資源分配問題,因為沒有被限流的請求依然有可能造成雪崩效應。
限流處理方案:
限流可以在應用層實現,也可以在接入層實現,通常使用redis + lua或者nginx + lua來實現。
降級當訪問量劇增致服務出現問題(如響應時間慢或不響應),或非核心服務影響到核心流程的效能時,仍要保證服務是可用的;即使是有損的,且有些服務是無法降級的,如加入購物車、結算等。降級可以是自動降級或人工降級,可以是讀服務降級或寫服務降級,還可以是多級降級。自動降級可根據系統負載、資源使用情況、呼叫超時、失敗重試次數、故障、限流閥值、sla(service-level agreement)等指標進行降級。
降級處理方案:
降級發生場景:
在大促活動期間,對某些占用了稀缺資源的次要頁面或片段呼叫降級,同時也對爬蟲返回靜態頁或者空資料,以保證核心業務正常開展。
隔離下圖展示了非隔離狀態下單個使用者請求被服務依賴i阻塞的情況:
下圖展示了非隔離狀態下服務依賴i阻塞了全部使用者請求,而其他使用者請求此時根本沒有機會接受執行緒池的處理:
對請求按型別劃分並分配不同數量的執行緒池來隔離處理,各自互不影響。當某個請求型別的執行緒池資源耗盡,則後續該型別請求可停止處理而直接返回,不影響其他請求型別執行緒的正常執行;這就避免了,非隔離狀態下慢服務阻塞所有使用者請求導致整個執行緒池處理能力下降。
hystrix 是乙個解決分布式系統互動超時處理和容錯的類庫,是 netflix 的眾多開源專案之一。hystrix 採用執行緒池和訊號量兩種隔離方式,來限制併發訪問量和故障擴散。
快取記憶體快取通常用來加db速資料訪問,但記憶體快取在大面積失效或負載過大或重啟之後,導致資料訪問穿透到db,依然可能引起雪崩效應的發生;靜態快取省去了服務端對動態內容的處理過程,又縮短了與使用者之間的距離,能快速響應使用者的請求。
系統設計之架構設計
架構設計這個詞聽的非常的多,但真正何謂架構設計呢?可能要你真的來講還真的講不太清楚,很多人都知道架構設計是對系統進行分層 分模組進行設計,但又有多少人知道這步應該怎麼去做呢,往往很多的programmer在剛進入架構設計這個領域的時候,受到以前做模組的那種影響,把自己的眼光限定到了具體的模組實現上去...
系統設計之架構設計
架構設計這個詞聽的非常的多,但真正何謂架構設計呢?可能要你真的來講還真的講不太清楚,很多人都知道架構設計是對系統進行分層 分模組進行設計,但又有多少人知道這步應該怎麼去做呢,往往很多的programmer在剛進入架構設計這個領域的時候,受到以前做模組的那種影響,把自己的眼光限定到了具體的模組實現上去...
架構設計之MVC
一 簡介 mvc model view controller,模型 檢視 控制器 是xerox parc在二十世紀八十年代為程式語言smalltalk 80發明的一種軟體設計模式,已被廣泛使用。一種軟體設計典範,用一種業務邏輯 資料 介面顯示分離的方法組織 將業務邏輯聚集到乙個部件裡面,在改進和個性...