隨著云平臺的不斷發展,利用云的服務來支持利用變成常態
在AWS上設計容錯架構的APP需要掌握5個設計模式
AWS還有另外的7大架構設計原則(針對利用設計),可以參考張俠的7大設計原則 參考文章:【總結】初創公司用AWS搭建高擴大性架構 實用性會更強1些,觸及服務會更多
可用性
不可用
目標
擴大性
高可用能力
災備
全球散布式的基礎設施
天然高可用和容錯的服務
可通過適當的架構設計實現高可用
架構設計:Router53→EIP→EC2→RDS
如果EC2實例#1出現問題,那末可以啟動另外一個EC2實例#2,并將實例#1 的IP綁定給實例#2
架構設計:Router53→EIP→EC2(+EBS)→RDS
如果EC2實例#1出現問題,那末可以啟動另外一個EC2實例#2,并將實例#1 的EBS卷綁定給實例#2
架構設計:Router53→ELB→EC2(more then 1)→RDS
ELB后端有N個EC2實例,不管任何實例出現問題,那末ELB的流量將會停止分發流量到其他健康實例
如果配置了彈性組,那末當實例宕機,那末“彈性組”會自動補齊EC2實例的總數量
為了不全部機房都宕掉,AWS設計了可用區AZ
架構設計(高可用設計):
- Router53→ELB→AZ(A)【EC2實例#1→RDS#master(multi-AZ架構)】
- Router53→ELB→AZ(B)【EC2實例#2→RDS#master→RDS#slave】
ELB后端有N個EC2實例,分別部署在AZ(A)和AZ(B),同時RDS采取了multi-AZ部署架構(master和slave也分別部署在AZ(A)和AZ(B)),這類情況下不管任何實例、RDS數據庫、還是數據中心AZ(A)或AZ(B)單獨出現問題,那末服務也將可以訪問
架構設計(彈性設計):
- Router53→ELB→彈性組→AZ(A)【EC2實例#1→RDS#master(multi-AZ架構)】
- Router53→ELB→彈性組→ AZ(B)【EC2實例#2→RDS#master→RDS#slave】
相比于“高可用設計”例子,在這里ELB后端采取了彈性組(Auto Scaling Group —支持跨AZ擴大),這樣實例數量增加就能夠自動化【這里說的就是自動擴大設計】,且如果有實例出現問題,ASG也會自動補齊【這里說的就是自我修復設計】。
同時到達低谷期時也會自動縮減EC2實例的數量
耦合度與靈活性相反
- 舉例:動車載客的設計,如果有1000人,怎樣設計車箱?A和B兩種設計
- A:把車做的足夠大,1000人都在里面,耦合大(壞掉1個都不可用了),管理不靈活
- B:每節車箱100人,要做10個車箱。耦合小(壞掉1個還有其余可用),但是足夠靈活
媒體數據處理的場景:
架構設計#1(數據處理):Router53→ELB→彈性組【數據接收的EC2實例】→視頻數據存入S3 AND 元數據存入DynamoDB→彈性組【轉碼的EC2實例】
架構設計#2(消息通知):數據接收伏務(SQS)→轉碼服務(SQS)→發布&通知
架構設計#3(彈性設計):
- 未來在增加用戶訪問量的情況下,彈性組會增加EC2實例的數量,來處理數據接收
- 未來在SQS中處理的消息愈來愈多的時候(說明轉碼數量增加),彈性組也會增加EC2實例數量,來處理轉碼工作
- 如果某臺EC2實例宕機,那末彈性組也會補齊數量
容錯利用的設計原則
- 假定失效的設計
- 多可用區設計
- 自動擴大設計
- 自我修復設計
- 松耦合設計
更多參考資料
- AWS參考架構:http://aws.amazon.com/architecture/
- AWS白皮書:http://aws.amzon.com/whitepapers/
用工具測試1下高可用&容錯架構
使用開源的工具CHAOS Money
它會隨機將服務中的某個環節宕機,從而測試利用是不是能夠保證硬朗性