

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

# 具有負載平衡器產生的 Cookie 的黏性工作階段
<a name="alb-cookies-stickiness"></a>

當您使用 Application Load Balancer 搭配負載平衡器產生的 Cookie 時：
+ Application Load Balancer 使用[目標群組權重](https://aws.amazon.com/premiumsupport/knowledge-center/elb-make-weighted-target-groups-for-alb/)來判斷如何在目標群組之間平衡傳入流量。
+ 根據預設，Application Load Balancer 會使用循環配置方法來[將請求路由至目的地目標群組中的 EC2 執行個體](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-target-groups.html#modify-routing-algorithm)。

  在流量最初路由到執行個體之後，後續流量會在指定的持續時間內黏附至該 EC2 執行個體。

**範本：**使用 CloudFormation 範本 `stickysessionslb.yml`（包含在[範例程式碼 .zip 檔案中](samples/stickiness.zip))，嘗試使用負載平衡器產生的 Cookie 進行黏性工作階段。

## 常用案例
<a name="alb-cookies-use-cases"></a>

在這些案例中，使用黏性工作階段搭配負載平衡器產生的 Cookie：
+ PHP Web 伺服器
+ 維護臨時工作階段資料的伺服器，例如日誌、購物車或聊天對話

## 來自 basic.yml 的程式碼變更
<a name="alb-cookies-code-changes"></a>

相關程式碼變更位於目標群組組態中，以將黏性類型設定為 ，`lb_cookie`持續時間設定為 10 秒。


****  

|  |  | 
| --- |--- |
| basic.yml | stickysessionslb.yml | 
| <pre>TG1:<br />   Type: 'AWS::ElasticLoadBalancingV2::TargetGroup'<br />   Properties:<br />     Name: TG1<br />     Protocol: HTTP<br />     Port: 80<br />     TargetType: instance<br />     Targets:<br />       - Id: !Ref Instance1<br />       - Id: !Ref Instance2<br />VpcId: !Ref CustomVPC</pre> | <pre>TG1:<br />   Type: 'AWS::ElasticLoadBalancingV2::TargetGroup'<br />   Properties:<br />     Name: TG1<br />     Protocol: HTTP<br />     Port: 80<br />     TargetType: instance<br />     Targets:<br />       - Id: !Ref Instance1<br />       - Id: !Ref Instance2<br />     VpcId: !Ref CustomVPC<br />     TargetGroupAttributes:<br />       - Key: stickiness.enabled<br />         Value: true<br />       - Key: stickiness.type<br />         Value: lb_cookie<br />       - Key: stickiness.lb_cookie.duration_seconds<br />Value: 10</pre> | 

## 步驟
<a name="alb-cookies-steps"></a>

**備註**  
NAT 閘道會產生很小的成本。
多個 EC2 執行個體使用免費方案時數的速度會比單一 EC2 執行個體快。

1. 在`stickysessionslb.yml`實驗室環境中部署 CloudFormation 範本。

1. 等待目標群組執行個體的運作狀態從**初始**變更為**正常運作**。

1. 使用 HTTP (TCP/80) 導覽至 Web 瀏覽器中的 Application Load Balancer URL。

   例如：`http://alb-123456789.us-east-1.elb.amazonaws.com/`

   網頁會顯示下列其中一項：**執行個體 1 - TG1**、**執行個體 2 - TG1**、**執行個體 3 - TG2** 或**執行個體 4 - TG1**。

1. 多次重新整理頁面。

## 預期結果
<a name="alb-cookies-results"></a>

**注意**  
此範例中的 CloudFormation 範本會將黏性設定為持續 10 秒。

載入網頁的執行個體應在 10 秒內保持不變，如頁面文字中所反映。大約 10 秒後，粘性就會釋放，而目的地執行個體可能會變更。

## 運作方式
<a name="alb-cookies-how"></a>
+ 在此範例中，一個目標群組中存在兩個 EC2 執行個體。EC2 執行個體已安裝 Apache Web 伺服器 (`httpd`)，且每個 EC2 執行個體上的`index.html`頁面文字都經過硬式編碼，使其不同。
+ Application Load Balancer 會建立使用者工作階段的繫結，其會繫結至目的地，並具有過期時間。
+ 當您重新載入頁面時，Application Load Balancer 會檢查繫結是否存在且尚未過期。
  + 如果繫結已過期或不存在，Application Load Balancer 會執行其路由邏輯並決定目的地執行個體。
  + 如果繫結尚未過期，Application Load Balancer 會將流量路由到相同的目的地執行個體。