使用應用程式型 Cookie 的黏性工作階段 - AWS 方案指引

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

使用應用程式型 Cookie 的黏性工作階段

當您搭配應用程式型 Cookie 使用 Application Load Balancer 時:

  • Application Load Balancer 使用目標群組權重來判斷如何在目標群組之間平衡傳入流量。

  • 根據預設,Application Load Balancer 會使用循環配置方法來將請求路由至目的地目標群組中的 EC2 執行個體

  • 流量最初路由至 EC2 執行個體後,EC2 執行個體應用程式回應應包含自訂應用程式 Cookie,該 Cookie 會與自動化 Application Load Balancer Cookie 一起傳回用戶端。

  • 如果用戶端傳送傳回應用程式 Cookie 和 Application Load Balancer Cookie,後續流量將黏附至 EC2 執行個體。

  • 以應用程式為基礎的 Cookie 在設定的持續時間不使用後過期。

範本:使用 AWS CloudFormation 範本 stickysessionsapp.yml(包含在範例程式碼 .zip 檔案中) 來嘗試使用應用程式型 Cookie 的黏性工作階段。

常用案例

當您想要在這些案例中進行其他控制時,請使用黏性工作階段搭配應用程式產生的 Cookie:

  • PHP Web 伺服器

  • 維護臨時工作階段資料的伺服器,例如日誌、購物車或聊天對話

來自 basic.yml 的程式碼變更

唯一的程式碼變更是在目標群組組態中。我們已將黏性組態新增至 Application Load Balancer 和目標群組屬性。應用程式 Cookie 持續時間已指定,目標群組已啟用應用程式 Cookie 黏性。

basic.yml stickysessionsapp.yml
TG1: Type: 'AWS::ElasticLoadBalancingV2::TargetGroup' Properties: Name: TG1 Protocol: HTTP Port: 80 TargetType: instance Targets: - Id: !Ref Instance1 - Id: !Ref Instance2 VpcId: !Ref CustomVPC
TG1: Type: 'AWS::ElasticLoadBalancingV2::TargetGroup' Properties: Name: TG1 Protocol: HTTP Port: 80 TargetType: instance Targets: - Id: !Ref Instance1 - Id: !Ref Instance2 VpcId: !Ref CustomVPC TargetGroupAttributes: - Key: stickiness.enabled Value: true - Key: stickiness.type Value: app_cookie - Key: stickiness.app_cookie.duration_seconds Value: 10 - Key: stickiness.app_cookie.cookie_name Value: TESTCOOKIE

步驟

備註
  • NAT 閘道會產生很小的成本。

  • 多個 EC2 執行個體使用免費方案時數的速度會比單一 EC2 執行個體快。

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

  2. 等到目標群組執行個體的運作狀態從初始變更為正常運作

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

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

    網頁會顯示下列其中一項:執行個體 1 - TG1執行個體 2 - TG1執行個體 3 - TG2執行個體 4 - TG2

  4. 多次重新整理頁面。

預期結果

注意

此範例中的 CloudFormation 範本已將黏性設定為持續 10 秒。有效的黏性持續時間組態介於 1 秒到 1 週之間。

載入網頁的執行個體應保持不變,如頁面文字所示。

黏性持續時間不會重新整理,但是根據 EC2 執行個體所產生之應用程式 Cookie 在 Application Load Balancer 中設定的過期時間。

範例 1:等待 5 秒以重新整理頁面。將載入相同的執行個體,並再重新整理黏性 10 秒。

範例 2:等待超過 10 秒以重新載入頁面。應用程式 Cookie 會過期,而您會被路由到不同的 EC2 執行個體。這個新執行個體會產生另一個應用程式 Cookie,持續時間為 10 秒。

運作方式

  • 在此範例中,EC2 執行個體已安裝 Apache Web 伺服器 (httpd)。httpd.conf 檔案設定為將靜態Set-Cookie值傳回用戶端 (您的 Web 瀏覽器)。Set-Cookie 值硬式編碼為 TESTCOOKIE=<somevalue>

  • 開啟瀏覽器的檢查元素選項,選擇網路索引標籤,然後選擇 Get 方法,以載入頁面。您將看到 Cookie 索引標籤。

  • 瀏覽器是一種用戶端應用程式,會自動設定 ,以使用伺服器Set-Cookie回應中收到的 Cookie 傳回任何後續更新至伺服器。

  • 當您重新載入頁面時,初始頁面載入中收到的 Cookie 會自動傳回 Application Load Balancer。

    • 如果 Cookie 已過期 (亦即,自上次呼叫後已經過 10 秒),Application Load Balancer 會使用新的邏輯來判斷要將流量路由到哪個 EC2 執行個體。

    • 如果 Cookie 尚未過期,Application Load Balancer 會將流量路由到相同的 EC2 執行個體。