实例隔离配置实践

本文介绍如何通过函数计算控制台实现实例隔离效果。

使用限制

  • 仅实例规格中vCPU大于等于2的函数支持配置请求隔离和会话隔离。

  • 开启请求隔离的同时无法开启会话隔离。

  • 开启请求隔离后,系统将自动设置单实例并发度为1,确保当前函数内的每一个实例始终只能处理一个请求,此时,您之前配置的单实例并发度大于1的操作会失效。

  • 异步任务请求不支持会话隔离。

操作步骤

  1. 登录函数计算控制台,在左侧导航栏,选择函数,然后在上方菜单栏,选择地域。

  2. 函数页面,单击创建函数,在创建函数页面,选择函数类型,找到隔离性、亲和性区域,参考以下指导配置完成后单击创建

    - 请求隔离

    实例隔离选择请求隔离

    - 会话隔离

    实例隔离选择会话隔离

    开启会话隔离的同时,系统自动开启会话亲和,您需要进一步配置会话亲和相关参数。

    说明
    • 会话亲和不同的是,开启会话隔离后,单实例并发Session数系统自动置为1,且不可更改。

    • 会话隔离功能生效的同时,会话亲和功能也生效。

      如果开启会话隔离功能,同一客户端的请求都被路由到同一个函数实例上,同时,一个函数实例只能服务来自同一个客户端的请求,因此会话隔离功能即能满足会话亲和要求也能满足会话隔离要求。

    • MCP SSE亲和

    配置项

    说明

    示例

    会话亲和类型

    选择MCP SSE亲和,基于MCP SSE协议规格,系统确保客户端携带相同SessionId的客户端请求始终路由到同一个实例实现亲和行为。

    MCP SSE亲和

    SSE 路径

    发起SSE连接请求的路径。

    /sse

    单实例并发 Session 数

    开启会话隔离后,单实例并发Session数系统自动置为1,且不可更改。

    1

    • HeaderField亲和

    配置项

    说明

    示例

    会话亲和

    选择HeaderField亲和,基于HTTP请求头中的指定字段值实现会话亲和。

    HeaderField亲和

    Header Name

    用于传递亲和值客户端标识的头部名称。例如,您想传递的亲和标识为mySessionId,Header Namex-custom-affinity-header,使用HTTP协议发起调用时,需要传递如下Header和值:x-custom-affinity-header: mySessionId

    x-custom-affinity-header

    单实例并发 Session 数

    开启会话隔离后,单实例并发Session数系统自动置为1,且不可更改。

    1

    单个 Session 生命周期

    Session创建、使用到最终销毁的全过程。超过单个Session生命周期后,服务端将自动销毁Session,不再保证亲和性。

    21600

    Session Idle时长

    用户在一段时间内没有进行任何操作,导致会话进入空闲状态。超过设置的Session Idle时长后,服务端将自动销毁Session,不再保证亲和性。

    1800

    • Cookie亲和

    配置项

    说明

    示例

    会话亲和

    选择Cookie亲和,基于HTTP Cookie中的特性值实现会话亲和。

    Cookie亲和

    Cookie 处理方式

    目前仅支持植入Cookie方式,即客户端第一次访问时,函数计算将在返回请求中自动植入Cookie,即在 HTTP/HTTPS响应报文中插入Set-Cookie:x-fc-cookie-session-id={CookieID},后续客户端携带Cookie:x-fc-cookie-session-id={CookieID}访问时,函数计算会将请求定向转发给第一次请求所在的函数实例上。

    植入 Cookie

    单实例并发 Session 数

    开启会话隔离后,单实例并发Session数系统自动置为1,且不可更改。

    1

    单个 Session 生命周期

    Session创建、使用到最终销毁的全过程。超过单个Session生命周期后,服务端将自动销毁Session,不再保证亲和性。

    21600

    Session Idle时长

    用户在一段时间内没有进行任何操作,导致会话进入空闲状态。超过设置的Session Idle时长后,服务端将自动销毁Session,不再保证亲和性。

    1800

结果验证

请求隔离

  1. Curl命令为例,多次调用已配置请求隔离的目标函数。 示例如下,请根据您的函数URL替换exampleregionID。您可以在目标函数详情页面,选择触发器页签,然后在HTTP触发器的配置信息列获取函数URL。

    curl  https://example.{regionID}.fcapp.run
  2. 在目标函数详情页面,选择日志页签,您可以看到每一次请求都调度到不同的函数实例。

    image

会话隔离

  1. 以配置HeaderField亲和为例,指定不同HTTP请求头的值调用函数进行测试。 Session1:

    curl -H "x-custom-affinity-header:Session1" https://example.{regionID}.fcapp.run

    Session2:

    curl -H "x-custom-affinity-header:Session2" https://example.{regionID}.fcapp.run
  2. 在目标函数详情页面,选择日志页签,您可以看到相同SessionId的请求都调度到同一函数实例执行,不同SessionId的请求调度到不同的函数实例执行。

    image