系列文章是博主對沈劍的《架構師訓練營》分享內容的個人筆記總結,原內容公衆號“成爲架構師”。
目錄
1 單機遺留問題
上一篇討論了僞分佈式與垂直拆分的問題
垂直拆分,解除了子系統耦合,但是對於同一個垂直站點子系統,仍然是一個“單體架構”
集羣的實現,通常需要引入反向代理
2 反向代理,接入層擴容
用什麼做反向代理
- 軟件層面:nginx / apache
- 操作系統層面:LVS
- 硬件:F5
在這裏我們只談軟件層面的,OS與硬件層面感興趣的話可以百度或者Google,至於何爲反向代理這裏也不贅述了
反向代理解決了什麼問題
- 子web系統性能,不再受到單臺機器資源限制,可以擴展
- 子web系統,實現了高可用,僞集羣變爲真集羣
反向代理帶來了什麼新問題
- 多個web節點,負載如何分配(負載均衡問題)
- 反向代理層,如何保證高可用(反向代理高可用問題)
3 反向代理,負載均衡
負載均衡方法:
- 隨機,將請求random到web-server
- 輪詢,按照web-server 1-n的順序依次的分發請求
- 靜態權重輪詢,不同web-server之間的處理能力不同,性能好的權重大,會被轉發更多的請求
- 動態權重輪詢(後續討論),權重分配是動態的,而不是一個固定值
- 一致性哈希(後續討論),ip哈希之後落在hash環上,按照順時針方向找到對應的真實服務器ip或者虛擬節點
負載均衡抓手(如何維護session狀態一致性):
- 四層(轉發/交換)
- 七層(轉發/交換)
這來自於七層結構模型
第四層傳輸層:使用ip作爲負載均衡的抓手
第七層應用層(在TCP/IP模型中爲第五層):使用http請求中攜帶的參數作爲負載均衡的抓手
4 反向代理,高可用
虛擬IP + keepalived方案:
公網IP虛擬化,nginx集羣對外暴露的公網ip是一個虛擬ip,dns解析得到的是此虛擬ip
通過keepalived保證nginx的可用性,當其中一個nginx掛了,虛擬ip得到的請求會轉到另一個可用的nginx上
但是這種stand by的方式會引入新的問題:利用率的問題,圖中利用率只有50%,這將在後續進行討論。
5 兩個遺留問題
- 異構服務器的負載均衡,即前面的動態權重問題
- keepalived方案造成的其中一個nginx stand by利用率低下的問題
下一篇將介紹接入層的架構演進,如果nginx達到了流量上限應該怎麼辦?
上一篇回顧:【成爲架構師2-2】僞分佈式與垂直拆分:快速解決單機性能問題的實踐方案
下一篇更精彩:【成爲架構師2-4】反向代理與DNS輪詢:接入層的架構演進