

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

# 平衡 Layer 的負載
<a name="best-server-load-balancing"></a>

**重要**  
 AWS OpsWorks Stacks 此服務已於 2024 年 5 月 26 日終止，並已針對新客戶和現有客戶停用。我們強烈建議客戶盡快將其工作負載遷移至其他解決方案。如果您對遷移有任何疑問，請透過 [AWS re：Post](https://repost.aws/) 或透過 [AWS Premium Support](https://aws.amazon.com/support) 聯絡 AWS 支援 團隊。

OpsWorks Stacks 提供兩種負載平衡選項：[Elastic Load Balancing](https://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/elastic-load-balancing.html) 和 [HAProxy](http://www.haproxy.org/)，通常用於平衡應用程式伺服器層執行個體的負載。本主題說明其各自的優點和限制，幫助您在 layer 新增負載平衡時決定要選擇的選項。在某些情況下，最好的方法是兩個都使用。

**SSL 終止**  <a name="best-server-load-balancing-ssl"></a>
內建 HAProxy layer 不會處理 SSL 終止；您必須在伺服器上終止 SSL。此方法的優點是會加密流量，直到它到達伺服器。不過，伺服器必須處理解密，這會增加伺服器的負載。此外，您必須將您的 SSL 憑證放在應用程式伺服器上，這讓使用者更容易存取。  
使用 Elastic Load Balancing，您可以在負載平衡器終止 SSL。這可減少應用程式伺服器上的負載，但負載平衡器與伺服器之間的流量不會加密。Elastic Load Balancing 也可讓您[終止伺服器上的 SSL](https://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/elb-https-load-balancers.html)，但設定有點複雜。

**擴展**  <a name="best-server-load-balancing-scaling"></a>
如果傳入流量超過 HAProxy 負載平衡器的容量，您就必須手動增加容量。  
Elastic Load Balancing 會自動擴展以處理傳入流量。若要確保 Elastic Load Balancing 負載平衡器在第一次上線時有足夠的容量來處理預期的負載，您可以[對其進行預熱](https://aws.amazon.com/articles/1636185810492479#pre-warming)。

**負載平衡器故障**  <a name="best-server-load-balancing-failure"></a>
如果託管您 HAProxy 伺服器的執行個體故障，您可能要讓整個網站離線，直到您可以重新啟動執行個體為止。  
Elastic Load Balancing 比 HAProxy 更能防止故障。例如，它在每個已註冊 EC2 執行個體的可用區域中佈建負載平衡節點。如果某個區域的服務中斷，其他節點會繼續處理傳入的流量。如需詳細資訊，請參閱 [Elastic Load Balancing 概念](https://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/TerminologyandKeyConcepts.html)。

**閒置逾時**  <a name="best-server-load-balancing-timeout"></a>
如果伺服器閒置超過指定的閒置逾時值，兩種負載平衡器都會終止連線。  
+ HAProxy – 閒置逾時值沒有上限。
+ Elastic Load Balancing – 預設閒置逾時值為 60 秒，上限為 3600 秒 (60 分鐘）。
Elastic Load Balancing 閒置時間限制足以用於大多數用途。如果您需要較長的閒置逾時，我們建議您使用 HAProxy。例如：  
+ 推送通知所用之長時間執行的 HTTP 連線。
+ 您用來執行可能需要超過 60 分鐘任務的管理界面。

**以 URL 為基礎的映射**  <a name="best-server-load-balancing-url"></a>
您可能希望使用負載平衡器，根據請求的 URL 將傳入請求轉發到特定的伺服器。例如，假設您有 10 個一組的應用程式伺服器支援線上商務應用程式。八個伺服器處理型錄，兩個處理付款。您想要根據請求 URL，將所有付款相關的 HTTP 請求導向至付款伺服器。在此案例中，您會將包含「付款」或「結帳」的所有 URL 導向至其中一個付款伺服器。  
透過 HAProxy，您可以使用以 URL 為基礎的映射將包含指定字串的 URL 導向到特定的伺服器。若要搭配 OpsWorks Stacks 使用 URL 型映射，您必須覆寫`haproxy`內建技術指南中的`haproxy-default.erb`範本，以建立自訂 HAProxy 組態檔案。如需詳細資訊，請參閱 [HAProxy 組態手冊](http://cbonte.github.io/haproxy-dconv/configuration-1.5.html)和[使用自訂範本 ](workingcookbook-template-override.md)。您不能使用以 URL 為基礎的映射處理 HTTPS 請求。HTTPS 請求已加密，所以 HAProxy 無法檢查請求 URL。  
Elastic Load Balancing 對 URL 映射的支援有限。如需詳細資訊，請參閱 [Elastic Load Balancing 的接聽程式組態](https://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/elb-listener-config.html)。

**建議：**我們建議您使用 Elastic Load Balancing 進行負載平衡，除非您有只能由 HAProxy 處理的需求。在這種情況下，最佳方法可能是使用 Elastic Load Balancing 作為前端負載平衡器，將傳入流量分配到一組 HAProxy 伺服器。若要執行此作業：
+ 設定您堆疊中每個可用區域的 HAProxy 執行個體，將請求分配到區域的應用程式伺服器。
+ 將 HAProxy 執行個體指派給 Elastic Load Balancing 負載平衡器，然後將傳入的請求分配至 HAProxy 負載平衡器。

這種方法可讓您使用以 URL 為基礎的 HAProxy 映射，將不同類型的請求分配到適當的應用程式伺服器。不過，如果其中一個 HAProxy 伺服器離線，網站會繼續運作，因為 Elastic Load Balancing 負載平衡器會自動將傳入流量分配到運作狀態良好的 HAProxy 伺服器。請注意，您必須使用 Elastic Load Balancing 做為前端負載平衡器；HAProxy 伺服器無法將請求分發到其他 HAProxy 伺服器。