

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

# 可用區域獨立
<a name="availability-zone-independence"></a>

 若要達成第一個結果，若要停止將工作傳送至受影響的可用區域，疏散需要您實作[可用區域獨立性](https://aws.amazon.com/builders-library/static-stability-using-availability-zones/)AZI），有時也被稱為[可用區域相似性](https://aws.amazon.com/blogs/architecture/improving-performance-and-reducing-cost-using-availability-zone-affinity/)。此架構模式會隔離可用區域內的資源，並防止不同可用區域中資源之間的互動，除非絕對需要，例如連線至不同可用區域中的主要資料庫執行個體。

 在要求/回應類型工作負載中，實作 AZI 需要您[停用應用程式負載平衡器的跨區域負載平衡](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/disable-cross-zone.html#cross_zone_console_disable)(ALB),[傳統負載平衡器](https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/enable-disable-crosszone-lb.html#disable-cross-zone)(CLB)，以及[網路負載平衡器](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/target-group-cross-zone.html)(NLB) (NLB 預設會停用跨區域負載平衡)。停用跨區域負載平衡有一些權衡。當您停用跨區域負載平衡時，[流量在每個可用區域之間平均分配](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/how-elastic-load-balancing-works.html#cross-zone-load-balancing)無論每個實例中有多少個實例。如果您的資源或 Auto Scaling 群組不平衡，這可能會對資源較少的可用區域中資源增加額外負載。如下圖所示，其中可用區域 1 中的兩個執行個體各接收 25% 的負載，而可用區域 2 中的五個執行個體各接收 10% 的負載。

![圖表顯示停用不平衡執行個體的跨區域負載平衡的效果](http://docs.aws.amazon.com/zh_tw/whitepapers/latest/advanced-multi-az-resilience-patterns/images/disabling-cross-zone-load-balancing.png)


 您使用的其他區域服務也必須使用 AZI 模式來實作，以支援有效的可用區域撤離。例如，介面 VPC 端點提供[每個可用區域的特定 DNS 名稱](https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-interface.html#access-service-though-endpoint)介面端點在中提供。

 實作 AZI 的一項挑戰是資料庫，特別是因為大多數關聯式資料庫隨時只支援單一主要寫入器。與主執行個體通訊時，您可能需要跨越可用區域界限。許多AWS資料庫服務支援使用者定義的異地同步備份組態並具有內建的異地同步備份容錯移轉功能[亞馬遜 RDS](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RebootDBInstance.html)或者[亞馬遜極光](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_FailoverDBCluster.html)。在許多失敗案例中，服務可以偵測影響，並在發生問題時自動將資料庫容錯移轉至不同的可用區域。但是，在灰色故障期間，服務可能無法偵測到影響工作負載的影響，或是影響可能與資料庫完全無關。在這些情況下，一旦您偵測到可用區域中的影響，就可以手動叫用容錯移轉來移動主要資料庫。這可讓您有效地對單一可用區域的損害做出反應。

 如果您要搭配這些資料庫使用僅供讀取複本，您可能也會想要為這些資料庫實作 AZI，因為您無法像主要資料庫一樣，將僅供讀取複本容錯移轉至不同的可用區域。如果您在可用區域 1 中有單一僅供讀取複本，且三個可用區域的執行個體設定為使用它，則影響可用區域 1 的損害也會影響其他兩個可用區域的作業。這就是您想要防止的影響。

對於 RDS 執行個體，您會收到 DNS 端點，以存取特定可用區域中的複本。若要達到 AZI，您需要每個可用區域的僅供讀取複本，以及讓應用程式知道其所在可用區域使用哪個複本端點的方法。您可以採取的一種方法是使用可用區域 ID 作為數據庫標識符的一部分，類似於`use1-az1-read-replica.cbkdgoeute4n.us-east-1.rds.amazonaws.com`。您也可以使用服務發現來執行此操作（例如[AWS Cloud Map](https://aws.amazon.com/cloud-map/)）或查找存儲在中的簡單地圖[AWS系統管理員參數儲存](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html)或一個動態資料表。這個概念如下圖所示。

![顯示探查每個可用區域的 RDS 端點 DNS 名稱的圖表](http://docs.aws.amazon.com/zh_tw/whitepapers/latest/advanced-multi-az-resilience-patterns/images/discovering-rds-endpoint-names.png)


 亞馬遜極光的默認配置是提供[單一讀取器端點](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.Overview.Endpoints.html#Aurora.Endpoints.Reader)負載平衡可用僅供讀取複本的請求。為了使用極光實現 AZI，您可以使用[自訂端點](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.Overview.Endpoints.html#Aurora.Endpoints.Custom)針對每個僅供讀取複本，使用`ANY`type (如此一來，您就可以視需要升級僅供讀取複本)。根據部署複本的可用區域 ID 為自訂端點命名。然後，您可以使用自訂端點提供的 DNS 名稱，連線到特定可用區域中的特定僅供讀取複本，如下圖所示。

![顯示針對 Aurora 僅供讀取複本使用自訂端點的圖表](http://docs.aws.amazon.com/zh_tw/whitepapers/latest/advanced-multi-az-resilience-patterns/images/custom-endpoint-rds-read-replicas.png)


 當您的系統以這種方式架構時，它會使可用區域疏散成為更簡單的任務。例如，在下圖中，當存在影響可用區域 3 的損害時，可用區域 1 和 2 中的讀取和寫入作業都不會受到影響。

![使用 AZI 防止 Amazon Aurora 僅供讀取複本造成影響的圖表](http://docs.aws.amazon.com/zh_tw/whitepapers/latest/advanced-multi-az-resilience-patterns/images/using-azi-with-rds-read-replicas.png)


 或者，如果可用區域 2 受到影響，讀取作業仍會在可用區域 1 和 3 中成功。然後，如果 Amazon Aurora 並未自動容錯移轉主資料庫，您可以手動叫用容錯移轉至其他可用區域，以還原處理寫入的能力。當您需要撤除可用區域時，此方法可避免在資料庫連線中進行任何組態變更。最大限度地減少所需的更改並保持過程盡可能簡單將使其更加可靠。