本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用基于应用程序的 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 |
|
|
步骤
备注
-
NAT 网关的费用很小。
-
多个 EC2 实例将比单个 EC2实例更快地耗尽您的免费套餐时间。
-
在实验室环境
stickysessionslb.yml
中部署 CloudFormation 模板。 -
等待,直到目标组实例的运行状况从初始变为正常。
-
使用 HTTP (TCP/80) 在网络浏览器中导航到 Application Load Balancer 网址。
例如:
http://alb-123456789.us-east-1.elb.amazonaws.com/
该网页显示以下内容之一:实例 1- TG1、实例 2- TG1、实例 3- TG2 或实例 4- TG2。
-
多次刷新页面。
预期结果
注意
本示例中的 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实例。
-