创建等候室

当您的站点因秒杀、大促或热门活动面临高并发流量冲击时,源站服务器可能因不堪重负而响应缓慢甚至宕机。等候室功能通过在边缘设置虚拟排队区域,对超出源站处理能力的用户请求进行排队,从而保护源站稳定运行,并为排队用户提供明确的等待预期,优化用户体验。通过以下步骤您可以为您的站点快速搭建并启用一个等候室。

快速开始:5分钟为秒杀活动配置一个基础等候室

假设您的源站服务器处理并发的能力上限为300个用户,您需要为即将上线的秒杀活动页面 promo.example.com/flash-sale 配置等候室,以保护服务器。

操作步骤

  1. ESA控制台,选择站点管理,在站点列单击目标站点。

  2. 在左侧导航栏,选择流量 > 等候室

  3. 等候室区域,单击创建等候室。填写以下核心参数:

    • 等候室名称flash-sale-room

    • 主机名和路径promo.example.com/flash-sale

      • 子域promo

      • 路径flash-sale

    • 自定义Cookie__aliwaitingroom_flash_sale(用于表示排队凭证)

    • 活动用户总数300 (与您的源站并发能力匹配)

    • 每分钟的新用户数300 (确保初始阶段能快速放行用户)

    • 会话持续时间5

效果验证

等候室创建后默认启用。当访问 promo.example.com/flash-sale 的并发用户数超过活动用户总数300时,后来的用户将看到一个等待页面,告知预计等待时间。

image

创建与配置等候室

如果您需要对等候室进行更精细化的控制,可参考以下完整步骤进行配置。

步骤一:进入等候室配置页面

  1. ESA控制台,选择站点管理,在站点列单击目标站点。

  2. 在左侧导航栏,选择流量 > 等候室

  3. 等候室区域,单击创建等候室

    image

步骤二:基础设置

此步骤用于定义等候室的基本信息以及路径等信息。image

参数

说明

等候室名称

为您的等候室设置一个易于识别的名称,例如 promo_activity_room

主机名和路径

定义等候室生效的精确URL。一个站点可包含多个主机名(域名),此规则仅对您指定的主机名路径生效。

示例:若主机名为 event.example.com,路径为 /route,则等候室仅对 event.example.com/route 的访问请求生效。

自定义Cookie

用于标识和追踪用户排队状态的凭证。Cookie名称前缀固定为 __aliwaitingroom_,您可以自定义后缀部分。

示例__aliwaitingroom_promo_user

步骤三:容量与速率配置

此步骤用于定义等候室的容量和用户放行速率,是保护源站的核心配置。image

参数

说明

活动用户总数

目的:设置能同时访问您源站的并发用户数上限。

说明:此值应根据您源站服务器的实际并发处理能力来设定。当正在访问源站的活动用户数量达到此阈值时,新的用户请求将被送入队列等待。

注意:最小值为200。若源站实际负载低于200,建议将此值设为200,并通过每分钟的新用户数参数来更精确地控制放行速率。

每分钟的新用户数

目的:设置每分钟从队列中放行到源站的新用户数量上限,用于控制源站负载的增长速度。

说明:此参数决定了队列用户的消化速度。例如,设置为300,则每分钟最多有300名新用户从等待页面进入源站。

注意:最小值为200,且必须小于或等于活动用户总数

会话持续时间

目的:定义用户离开队列后,其访问会话的有效时长。

说明:用户成功访问源站后,若暂时离开(例如关闭页面),在此参数设定的时间内再次访问,无需重新排队。默认值为5分钟。

禁用会话续订

目的:决定用户的会话是否在与源站交互时自动刷新有效期。

注意:此开关的名称与实际行为相反,请根据预期效果选择:

  • 关闭 (默认):实际效果为启用会话续订。只要用户在源站保持活动(持续发起请求),其会话就不会过期,不会被送回队列。适用于多数场景。

  • 开启:实际效果为禁用会话续订。用户的会话从首次进入源站时开始严格计时。一旦计时结束,即使用户仍在活跃访问,也需要重新排队。适用于需要严格控制用户单次访问时长的秒杀等场景。

