SAA-C03-002_EC2_04_AWS Fundamentals
## Scalability & High Availability
- 可擴(kuò)展性意味著應(yīng)用程序或系統(tǒng)可以通過 adapting(適應(yīng))來處理更大的負(fù)載
- 有兩種可擴(kuò)展性:
- **Vertical Scalability**(垂直可擴(kuò)展性):
- 增加實(shí)例大小
- t2.micro → t2.large
- 常見于非分布式系統(tǒng)(數(shù)據(jù)庫)
- RDS,ElasticCache可以水平擴(kuò)展
- 垂直擴(kuò)展有上限(硬件限制)
- **Horizontal Scalability**(水平可擴(kuò)展性)
- 增加實(shí)例數(shù)量
- 常見于分布式系統(tǒng)
- 在web應(yīng)用/當(dāng)前應(yīng)用程序中很常見
- 由于云服務(wù)的存在,很容易進(jìn)行水平擴(kuò)展
- **High Availability**(高可用性)
- 通常與水平擴(kuò)展同時(shí)使用
- 高可用性意味著至少在兩個(gè) AZ 中運(yùn)行程序/系統(tǒng)
- 高可用性的目的是在數(shù)據(jù)丟失時(shí)可以幸存
- 高可用性可能是被動(dòng)的(RDS Multi AZ)
- 也可以是活躍的(用于水平擴(kuò)展)
* * *
## Scalability & High Availability for EC2
- 垂直縮放:增加實(shí)例大?。╯cale up/down)
- 最小從 t2.nano(0.5GB RAM,1 vCPU) 到最大 u-12tb1.metal(12.3TB RAM,448 vCPU)
- 水平縮放:增加實(shí)例數(shù)量(scale out/in)
- Auto Scaling Group(自動(dòng)縮放組)
- Load Balancer(負(fù)載均衡器)
- 高可用性:跨 AZ 運(yùn)行同一程序的多個(gè)實(shí)例
- Auto Scaling Group multi AZ
- Load Balancer multi AZ
* * *
* * *
## Load Balancer
- 負(fù)載平衡將流量轉(zhuǎn)發(fā)到下游的多個(gè)服務(wù)器(例:EC2 Instance)
<br>
user1 ↘ ------------------------------- ↗ EC2 Instance
user2 → Elastic Load Balancer → EC2 Instance
user3 ↗ ------------------------------- ↘ EC2 Instance
<br>
* * *
## Why use a load balancer
- 將負(fù)載分散在多個(gè)下游實(shí)例
- 將單點(diǎn)訪問點(diǎn)(DNS)暴露給應(yīng)用程序
- 定期對(duì)實(shí)例進(jìn)行**運(yùn)行狀況檢查**
- 為網(wǎng)站提供 SSL 終止(HTTPS)
- 用 cookies 強(qiáng)制粘性
- 跨區(qū)域高可用性
- 將公共流量與私有流量分開
* * *
## Why use an Elastic Load Balancer
- 彈性負(fù)載均衡器是一種托管負(fù)載均衡器(managed load balance)
- AWS 保證它正常工作
- AWS 負(fù)責(zé)升級(jí),維護(hù)和高可用性
- AWS 僅提供幾個(gè)配置旋鈕(knobs)
- 設(shè)置自己的負(fù)載均衡器得到成本更低,但是會(huì)花費(fèi)更多時(shí)間和努力
- 與多個(gè) AWS 產(chǎn)品/服務(wù)繼承
- EC2,EC2 自動(dòng)縮放組,Amazon ECS
- AWS Certificate Manager(ACM = AWS 證書管理器),CloudWatch
- Route 53,AWS WAF,AWS Global Accelerator
* * *
## Health Check
- 運(yùn)行 Health Check(**運(yùn)行狀況檢查**)對(duì)負(fù)載均衡器至關(guān)重要
- **運(yùn)行狀況檢查**使負(fù)載均衡器能夠知道他轉(zhuǎn)發(fā)的流量的實(shí)例是否可以回復(fù)請(qǐng)求
- 在端口和路線上進(jìn)行**運(yùn)行狀況檢查**(/health is common 健康狀況常見)
- 如果響應(yīng)不是 200(OK),則實(shí)例不健康
<br>
ELB → Health Check [Protocol:HTTP, Port:4567, Endpoint:/health]→ EC2 Instance
* * *
## Type of load balancer on AWS
- AWS 有 4種 托管負(fù)載均衡器
- Classic Load Balancer(經(jīng)典負(fù)載均衡器)(v1 - old generation) - 2009 - CLB
- HTTP, HTTPS, TCP, SSL(secure TCP)
- Application Load Balancer(應(yīng)用負(fù)載均衡器)(v2 - new generation) - 2016 - ALB
- HTTP, HTTPS, WebSocket
- Network Load Balancer(網(wǎng)絡(luò)負(fù)載均衡器)(v2 - new generation) - 2017 - NLB
- TCP, TLS(secure TCP), UDP
- Gateway Load Balancer(網(wǎng)關(guān)負(fù)載均衡器) - 2020 - GWLB
- Operates at layer 3(Network layer) - IP Protocol
- 建議使用新一代負(fù)載均衡器,有更多功能,CLB已被取消
- 一些負(fù)載均衡器可以設(shè)置為 internal(private)或 external(public)ELBs
* * *
## Load Balancer Security Groups
Users [HTTP/HTTPS from anywhere]→ Load Balancer[HTTP Restricted to load balancer] → EC2
Load Balancer Security Groups:
|Type|Protocol|Port Range|Source|Description|
|---|---|---|---|---|
|HTTP|TCP|80|0.0.0.0/0|Allow HTTP from anyhwere|
|HTTPS|TCP|443|0.0.0.0/0|Allow HTTPS from anywhere|
<br>
Application Security Group: Allow traffic only from Load Balancer
|Type|Protocol|Port Range|Source|Description|
|---|---|---|---|---|
|HTTP|TCP|80|sg-054vdr405dsfd(load-balancer)|Allow HTTP from anywhere|
<br>
* * *
## Classic Load Balancers(v1)
- 支持 TCP(Layer 4), HTTP & HTTPS(Layer 7)
- Health checks(**運(yùn)行狀況檢查**)基于 TCP 或 HTTP
- Fixed hostname(固定主機(jī)名):XXX.region.elb.amazonaws.com
<br>
Client [Listener] → CLB [internal] → EC2
<br>
* * *
## Application Load Balancer(V2)
- 應(yīng)用程序負(fù)載均衡器作用于第七層(HTTP)
- 跨機(jī)器(目標(biāo)組)對(duì)多個(gè)HTTP應(yīng)用程序進(jìn)行負(fù)載均衡
- 對(duì)同一機(jī)器上的多個(gè)應(yīng)用程序進(jìn)行負(fù)載平衡(例:容器 Containers)
- 支持 HTTP/2 和 WebSocket
- 支持重定向(例:從HTTP到HTTPS)
- 將列表路由到(Routing tables)不同目標(biāo)組:
- 基于URL路徑(expmple.com/users & example.com/posts)
- 基于URL主機(jī)名(one.example.com & other.example.com)
- 基于查詢字符串,Headers(標(biāo)頭)(example.com/users?id=123&order=false)
- ALB 適合微服務(wù)和基于容器的應(yīng)用(例:Docker 和 Amazon ECS)
- 具有端口映射功能,可以重定向到ECS中的動(dòng)態(tài)端口
- 相比之下,每個(gè)應(yīng)用程序需要多個(gè)經(jīng)典負(fù)載均衡器
* * *
## Application Load Balancer(v2)HTTP Based Traffic
<br>
www [Router/user] → External Application Load Balancer [HTTP] → Target Group for User application?
www [Route/search] → External Application Load Balancer [HTTP] → Target Group for Search application
<br>
* * *
## Application Load Balancer(v2) Target Groups
- EC2 實(shí)例(可由自動(dòng)縮放組管理) - HTTP
- ECS 任務(wù)(由 ECS 本身管理) - HTTP
- Lambda 函數(shù) - HTTP 請(qǐng)求轉(zhuǎn)換為 JSON 時(shí)間
- IP 地址 - 必須是 private IP
- ALB 可以路由到多個(gè)目標(biāo)組
- **運(yùn)行狀況檢查**在目標(biāo)組級(jí)別
* * *
## Application Load Balancer(v2)Query String/Parameters Routing
<br>
www ← [Request] → External Application Load Balancer(v2) ← [?Platform=Mobile] →Target Group1 :AWS - EC2 based
-------------------------------------------------------------------------------- ↖ [?Platform=Desktop] →Target Group2 :On-premises - Private IP routing
<br>
* * *
## Application Load Balancer(v2)Good to Know
- Fixed hostname(XXX.region.elb.elb.amazonaws.com)
- 應(yīng)用程序無法直接看到客戶端的 IP 地址
- 客戶端的真實(shí) IP 被插入到標(biāo)題 **X-Forwarded-For**
- 還可以得到端口(X-Forwarded-Port)和 Proto(X-Forwarded-Proto)
<br>
Client IP 12.34.56.78 ←→ Connection termination ← Load Balancer IP(Private IP) → EC2 Instance
<br>
* * *
* * *
## Network Load Balancer(v2)
- 網(wǎng)絡(luò)負(fù)載均衡器(第四層)允許:
- 轉(zhuǎn)發(fā) TCP & UDP 流量到實(shí)例
- 每秒處理百萬個(gè)請(qǐng)求
- 更少的延遲 ~100ms(ALB為400ms)
- NLB 在每個(gè) AZ 都有一個(gè)靜態(tài) IP,且支持分配彈性 IP(有助于將特定 IP 列入白名單)
- NLB用于極端性能,TCP 或 UDP 的流量
- 未包含在 AWS 的免費(fèi)層
* * *
## Network Load Balancer(v2) TCP(Layer 4) Based Traffic
<br>
WWW ←[TCP+Rules]→External Network Load Balancer(v2)← [TCP] → Target Group for Users application
WWW ←[TCP+Rules]→--------------------------------------------------- ← [HTTP] → Target Group for search application
<br>
* * *
## Network Load Balancer - Target Groups
- EC2 實(shí)例
- IP 地址 - 必須是私有 IPs
- ALB
- 運(yùn)行狀況檢查(支持 TCP,HTTP 和 HTTPS 協(xié)議)
<br>
- NLB 連接目標(biāo)組:
- EC2 ← NLB → EC2(Target Group:EC2 Instances)
- EC2 ← NLB → 10.0.4.1(Target Group:IP Addresses)
- NLB → ALB(Target Group:Application Load Balancer)
<br>
* * *
* * *
## Gateway Load Balancer
- 在 AWS 中部署,擴(kuò)展和管理第三方網(wǎng)絡(luò)虛擬設(shè)備
- Example:
- Firewalls(防火墻)
- Instrusion Detection(入侵檢測(cè)和預(yù)防系統(tǒng))
- Deep Packet Inspection Systems(深層數(shù)據(jù)包檢查系統(tǒng))
- Payload manipulation(有效載荷操作)
- 在 Layer 3(網(wǎng)絡(luò)層) - 運(yùn)行 IP 數(shù)據(jù)包
- 結(jié)合以下功能:
- Transparent Network Gateway(透明網(wǎng)關(guān)) - 所有流量的單次進(jìn)出
- Load Balancer(負(fù)載均衡器) - 將流量分配到虛擬設(shè)備
- 在端口 6081 上使用 **GENEVE** 協(xié)議
<br>
Users(source) → Route Table → GWLB →Target Group - 3rd Party Security Virtual Appliances → GWLB → Application(destination)
<br>
* * *
## Gateway Load Balancer - Target Groups
- EC2 實(shí)例
- IP 地址 - 必須是私有 IPs
<br>
- GWLB 連接目標(biāo)組:
- EC2 ← GWLB → EC2(Target Group:EC2 Instances)
- EC2 ← GWLB → 10.0.4.21(Target Group:IP Addresses)
<br>
* * *
* * *
## Sticky Sessions(粘性會(huì)話)(Session Affinity)
- 可以實(shí)現(xiàn)粘性,以便同一客戶端始終重定向到負(fù)載均衡器后面的同一實(shí)例
- 適用于 CLB 和 ALB
- 用于粘性的 Cookie 有可控的過期時(shí)間
- 用例:確保用戶不會(huì)丟失會(huì)話數(shù)據(jù)
- 啟用粘性可能會(huì)給后端 EC2 實(shí)例得到負(fù)載帶來不均衡
* * *
## Sticky Sessions - Cookie Names
- Application-based Cookies(基于應(yīng)用程序的 cookies)
- 自定義 cookie
- 由 target 生成
- 包含應(yīng)用程序所需的任何自定義屬性
- 必須為每個(gè)目標(biāo)組單獨(dú)指定 Cookie 名稱
- 不要使用 AWSALB, AWSALBAPP 或 AWSALBTG(保留給ELB使用)
- 應(yīng)用程序 cookie
- 由負(fù)載均衡器生成
- Cookie 的名稱為 AWSALBAPP
- Duration-based Cookies(基于持續(xù)時(shí)間的 cookies)
- 由負(fù)載均衡器生成
- Cookie 名稱:
- ALB:AWSALB
- CLB:AWSCLB
* * *
* * *
## Cross-Zone Load Balancing
- **有**跨區(qū)域負(fù)載平衡:每個(gè)負(fù)載均衡器勢(shì)力在所有 AZ 的所有實(shí)例中**均勻分布**
- AZ1:10+10
- AZ2:10+10+10+10+10+10+10+10
- **沒有**跨區(qū)域負(fù)載平衡:先按 AZ 均分后,再進(jìn)行均勻分布
- AZ1:25+25
- AZ2:6.25+6.25+6.25+6.25+6.25+6.25+6.25+6.25
- ALB
- 默認(rèn)啟用(可以在 TargetGroup 級(jí)別禁用)
- AZ 間數(shù)據(jù)不收費(fèi)
- NLB & GWLB
- 默認(rèn)不啟用
- AZ 間數(shù)據(jù)收費(fèi)
- CLB
- 默認(rèn)不啟用
- 啟用則 AZ 間數(shù)據(jù)不收費(fèi)
* * *
* * *
## SSL/TLS - Basics
- SSL 證書允許在傳輸過程中對(duì)客戶端和負(fù)載均衡器之間的流量進(jìn)行加密(in- flight encryption)
- SSL 是指 Secure Sockets Layer,用于加密連接
- TLS 是指 Transport Layer Security,這是較新的版本
- 現(xiàn)階段常用 TLS 但是同樣被稱為SSL
- Public SSL 證書由 Certificate Authorities(CA)頒發(fā)
- Comodo, Symantec, GoDaddy, GlobalSign, Digicert, Letsencrypt, ...
- SSL 證書由到期時(shí)間(可以設(shè)置),必須被續(xù)訂更新
* * *
## Load Balancer - SSL Certificates
<br>
users ← HTTPS(encrypted) → Load Balancer ← HTTP Over private VPC → EC2 Instance
<br>
- 負(fù)載均衡器使用 X.509證書(SSL/TLS 服務(wù)器證書)
- 可以使用 ACM(AWS Certificate Manager)管理證書
- 可以創(chuàng)建上傳自己的證書
- HTTPS listener:
- 必須指定默認(rèn)證書
- 可以添加可選的證書列表來支持多個(gè)域(multiple domains)
- 客戶端可以使用 SNI(Server Name Indication)來指定他們到達(dá)的主機(jī)名
- 能夠制定安全策略來支持舊版本的 SSL/TLS(legacy clients)
* * *
##? SSL - Server Name Indication(SNI)
- SNI解決了將多個(gè)SSL證書加載到一臺(tái)Web服務(wù)器的問題(為多個(gè)網(wǎng)站提供服務(wù))
- 這是一個(gè)更新協(xié)議,要求客戶端在初始SSL握手時(shí)指示目標(biāo)服務(wù)器的 hostname(主機(jī)名)
- 服務(wù)器將找到正確的證書,或返回默認(rèn)證書
- Note:
- 僅適用于 ALB 和 NLB(新一代),Cloudfront
- 不適用于 CLB(舊一代)
<br>
Client → ALB → Use the correct SSL cert1(Domain1.example.comm) → ALB → Target group for Domain1.example.com
------------------ ↘ Use the correct SSL cert2(www.mycorp.com) ----------↗ ----- ↘ Target group for www.mycorp.com
<br>
* * *
## ELB - SSL Certificaties
- CLB(v1)
- 僅支持一個(gè) SSL 證書
- 必須為具有多個(gè) SSL 證書的多個(gè) Hostname 使用多個(gè) CLB
- ALB(v2)
- 支持具有多個(gè) SSL 證書的多個(gè) Listeners(監(jiān)聽器)
- 使用服務(wù)器名稱指示(SNI)
- NLB(v2)
- 支持具有多個(gè) SSL 證書的多個(gè) Listeners(監(jiān)聽器)
- 使用服務(wù)器名稱指示(SNI)
* * *
## Connection Draining(連接耗盡)
- 功能名稱:
- 連接耗盡 - 適用于 CLB
- 注銷延遲 - 適用于 ALB & NLB
- 在實(shí)例注銷或不健康的情況下給予完成 in-flighr requests(機(jī)上請(qǐng)求)的時(shí)間
- 停止向正在注銷的 EC2 實(shí)例發(fā)送新請(qǐng)求
- 1 - 3600秒注銷延遲時(shí)間(默認(rèn) 300秒)
- 可以禁用(設(shè)置值為 0秒)
- 如果請(qǐng)求很短,應(yīng)設(shè)置更小的值
* * *
* * *
## Auto Scaling Group
?- 在現(xiàn)實(shí)生活中,網(wǎng)站和應(yīng)用程序上的負(fù)載可能會(huì)發(fā)生變化
?- 在云端,可以非??焖俚膭?chuàng)建刪除服務(wù)器
?- ASG(自動(dòng)縮放組)的目標(biāo)是:
- 擴(kuò)展(添加 EC2 實(shí)例)以匹配增加的負(fù)載
- 縮放(刪除 EC2 實(shí)例)以匹配減少的負(fù)載
- 確保我們有 minimum 和 maximum 的 EC2 實(shí)例正在運(yùn)行
- 自動(dòng)將新實(shí)例注冊(cè)到負(fù)載均衡器
- 重新創(chuàng)建 EC2 實(shí)例,以防之前的實(shí)例被終止(例:不健康實(shí)例)
- ASG 是免費(fèi)的(只需為基礎(chǔ) EC2 實(shí)例付費(fèi))
## Example
<br>
|Minimum Capacity|Desired Capacity|Maximum Capacity|
|---|---|---|
|EC2 EC2|EC2 EC2|EC2 EC2 EC2 EC2|
|不少于2個(gè)|需要4個(gè)|最多可擴(kuò)展到8個(gè)|
<br>
* * *
## Auto Scaling Group in AWS with Load Balancer
<br>
Users → ELB (可以檢查 EC2 的 Health Situation)→ ASG(N個(gè) EC2)
<br>
* * *
## ASG Attributes(ASG 設(shè)定值)
- 啟動(dòng)模板(不建議使用舊的啟動(dòng)配置)
- AMI + Instance Type
- EC2 用戶數(shù)據(jù)
- EBS卷
- Security Group
- SSH Key Pair
- EC2 實(shí)例的 IAM Roles
- Network + Subnet Information
- 負(fù)載均衡器信息
- Min Size / Max Size / Initil Capacity(初始容量)
- 縮放策略
* * *
## Auto Sacling - CloudWatch Alarms & Scaling(CloudWatch 警報(bào)與縮放)
- 可以根據(jù) CloudWatch 警報(bào)擴(kuò)展 ASG
- 警報(bào)監(jiān)控指標(biāo)(平均 CPU 或自定義指標(biāo))
- 為整體 ASG 實(shí)例計(jì)算平均 CPU 的那個(gè)指標(biāo)
- 根據(jù)警報(bào):
- 可以創(chuàng)建擴(kuò)展策略(增加實(shí)例數(shù)量)
- 可以創(chuàng)建縮放策略(減少實(shí)例數(shù)量)
* * *
## ASG - Dynamic Scaling Policies(動(dòng)態(tài)縮放策略)
- **Target Tracking Scaling**(目標(biāo)跟蹤縮放)
- 最簡(jiǎn)單,易于設(shè)置
- 例:保持平均 ASG CPU 在 40% 左右
- **Simple / Step Scaling**(簡(jiǎn)單 / 步進(jìn)縮放)
- 當(dāng)觸發(fā) CloudWatch 警報(bào)時(shí)(例:CPU>70%),添加兩個(gè) units
- 當(dāng)觸發(fā) CloudWatch 警報(bào)時(shí)(例:CPU<30%),移除一個(gè) unit
- **Scheduled Actions**(計(jì)劃操作)
- 根據(jù)已知的使用模式預(yù)測(cè)縮放情況
- 例:在周五下午5點(diǎn)將最小容量增加到10個(gè)
* * *
## ASG - Predictive Scaling(預(yù)測(cè)縮放)
- 預(yù)測(cè)縮放:持續(xù)預(yù)測(cè)負(fù)載并提前計(jì)劃縮放
* * *
## Good metrics to scale on(可以擴(kuò)展的良好指標(biāo))
- CPUUtilization(CPU 利用率):所有實(shí)例的平均 CPU 利用率
- RequestCountPerTarget(每個(gè)目標(biāo)請(qǐng)求計(jì)數(shù)):確保每個(gè) EC2 實(shí)例的請(qǐng)求數(shù)量穩(wěn)定
- Average Network In / Out(平均網(wǎng)絡(luò)進(jìn)出)(如果應(yīng)用程序是綁定網(wǎng)絡(luò)的)
- Any custom metric(任何自定義指標(biāo))(使用 CloudWatch 推送)
* * *
## ASG - Scaling Cooldowns(冷卻期)
- 縮放活動(dòng)發(fā)生后,處于 cooldown period(冷卻期,默認(rèn) 300秒)
- 在冷卻期間,ASG 不會(huì)啟動(dòng)或終止其他實(shí)例(以允許指標(biāo)穩(wěn)定)
- 建議:使用現(xiàn)成的 AMI 來減少配置時(shí)間,以便更快地提供請(qǐng)求并減少冷卻時(shí)間
* * *
* * *
* * *