

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 應用程式架構的 Auto Scaling 優勢
<a name="auto-scaling-benefits"></a>

將 Amazon EC2 Auto Scaling 新增至應用程式架構，是將 AWS 雲端的優勢最大化的一種方式。使用 Amazon EC2 Auto Scaling 後，您的應用程式將獲得以下好處：
+ 較佳的容錯能力。Amazon EC2 Auto Scaling 可以偵測並終止運作狀態不佳的執行個體，然後啟動執行個體來取代它。您也可設定 Amazon EC2 Auto Scaling，以使用於多個可用區域。如果一個可用區域無法使用，Amazon EC2 Auto Scaling 可以在另一個可用區域啟動執行個體來補償。
+ 較佳的可用性。Amazon EC2 Auto Scaling 可協助您確保應用程式隨時都有適當的容量，能夠處理目前的流量需求。
+ 較佳的成本管理。Amazon EC2 Auto Scaling 可以視需要動態增加和減少容量。因為您付費使用 EC2 執行個體，需要執行個體時再啟用它們，不需要時則終止它們，這樣可以節省費用。

**Contents**
+ [範例：涵蓋變數需求](#autoscaling-benefits-example)
+ [範例：Web 應用程式架構](#autoscaling-design-example)
+ [範例：跨可用區域分配執行個體](#arch-AutoScalingMultiAZ)
  + [執行個體分佈](#AutoScalingBehavior.Rebalancing)
  + [重新平衡活動](#AutoScalingBehavior.InstanceUsage)

## 範例：涵蓋變數需求
<a name="autoscaling-benefits-example"></a>

為了展現 Amazon EC2 Auto Scaling 的一些優點，請考慮在 AWS上執行基本 Web 應用程式。這個應用程式可讓員工搜尋想要用來開會的會議室。在一週開始和結束時，此應用程式使用最少。在週間時，許多員工會利用此排程會議，因此大幅提高此應用程式的需求。

下圖顯示一週間，此應用程式所使用的容量。

![\[應用程式容量需求範例。\]](http://docs.aws.amazon.com/zh_tw/autoscaling/ec2/userguide/images/capacity-example-diagram.png)


按照傳統做法，有兩種方式可以針對這些容量做變化。第一個選擇是新增足夠的伺服器，讓應用程式永遠有足夠的容量，可以滿足需求。不過，此選項有缺點在於當有天應用程式不再需要這麼多的容量時。未使用的多餘容量，會使維持應用程式執行的成本提高。

![\[顯示的範例從成本角度來看，說明為何購買多過於所需的容量會造成沒效率。\]](http://docs.aws.amazon.com/zh_tw/autoscaling/ec2/userguide/images/capacity-example-over-diagram.png)


第二個選擇是擁有足夠的容量來處理應用程式的平均需求。此選擇較便宜，因為您未購買偶爾使用的設備。不過，當應用程式需求超過其容量時，會有使客戶體驗品質下降的風險。

![\[範例說明為何購買低於所需容量，會導致不佳的客戶體驗品質。\]](http://docs.aws.amazon.com/zh_tw/autoscaling/ec2/userguide/images/capacity-example-under-diagram.png)


透過新增 Amazon EC2 Auto Scaling 到此應用程式上，您有第三個方案。您可以在需要時新增新的執行個體到應用程式上，且能在不需要它們的時候，將其終止。由於 Amazon EC2 Auto Scaling 使用 EC2 執行個體，當您使用時，您只需支付所使用之執行個體的費用。您現在擁有成本效益的架構，可供客戶體驗最佳的使用品質，同時又能減少費用。

![\[範例說明 Amazon EC2 Auto Scaling 如何視需要調整容量。\]](http://docs.aws.amazon.com/zh_tw/autoscaling/ec2/userguide/images/capacity-example-with-as-diagram.png)


## 範例：Web 應用程式架構
<a name="autoscaling-design-example"></a>

在常見的 Web 應用程式案例中，您可同時執行多個應用程式的複本，以涵蓋客戶流量的磁碟區。這些應用程式的多個副本由相同的 EC2 執行個體託管 (雲端伺服器)，每個都會處理客戶的要求。

Amazon EC2 Auto Scaling 會代表您管理 EC2 執行個體的啟動與終止。您可以定義一組條件 (例如 Amazon CloudWatch 警示)，判斷 Auto Scaling 群組何時啟動或終止 EC2 執行個體。將 Auto Scaling 群組新增到您的網路架構，有助於提高應用程式的可用性和容錯能力。

![\[具有 Auto Scaling 群組的三層基本架構。\]](http://docs.aws.amazon.com/zh_tw/autoscaling/ec2/userguide/images/sample-3-tier-architecture-auto-scaling-diagram.png)


您可以視需要建立任意數量的 Auto Scaling 群組。例如，您可以為每個層級建立 Auto Scaling 群組。

若要將流量分散到 Auto Scaling 群組中的執行個體間，您可以在架構中引進負載平衡器。如需詳細資訊，請參閱[Elastic Load Balancing](autoscaling-load-balancer.md)。

## 範例：跨可用區域分配執行個體
<a name="arch-AutoScalingMultiAZ"></a>

可用區域是給定 AWS 區域內的隔離位置。每個區域都有多個可用區域，旨在為該區域提供高可用性。可用區域是獨立的，因此當您將應用程式設計為使用多個區域時，可提高應用程式的可用性。如需詳細資訊，請參閱[Amazon EC2 Auto Scaling 中的彈性](disaster-recovery-resiliency.md)。

可用區域由 AWS 區域 程式碼識別，後面接著字母識別符 （例如，`us-east-1a`)。如果選擇建立 VPC 和子網路，而非使用預設 VPC，則可以在每個可用區域中定義一個或多個子網路。各個子網必須完全位於某一可用區域內，不得跨越多個區域。如需詳細資訊，請參閱*《Amazon VPC 使用者指南》*中的 [Amazon VPC 的運作方式](https://docs.aws.amazon.com/vpc/latest/userguide/how-it-works.html)。

當您建立 Auto Scaling 群組時，您必須選擇要在其中部署 Auto Scaling 群組的 VPC 和子網路。Amazon EC2 Auto Scaling 會在您選擇的子網路中建立執行個體。因此，每個執行個體都與 Amazon EC2 Auto Scaling 選擇的特定可用區域相關聯。執行個體啟動時，Amazon EC2 Auto Scaling 會嘗試在區域之間平均分配，以實現高可用性和可靠性。

下圖顯示跨三個可用區域部署的多層架構概觀。

![\[橫跨三個可用區域的典型 Auto Scaling 群組。\]](http://docs.aws.amazon.com/zh_tw/autoscaling/ec2/userguide/images/sample-3-tier-architecture-with-azs-diagram.png)


### 執行個體分佈
<a name="AutoScalingBehavior.Rebalancing"></a>

Amazon EC2 Auto Scaling 會自動嘗試在每個已啟用的可用區域中維持同等數量的執行個體。為此，Amazon EC2 Auto Scaling 會嘗試在可用區域中使用最少的執行個體啟動新的執行個體。如果為可用區域選擇多個子網路，Amazon EC2 Auto Scaling 會嘗試啟動子網路中可用 IP 地址數量最高的執行個體。不過，若嘗試失敗了，Amazon EC2 Auto Scaling 則會在另一個可用區域中嘗試啟動執行個體，直到成功為止。

在可用區域運作狀態不佳或無法使用的情況下，執行個體在各可用區域之間的分佈可能會變得不均勻。當可用區域恢復後，Amazon EC2 Auto Scaling 會自動重新平衡 Auto Scaling 群組。方法為在已啟用且具有最少執行個體的可用區域中啟動執行個體並終止其他地方的執行個體。

### 重新平衡活動
<a name="AutoScalingBehavior.InstanceUsage"></a>

重新平衡活動分為兩類：可用區域重新平衡和容量重新平衡。

**可用區域重新平衡**

在特定動作發生後，Auto Scaling 群組會在可用區域間呈現不平衡狀態。Amazon EC2 Auto Scaling 會重新平衡可用區域來加以補償。以下動作可以觸發重新平衡活動：
+ 您變更與您 Auto Scaling 群組相關聯的可用區域。
+ 您明確終止或分開執行個體，或將執行個體置於待命狀態，然後群組就變得不平衡。
+ 先前容量不足的可用區域恢復，現在具有額外的容量。
+ 先前可用區域的 Spot 價格高過最高價，現在 Spot 價格則低於最高價格。

重新平衡時，Amazon EC2 Auto Scaling 會先啟動新的執行個體，然後再終止之前的執行個體。以此方式，重新平衡不會影響您應用程式的性能或可用性。

由於 Amazon EC2 Auto Scaling 會在終止之前的執行個體前嘗試啟動新執行個體，在達到或接近最大指定容量時即會阻止或完全停止重新平衡的活動。

若要避免這個問題，在重新平衡活動期間，系統可以暫時超過指定的群組最大容量。預設方法為採用 10% 的餘裕或一個執行個體 (以較大者為準)。只有當群組達到最大容量或接近最大容量且需要重新平衡時，才會擴大餘裕。只要需要重新平衡群組，邊界就會延伸 (通常只會持續幾分鐘)。

或者，您也可以使用執行個體維護政策為 Auto Scaling 群組建立閾值，而群組只能在該閾值範圍內增減容量。這樣，您就可以控制群組重新平衡自身的速度。如需詳細資訊，請參閱[執行個體維護政策](ec2-auto-scaling-instance-maintenance-policy.md)。

**容量重新平衡**

使用 Spot 執行個體時，您可以打開 Auto Scaling 群組的容量重新平衡功能。這讓 Amazon EC2 Auto Scaling 會在 Amazon EC2 報告 Spot 執行個體的中斷風險提高時，嘗試啟動 Spot 執行個體。啟動新的執行個體後，即會終止之前的執行個體。如需詳細資訊，請參閱[Auto Scaling 中的容量重新平衡，以取代具有風險的 Spot 執行個體](ec2-auto-scaling-capacity-rebalancing.md)。