Java 多線程 高可用原則


  高可用原則

  1 降級

  降級開關的設計思路如下:

  1. 集中管理開關:把開關推送到各個應用。

  

  2. 可降級的多級讀服務:比如服務調用降級為只讀本地緩存、只讀分布式緩存、只讀默認降級數據(如庫存狀態默認有貨)。

  

  3. 前置開關:例如,架構是Nginx->Tomcat,可以將開關前置到Nginx接入層,在Nginx層做開關,請求流量回源后端應用或者只是一小部分流量回源。

  4. 業務降級:當高並發流量來襲,設計電商系統大促時保證用戶能下單和能支付是核心要求,並保證數據最終一致性即可。可以把一些同步調用改成異步調用,優先處理高優先級數據或特殊特征的數據,合理分配進入系統的流量,以保證系統可用。

  2 限流

  限流的目的是防止惡意請求流量、惡意攻擊以及流量超出系統峰值。實現思路如下:

  1. 惡意請求流量只訪問到cache。

  2. 對於穿透到后端應用的流量,可以考慮使用Nginx的limit模塊處理。

  3. 對於惡意IP,可以使用nginx deny進行屏蔽。

  原則上限制流量穿透到后端薄弱的應用層。

  3 切流量

  如果某台服務器掛了,需要切流量,切換方式如下:

  1. DNS:切換機房入口。

  2. HttpDNS:主要在APP場景下,客戶端分配好流量入口后繞過運營商LocalDNS並實現更精准流量調度。

  3. LVS/HaProxy:切換故障的Nginx接入層。

  4. Nginx:切換故障的應用層。

  4 可回滾

  版本化的目的是實現可審計可追溯,並且可回滾。當程序或數據出錯時,如果有版本化機制,那么可以通過回滾恢復到最近一個正確的版本,比如事務回滾和代碼庫回滾。

 

  通過負載均衡和反向代理實現分流,通過限流保護服務免受雪崩之災,通過降級實現部分可用和有損服務,通過隔離實現故障隔離,通過設置合理的超時與重試機制來避免請求堆積造成雪崩,通過回滾機制快速修復錯誤版本。上述原則可以實現系統高可用。

 

  參考資料

  《億級流量網站架構核心技術》 P10-12


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM