對於一個高可用服務,很重要的一個設計就是降級開關。在設計降級開關時,主要有如下思路:
nginx
1.開關集中化管理:經過推送機制把開關推送到各個應用。後端
2.可降級的多級服務:好比服務調用降級爲只讀本地緩存,只讀分佈式緩存,只讀默認降級數據(如庫存狀態默認有貨)緩存
3.開關前置化:如架構是nginx --> tomcat,能夠將開關前置到nginx接入層,在nginx層作開關,請求流量不回源後端tomcat應用或者只是一小部分流量回源。tomcat
4.業務降級:當高併發流量來襲,在電商系統大促設計時保障用戶能下單,能支付是核心要求,並保障數據最終一致性便可。這樣就能夠把一些同步調用改成異步調用,優先處理高優先級數據或特殊特徵的數據,合理分配進入系統的流量,以保證系統可用。架構
限流的目的是防止惡意請求流量、惡意攻擊,或者防止流量超出系統峯值。能夠考慮如下思路:併發
1.惡意請求流量只訪問到cache。
異步
2.對於穿透到後端應用的流量能夠考慮使用nginx的limit模塊處理。分佈式
3.對於惡意IP能夠使用nginx deny進行屏蔽。
高併發
這些操做的原則是限制流量穿透到後端薄弱的應用層。spa
版本化的目的是實現可審計可追溯,而且可回滾。當程序或者數據出錯時,若是有版本化機制,那麼就能夠經過回滾恢復到最近一個正確的版本,好比事務回滾、代碼庫回滾、部署版本回滾、數據版本回滾、靜態資源版本回滾等。經過回滾機制可保證系統某些場景下實現高可用。