在熱點事件發生時,流量瞬間提升到 2~3倍甚至更高,最快的方式就是堆機器,但需要保證,在擴容了三倍的機器後,相應的系統也能支撐三倍的流量。
1、爲什麼提升擴展性會很複雜
集羣系統中,不同的系統分層上可能存在一些瓶頸點,這些瓶頸點制約着系統的橫向擴展能力,比如:系統的流量是每秒1000次請求,對數據庫的請求量也是每秒1000次,如果流量增加了10倍,雖然系統可以通過擴容正常服務,但是數據庫卻成了瓶頸。
如果多數據庫也進行擴容,存儲集羣中增加或者減少機器時,會涉及到大量數據的遷移,一般傳統的關係型數據庫都不支持。
站在整體的架構的角度,不僅僅是業務服務器的角度來考慮系統的擴展性,數據庫、緩存、依賴的第三方、負載均衡、交換機帶寬等都是系統擴展需要考慮的因素。
2、高可擴展行的設計思路
拆分是提升系統擴展性最重要的一個思路,將一個龐雜的系統拆分成獨立的,有單一職責的模塊。即將複雜問題簡單話。
- 存儲層的擴展性
- 業務層的擴展性
3、redis 擴展
redis擴展主要兩方面。主備方案以及集羣方案。
-
主備
用 redis 的 sentinel(哨兵)方案主要是解決 redis 主節點故障後的自動切換。它負責持續監控主從節點的健康,當主節點掛掉時,自動選擇一個最優的從節點切換爲主節點。 -
集羣方案
- codis
- edis官方提供的cluster。