排队方法

目的:选择用户在等待页面中的放行策略。

  • FIFO:按请求顺序放行,最公平。为默认推荐选项。

  • 随机:从队列中随机选择用户放行。适用于对公平性要求不高的抽奖等场景。

  • 全部拒绝:所有新用户都将进入等待页面,且不会被放行。适用于活动开始前预热、系统维护或紧急关闭入口的场景。

  • 直通:所有请求都无需排队,直接访问源站。此模式下等候室相当于被禁用,可用于活动结束后恢复正常访问或进行功能测试。

步骤四:自定义等待页面

此步骤用于配置用户在排队时看到的页面内容或API响应。image

参数

说明

等候室类型

默认等候室:系统提供的标准等待页面,会自动显示预计等待时间。您可以选择默认语言模板英语简体中文繁体中文)。

自定义等候室:允许您上传自定义的HTML页面。若需使用请联系您的销售。

  • 您可以编辑模板或直接导入 .html 文件(大小不超过 50KB)。

  • 您可以在HTML中使用动态变量(如 ${waitTime})来显示排队信息。

排队预览

单击链接可以预览等待页面在不同状态(如正在排队全部排队)下的显示效果。

JSON响应

目的:为非浏览器客户端(如App、小程序)提供结构化的排队状态信息。

开启此开关后,当客户端请求头中包含 Accept: application/json 时,ESA将返回JSON格式的排队信息,而不是HTML等待页面,具体参数请参见JSON响应参数说明:。

交互流程

  1. 首次请求:客户端携带 Accept: application/json 请求头访问目标URL。

  2. 获取并存储CookieESA的响应头中会包含一个 Set-Cookie 字段。客户端必须保存此Cookie,作为后续请求的身份凭证。

  3. 轮询状态:客户端需携带此Cookie,并根据响应体中 refreshIntervalSeconds 字段指定的秒数,定时重新请求同一URL以刷新排队状态。

  4. 访问源站:当响应体中的 inWaitingRoom 字段变为 false 时,表示已离开队列,客户端即可使用该Cookie正常访问源站资源。

响应示例

{
  "WaitingRoom": {
    "inWaitingRoom": true,
    "waitTime": 5,
    "waitTimeKnown": true,
    "waitTimeFormatted": "5 minutes",
    "queueIsFull": false,
    "queueAll": false,
    "lastUpdated": "2024-09-10T12:00:00.000Z",
    "refreshIntervalSeconds": 20
  }
}

队列状态码

自定义用户在排队时收到的HTTP响应状态码。默认为200。您可以根据需要修改为202等其他状态码。

步骤三:预览并开启等候室

  1. 为您展示前面两步的设置总览,便于您确认以及选择是否配置其他功能,确认设置参数无误后,单击完成即可完成等候室的创建。

    image

  2. 等候室创建完成后,系统默认启用等候室功能。

    image

  3. 您还可以根据实际情况开启或关闭所有请求全部排队的开关:

    • 关闭:默认状态。当请求数达到活动用户总数每分钟的新用户数中定义的阈值时,超出部分的请求将进入等候室排队。

    • 开启:所有新访客都需要进行排队等候,可以用于为产品发布或其他定期活动做准备。

      说明
      • 已经在您的源站进行访问的活动用户可以继续访问,并且在会话到期之前不会返回队列。

      • 全部排队将覆盖所有其他等候室设置,包括事件设置。

    image

后续步骤

如果您是企业版用户,还可以使用以下高级功能对等候室进行更灵活的控制:

  • 等候室计划事件:在预设的特定时间自动调整等候室的容量和速率参数,以应对可预见的流量高峰或低谷。

  • 等候室绕过规则:设置特定规则(如基于IP、Header、Cookie),使满足条件的请求可以绕过等候室,直接访问源站。