一個用于Web應用程序的EC2 Spot架構

jopen 9年前發布 | 8K 次閱讀 架構

這篇博文使用實際的例子描述一個參考架構,它旨在幫助使你在保持web應用高可用性的同時實現更多為您節省成本的無狀態web層。我們建議在應用到生產環境之前先調整和測試你的應用程序。

Spot Instance使你根據自己的應用情況,通過對未使用的Amazon EC2 Instance進行簡單的競標來指定自己的Amazon EC2 Instance計算能力的價格。常常可以大幅度降低你的Amazon EC2 Instance成本。比如,利用同一負載平衡器后面的不同現貨競標價,可將基于按需實例運行的自動伸縮組同基于Spot Instance運行的自動伸縮組放在一起,以提供更大的靈活性并滿足不斷變化的流量需求。請參閱

Launch Spot instances in Your Auto Scaling Group 和   Load Balance Your Auto Scaling Group 中關于“現場實例”和“具有彈性負載均衡的自動伸縮組”的更多細節。

會話的狀態可以保存在web層的DynamoDB數據表中。DynamoDB是一個區域性的服務,這意味著數據能夠自動地被跨可用區復制來實現容錯。你也可以使用其它數據庫來保存架構中的狀態。Spot Instances的可用性取決于可獲得多少個未使用的Amazon EC2 Instance,因為實時需求和供應決定了Spot Instance的可供應量和業務需求實例的數量。你應該構建它能夠彈性地終止實例(注:此處翻譯不確定,原文為“you should architect it to be resilient to instance termination”),這包括當現價超過你當初指定的價格(即買入價),此時的實例將收到一個兩分鐘的警告:該實例將被終止。你可以通過創建IAM角色來管理實例,這些角色來自于它們用來從ELB注銷的Spot Instance.一旦它們收到通知,它們就會被終止。關于“Creating an IAM Role Using the AWS CLI”的詳情見 這里 ,關于“Spot Instance Termination Notices”的詳情見 這里 。下面這張圖描述了這將是什么樣子:

一個用于Web應用程序的EC2 Spot架構

像下面的腳本可以被放在一個循環中,并且可以在啟動時運行(例如,通過systemd或rc.local)來檢測Spot Instance是否終止。然后將任何會話信息保存到DynamoDB中同時從ELB中注銷自身,以便它不會接受更多的請求。我們建議(對這種方法)感興趣使用這種方法的應用每隔5秒終止一次通知;

$ if curl -s http://169.254.169.254/latest/meta-data/spot/termination-time | \
grep -q .*T.*Z; then instance_id=$(curl -s http://169.254.169.254/latest/meta-data/instance-id); \
aws elb deregister-instances-from-load-balancer \
  --load-balancer-name my-load-balancer \
  --instances $instance_id; /env/bin/flushsessiontoDBonterminationscript.sh; fi
基于按需實例運行的自動伸縮組和利用同一負載平衡器后面的不同競標價且基于Spot Instance的自動伸縮組協同工作將會確保在Spot市場價格和Spot Instance變化的情況下應用程序的可用性。如果在自動伸縮組的Spot Instance因為價格上漲接近中標價格而終止,那么運行在按需實例的自動伸縮組會根據自定義的擴展策略來擴展以滿足(實例終止前的)服務需求。為了實現自動伸縮組根據應用的需求來決定擴展,你必須說明你想如何變化來應對不斷變化的情況。你可以給運行Spot Instance的伸縮組分配更積極的縮放政策 (如CPU達到75%的使用率時擴大規模,CPU使用率降到25%時縮小規模),給運行按需實例的縮放組分配更加保守的擴展策略。有關使用Amazon CloudWatch的指標來自動伸縮的信息,請參閱 Dynamic Scaling

請注意,彈性負載平衡器使用最少未完成請求路由算法(針對HTTP/ HTTPS連接),這個算法有利于用最少未完成請求的后端實例。由于我們使用能夠跨越多個可用區域的多個自動伸縮組,我們強烈建議您啟用跨區域負載均衡負載平衡器。跨區域的負載均衡允許每個負載均衡節點在多個可用區發送請求,確保每個區域接受等量的請求流量。在被注銷的Spot Instance將要被終止時,為了完成還在發送中的請求,負載均衡器中的連接管道允許90秒的延時(即注銷后90秒連接管道關閉)

原文鏈接 :  https://aws.amazon.com/cn/blogs/compute/
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!