【成爲架構師2-4】反向代理與DNS輪詢:接入層的架構演進

系列文章是博主對沈劍的《架構師訓練營》分享內容的個人筆記總結,原內容公衆號“成爲架構師”。

問題引入:

  1. nginx是2012年才流行起來的技術,在反向代理之前的怎麼對流量承受能力進行擴容呢?
  2. nginx成爲了瓶頸應該怎麼辦

1 DNS輪詢

最初的單體架構,流量直接打到唯一的一個web-server上:
在這裏插入圖片描述
tomcat只有1000QPS的抗壓能力,當流量增大時,在反向代理流行之前,解決方案就是引入DNS輪詢
在這裏插入圖片描述
DNS輪詢:就是將多個web-server的實際公網ip配置到域名之下,通過dns-server來將流量按照輪詢順序轉到對應ip的web-server上

DNS輪詢的優勢

  1. 支持擴展且成本低,主要增加機器和添加ip到域名即可
  2. 原先的系統不需要改造
  3. 負載均衡,dns可以保證每個節點是均衡的

DNS輪詢的劣勢

  1. 無法保證高可用,dns-server無法知道某一ip下的web-server是否可用,流量依舊會會被轉到這裏,這部分流量就會訪問失敗
  2. 擴容非實時,dns的解析生效有延遲
  3. 暴露過的的公網ip,安全性存在問題

2 反向代理

反向代理的優勢

  1. 對外屏蔽web-server,由nginx進行流行轉發
  2. 擴容是實時的,原有系統也無需變化

反向代理的問題

  1. nginx成爲單點,依舊有高可用問題
  2. 反向代理層增加了複雜性和時延(次要)

高可用的反向代理
keepalived
在這裏插入圖片描述
不足的是資源利用率只有50%,假設nginx的承受QPS爲10000,如果整個站點吞吐超過了nginx的上限,就需要轉到多層反向代理

3 多層反向代理

之前提到過,lvs和F5,lvs是實施在操作系統層面的,F5是在硬件層面的,性能一個比一個好,用它們來作爲nginx的方向代理就可以做到流量擴容
在這裏插入圖片描述
把lvs架在nginx上面作爲nginx反向代理,F5又在lvs的上面作爲反向代理,使用虛IP+keepalived來確保高可用。只有入口處需要這種方式來保證高可用,之後的下層和上層的結構,下層某一個節點掛了,上層都可以探測到將流量轉發到可用的節點上,所以不需要虛IP+keepalived的模式

假設此時的QPS上限達到了10w,因爲這是一個scale-up的方案,就始終會有明確的上限,這是由使用的工具本身決定的,要實現理論上的無限擴容,就必然需要scale-out的方案,這就又回到了最初的DNS輪詢

4 多層反向代理,加DNS輪詢

如果日PV達到了80億次,像百度、Google、淘寶,以及一些大一些的企業的網站他們的域名都不止對應一個IP,終點又是起點,我們依舊需要DNS輪詢
在這裏插入圖片描述
這種DNS輪詢方式是高可用的,因爲它的下游是高可用的

劍哥沒有提到的:

  1. 比如區域劃分,這就是dns解析服務區對應的服務區塊了,華中的歸華中,華東的歸華東,這是由地理位置決定的
  2. 可以使用dns輪詢 + nginx的模式

這一次劍哥分享了接入層的架構演進,依舊是乾貨滿滿的,下一篇將講述session的一致性問題,這個session是廣義的session,指的是用戶會話狀態的管理,不是單指web-server生產的session。

上一篇回顧:【成爲架構師2-3】反向代理:接入層擴容,負載均衡
下一篇更精彩:【成爲架構師2-5】維護session一致性的四種方案

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章