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