使用基于应用程序的 Cookie 进行粘性会话 - AWS 规范性指导

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用基于应用程序的 Cookie 进行粘性会话

当您使用带有基于应用程序的 Cookie 的 Application Load Balancer 时:

  • Application Load Balancer 使用目标组权重来确定如何在目标组之间平衡传入流量。

  • 默认情况下,Application Load Balancer 使用循环方法将请求路由到目标目标组中的 EC2 实例

  • 在流量最初路由到实例后, EC2 EC2 实例应用程序响应应包含自定义应用程序 Cookie,该应用程序将与自动的 Application Load Balancer cookie 一起发送回客户端。

  • 如果客户端发回应用程序 Cookie 和 Application Load Balancer cookie,则后续流量将持续到该 EC2 实例。

  • 基于应用程序的 Cookie 在配置的持续时间内不使用后过期。

模板:使用 AWS CloudFormation 模板stickysessionsapp.yml(包含在示例代码.zip 文件中)尝试使用基于应用程序的 Cookie 进行粘性会话。

常见使用案例

如果您想在以下情况下进行更多控制,请使用带有应用程序生成的 Cookie 的粘性会话:

  • PHP 网络服务器

  • 维护日志、购物车或聊天对话等临时会话数据的服务器

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) 在网络浏览器中导航到 Application Load Balancer 网址。

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

    该网页显示以下内容之一:实例 1- TG1实例 2- TG1实例 3- TG2实例 4- TG2

  4. 多次刷新页面。

预期结果

注意

本示例中的 CloudFormation 模板已将粘性配置为持续 10 秒。有效的粘性持续时间配置介于 1 秒到 1 周之间。

加载网页的实例应保持不变,如页面文本所示。

粘性持续时间不会刷新,而是基于在 Application Load Balancer 中为实例生成的应用程序 Cookie 配置的过期时间。 EC2

示例 1:等待 5 秒钟刷新页面。同一个实例将加载,粘性将再刷新 10 秒钟。

示例 2:等待时间超过 10 秒以重新加载页面。应用程序 Cookie 过期,您将被路由到另一个实 EC2 例。这个新实例会生成另一个持续时间为 10 秒的应用程序 Cookie。

工作方式

  • 在此示例中,这些 EC2 实例安装了 Apache Web 服务器 (httpd)。该httpd.conf文件配置为向客户端(您的 Web 浏览器)返回静态Set-Cookie值。该Set-Cookie值被硬编码为。TESTCOOKIE=<somevalue>

  • 打开浏览器的 Inspect Element 选项,选择网络选项卡,然后选择加载页面的 Ge t 方法。您将看到一个 Cookie 选项卡。

  • 浏览器是一个客户端应用程序,它会自动配置为使用服务器Set-Cookie响应中收到的 Cookie 向服务器返回任何后续更新。

  • 当您重新加载页面时,在初始页面加载时收到的 Cookie 会自动发送回 Application Load Balancer。

    • 如果 Cookie 已过期(即自您上次调用以来已过 10 秒),Application Load Balancer 将使用新的逻辑来确定将流量路由到哪个 EC2 实例。

    • 如果 cookie 尚未过期,Application Load Balancer 会将流量路由到同一个 EC2实例。