High Availability & Elastic

ELB

定義:

Elastic load balancer是AWS提供一種自伸縮高可用的均衡負載器. 基本上ELB做了2件事情:

  • 可以將網絡請求按照一定算法分發給特定EC2 instance集群。
  • 對于集群中的instance進行health check,在轉發請求的僅會把請求分發給健康的instance從而保證高可用性。
分類:

按照ELB的服務對象可以分為:

  • internet-facing (public) ELB
    • 主要用于VPC邊界之外的用戶訪問的負載均衡
    • 創建ELB的同時會生成一個廣域網可訪問的DNS名
  • internal (private) ELB
    • 主要用戶VPC內的instance相互訪問的負載均衡
    • 創建ELB的同時會生成一個VPC內有效的DNS名

按照ELB的類型分可以分為:

  • Classic ELB
    • 7/4層均衡負載
    • 僅支持輪詢均衡負載算法
    • 支持Classic網絡和VPC網絡
    • 不支持Webstocket長鏈接
  • Application ELB
    • 7層均衡負載
    • 支持輪君負載算法,端口轉發算法,路徑轉發算法
    • 僅支持VPC網絡
    • 支持Websocket長鏈接
    • 支持target group。將ELB和特征集群解耦
    • 強制cross-zone balance, 所以對于Application ELB你必須給他最少2個處于不同AZ的subnet,并且每個AZ只能同時設置一個subnet
概念:
  • Listener
    ELB通過Listener (協議+端口號)來監聽接受到的請求。當客戶端發送一個請求到ELB (i.g http:80) ELB如果設定了相應的Listener則會處理這個請求(否則不做響應),Listener會維護2個連接, client-to-ELB and ELB-to-server。注意這兩個連接之間不是以流的形式來傳輸數據的,當client在發送請求的時候,只有當ELB接收完成了所有來自client端的數據才會將數據轉發給server端,而不是像流一樣接收一點傳一點
  • Idle Connection timeout
    根據上面說的Listener維護了2個連接,Idle Connection timeout 就是控制這2兩個連接的空閑超時時間的。當任何一個連接在指定時間內沒有接受數據,則Listener釋放連接。舉個例子,當client通過ELB向server發送一個文件上傳的請求的時候,首先會在client-to-ELB這個連接上傳輸數據,如果數據比較大傳輸的時間比較長,則可能會導致ELB-to-server這個連接一直空閑,一旦空閑時間達到了Idle Connection timeout,ELB就會釋放ELB-to-server的連接,從而導致server端會丟失這次client端的請求。
  • Connection draining
    你可以動態的從ELB的目標集群去動態的增加或移除instance, 增加還好說但移除會稍微有些復雜。當你從ELB de-register一個instance的時候,毫無疑問,ELB將不會在把新接受到的請求轉發給這臺instance去處理,但是已經接受到的請求呢?一個完整的請求都包含一個request和一個response,當你de-register一個instance的時候,如果一個請求已經接受但還沒來的及返回response,如果你暴力的直接close掉ELB-to-server的connection,則這個請求雖然被處理了但client端無法接受到response。所以Connection draining就是用來解決這一問題的,它允許你去設置一個時間,在這個時間內,即使你de-register了instance但是還保持連接存在,知道超過這個時間才close connection.
  • Sticky session
    ELB使用最基本的輪詢均衡負載算法,這塊會有一個問題。一個客戶的2個請求會被分配到不同的機器上,這會導致session丟失。例如:你的登陸請求被ELB分配給了機器A, 機器A在session中保存了你的登陸信息,但是你請求其他頁面的請求被ELB分配給了機器B而機器B的session中沒有你的登陸信息,則會跳轉登陸頁面讓你再次登陸。Sticky session可以保證相同客戶的請求始終被分配到一臺固定的server直到session過期或者cookie被清空。
  • Cross zone balance
    當你的ELB對應多個處于不同AZ的subnet的時候,請求會被隨機的分配到不同的AZ的instance去處理

CloudWatch

定義

CloudWatch是用于對各種AWS資源進行監控的一個服務。CloudWatch由下面幾個組件組成

  • Metric
    Metric是對于AWS資源被監控的一個維度(如EC2 instance的CPU使用率, ELB單位時間接收request的數量).
    - Metric是資源級別的(具體到一個EC2 instance, 一個ASG,一個ELB)

  • Alarm
    Alarm有 3種狀態

    • ALARM - 告警
    • OK - 正常態
    • INSUFFICIENT - 采樣數據不足

    Alarm由3個部分組成

    • 一個Metric
    • 一個Rule,定義獲取Metric data的間隔時間(period), 采樣數量(periods)和閥值(i.e: CPU>=50%)
    • 一個Action, 當alarm被觸發的時候要采取的動作
      - Notification
      - ASG actions
      - EC2 actions
  • Event
    CloudWatch還提供事件系統,當一些服務的狀態發生變化會拋出事件,然后允許你去定義相應的動作。感覺和Alarm非常相似,但總結來說有如下不同

Alarm Event
資源級別的,你僅能給某個資源創建Alarm 服務級別你可以給一類資源創建Event
有詳細的采樣配置和閥值 針對于籠統的狀態變化
Alarm觸發的action都是AWS預定義的 Event支持Lambda, 對于事件的處理更加靈活
  • Log

ASG

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,973評論 19 139
  • 第一章 Nginx簡介 Nginx是什么 沒有聽過Nginx?那么一定聽過它的“同行”Apache吧!Ngi...
    JokerW閱讀 32,803評論 24 1,002
  • 摘自: https://my.oschina.net/hosee/blog/711632摘要: 本文主要說明RPC...
    holy_z閱讀 1,160評論 0 7
  • 互聯網架構基礎知識 一、網站常見架構 負載層 頁面緩存層 web層 數據層 二、運維法則 緩存為王 盡量在前端(緩...
    魏鎮坪閱讀 4,856評論 0 9
  • 所謂的紅顏與藍顏,就是一方蠢蠢欲動,另一方佯裝不和。或者雙方都樂于打著友誼的旗號玩曖昧。 男女之間有沒有真正的友誼...
    煙行閱讀 572評論 9 6