1. 程式人生 > >JavaWeb開發設計(三)可用性方案設計

JavaWeb開發設計(三)可用性方案設計

可用性方面經驗不足,暫不做總結。

可以先看這篇文章 https://blog.csdn.net/hustspy1990/article/details/78008324

簡單列一下要點:

 

1、常見高可用問題和解決措施

1)機器、機房故障。通過硬體冗餘、多機房互備解決。

2)bug或誤操作。通過提升研發質量、測試質量、灰度釋出等方式解決。

3)突發流量。通過壓測提供系統頂流量能力,外部攻擊需要做防犯,另外最好有熔斷機制。

4)容量不足。進行容量規劃、容量預警,可通過限流、降級等解決。

5)依賴服務故障。對於弱依賴降級解耦,對於強依賴切換到備用方案。

 

2、具體的高可用實現方案

1)擴充套件

擴充套件分為垂直擴充套件和水平擴充套件,垂直擴充套件是指同一邏輯單元內自擴充套件,擴充套件能力有限,如DB垂直分庫分表;水平擴充套件則是通過增加多個邏輯單元,擴充套件能力強,會增加更多維護成本,如Mysql的主從、應用伺服器叢集。

2)隔離

隔離級別按粒度從小到大,可以分為執行緒池隔離、程序隔離、模組隔離、應用隔離、機房隔離。在資料庫的使用中,還經常用到讀寫分離。 

3)解耦

鬆耦合使得系統的單點故障波及範圍可以儘量小。面向介面的設計是鬆耦合的,只關注介面,不關注實現細節。另外,同步轉非同步也是解耦的一種方式。

4)限流

一個系統的處理能力是有上限的,當服務請求量超過處理能力,通常會引起排隊,造成響應時間迅速提升。並且由於系統過載,處理速度也會變慢,甚至引起雪崩。常見的限流演算法有:漏桶、令牌桶、滑動視窗計數等。

5)降級

業務降級,是指犧牲非核心的業務功能,保證核心功能的穩定執行。在後臺通過開關控制,降級部分非主流程的業務功能,減輕系統依賴和效能損耗,從而提升叢集的整體吞吐率。

6)熔斷

為什麼要有熔斷?很多時候剛開始可能只是系統出現了局部的、小規模的故障,然而由於種種原因,故障影響的範圍越來越大,最終導致了全域性性的後果。

7)釋出相關

在測試、灰度、回滾、歷史資料等方面做考慮。