「AWS」部署全球化WEB服務

AWS全稱Amazon Web Service,和Amazon的關係就像阿里雲和淘寶的關係。大家都是電商起家,一個賣書,一個為商家提供線上商鋪。做著做著,用戶越來越多,業務需求越來越複雜,要求也越來越苛刻,面對的技術挑戰隨之越來越大。比如巨大的流量會在促銷活動時,一股腦兒湧過來。用戶遍佈在世界各地,如何給不同區域的用戶提供良好的用戶體驗。如何按照需求動態的調整服務器的配備,避免浪費,等等。這些統統都是他們自己面對過的問題。然後這些聰明的工程師們想到了辦法,並完美的解決了這些問題。這是起源。

在軟件領域,大家面對的業務場景多多少少都會不太一樣,但技術方案大部分卻是類似的。如何讓這些沉澱下來的技術經驗發揮更大的價值,而這一部分的需求又是如此的大,“歪打正著”。這是AWS們的由來。

「AWS」部署全球化WEB服務 - 需求分析及基礎設施架構設計

按照二八定律,和Amazon有同樣高要求的服務畢竟是少數,絕大多數的服務並沒有那麼複雜的應用場景。今天我們就來看一看用AWS,如何滿足大部分Web服務對基礎設施的需求:

  • 自定義域名,默認HTTPS
  • 為用戶提供穩定可靠的服務,七層負載均衡
  • 服務可以按需拓展,水平拓展
  • 保證服務的安全性,公有服務和私有服務的隔離和交互

自定義域名,默認HTTPS

互聯網聯接了世界,而域名則是這世界的入口。拿sunwei.xyz舉例,用AWS的服務支持,如下所示:

「AWS」部署全球化WEB服務 - 需求分析及基礎設施架構設計

DNS

  1. 瀏覽器輸入https://sunwei.xyz
  2. DNS解析器將域名發送給DNS根name server,進行查詢
  3. DNS根name server會告訴DNS解析器,根據該域名的特點,更多詳細信息請找.xyz TLD(Top-level Domain) name server查詢
  4. DNS解析器將域名查詢請求再次發給.xyz TLD
  5. TLD name server查詢後告知現在sunwei.xyz由AWS Route53提供解析服務。當然,這裡需要我提前配置好。
  6. DNS解析器將服務再次發給AWS的Route53 name server進行查詢
  7. Route53根據當前用戶的的流量政策(Traffic Policies)進行流量分發,如上圖所示最終返回的是37.68.44.56。這裡也可以理解為第四層,也就是網絡層負載均衡。順帶介紹一下常見的幾種策略:
    1. 延遲策略(Latency-based) -- 根據區域最短延遲,響應用戶請求
    2. 地理策略(Geo DNS) -- 根據用戶地理位置,進行路由
    3. 失敗策略(DNS failover) -- 將用戶請求路由到可正常響應的服務器,避免失敗
    4. 輪詢策略(Weighted round-robin load balancing) -- 將用戶請求,以輪詢的方式,依次分發給不同的服務器
  8. 瀏覽器查詢到服務ip地址,準備獲取內容
  9. 當請求抵達服務器時,這裡用的是AWS ALB(Application Load Balance),應用程序負責均衡服務會將請求分發給對應的服務
  10. 最終根據http請求,返回對應的內容

如果要支持HTTPS?根據 ,HTTPS屬於應用層,Route53只是負責網絡層,自然對應的服務不應該Route53,而是ALB。AWS有提供Certificate Manager服務提供免費的證書,也可以參考 這篇文章來進行更直觀的理解。畢竟知其然,並知其所以然才能做計算機的好朋友嘛。

為用戶提供穩定可靠的服務,七層負載均衡

「AWS」部署全球化WEB服務 - 需求分析及基礎設施架構設計

ALB

根據上圖,我們看到了針對sunwei.xyz的服務分佈。可以看出:

  • 有兩臺ALB,第一臺管理了2個服務,第二臺管理了8個服務,根據策略,我們可以對流量按不同的策略進行分發:1,50/50,分別分發給這兩臺ALB。2,20/80,與實際情況做相應的匹配。
  • 兩臺ALB的服務分別在兩個不同的空間中,如圖,一個是Zone A,一個是Zone B。這樣做的好處就是雞蛋不要放在一個籃子裡。

那麼ALB是如何做到精準投遞的呢

「AWS」部署全球化WEB服務 - 需求分析及基礎設施架構設計

  • Listener(監聽者):是主要的流量管理對象,可以配置多條轉發規則,如通過路徑配置,請求https://sunwei.xyz/orders到達時,根據多條rule的優先級按序匹配,如path相匹配/orders,優先級為1,優先處理,響應動作(action)為轉發(forward),這時就會將請求按轉發規則轉發出去
  • Target Group(目標群組):根據服務的特性,劃分群組,方便轉發時定位服務。通常需要指定health check(健康檢查),會根據服務的健康情況,來決定服務是否可達。還需要定義service protocol(服務協議,本例為http)和container port(容器端口) - 這裡用容器化ECS為例,這是外部訪問服務的基礎

服務可以按需拓展,水平拓展

流量已經清晰的知道從哪兒來到哪兒去了,那麼接下來就是服務的可靠性,我們可以按需來配置拓展規則:

「AWS」部署全球化WEB服務 - 需求分析及基礎設施架構設計

Scalling Group(可拓展群組):

  • Capability(能力): 可以指定最大,最小的服務器數量。數量越多,可承載的流量就越大。
  • Policy(政策): 可以更加明確不同情況下服務器是新啟還是關停;在服務啟動的過程中多長時間不受政策的干擾,也就是冷靜時長,以避免陷入正在準備,一直響應政策的死循環
  • Alarm(預警): 當碰到了以下的實際預警時,需要能採取措施,消除預警。光預警,沒有行動是沒有意義的。比如當cpu的使用量到達一定值時,需要採取行動

保證服務的安全性,公有服務和私有服務的隔離和交互

可以看到服務的可靠性已經得到了保證,那服務的安全性呢?哪些服務因該是公有可訪問的,而哪些服務是不因該被暴露到公網的?

「AWS」部署全球化WEB服務 - 需求分析及基礎設施架構設計

入網:

  • 公網流量,首先經過Internet Gateway,經過路由器Router的轉換,通過EIP(Elastic IP)訪問
  • 公網流量不能直接訪問私有子網(Private Subnet)裡的服務

出網:

  • 公有子網(public subnet),直接通過路由器Router,通過Internet Gateway訪問外網
  • 私有子網(private subnet),不能直接訪問外網,需要通過路由器Router,將自己請求投遞到NAT gateway(網絡地址轉換網關),再像公有子網的服務一樣,通過路由器,經Internet Gateway發出

以上流程還有一個專有的名詞,叫VPC(Virtual Private Cloud - 虛擬私有云),是AWS用來協調管理網絡的通用組件。

可以看出AWS提供了所有我們需要的網絡服務,來滿足我們的需求。如何管理好這些服務將會是另一個話題,如AWS推出的CloudFormation,我們可以通過這個服務,很方便的對這些基礎設施進行管理,就像現在DevOps所推崇的IaC - Infrastructure as code(基礎設施即代碼)。


待續

「AWS」部署全球化WEB服務 - 需求分析及基礎設施架構設計


分享到:


相關文章: