【Azure 应用服务】App Service多个部署槽(Slot)之间,设置Traffic百分比后,如何来判断请求是由那一个槽(Slot)来进行处理呢?

简介: 【Azure 应用服务】App Service多个部署槽(Slot)之间,设置Traffic百分比后,如何来判断请求是由那一个槽(Slot)来进行处理呢?

问题描述

当我们部署应用到App Service后,为了实现对生成的最小影响,通常是把新版本部署在一个预生产的槽中,然后进行验证。另一方面,为了进行A/B验证,需要把生成槽的流量,切入一部分到预生产槽中. 这个时候,我们就可以通过 路由流量(Traffic %) 来实现这个目的。

 

只是问题是:如果无法从访问的页面显示中判断出是生成槽在提供服务还是预生产槽在提供服务,是否有其他的办法来进行确认呢?

 

问题分析

浏览器访问应用时,会自动路由到特定槽后,在该客户端会话生存期内都将“固定”到该槽。 在客户端浏览器上,可以通过查看 HTTP 标头中的 x-ms-routing-name cookie 来查看会话固定到哪个槽。 路由到“暂存”槽的请求具有 cookie x-ms-routing-name=staging。 路由到生产槽的请求具有 cookie x-ms-routing-name=self

使用 curl -v <url> 能非常方便的查看到 x-ms-routing-name 的值:

 

 

浏览器的开发者模式中,查看Request Cookie值:

 

 

附录一:附上修改Routing rule的REST API 方法:

使用PostMan发送 PUT 请求到:

https://management.chinacloudapi.cn/subscriptions/<your subscription>/resourceGroups/<your resource group >/providers/Microsoft.Web/sites/<your site name>/config/web?api-version=2018-11-01

如果是需要请求之前所有Traffic设置,就在Body中设置如下属性:

{
    "properties": {
        "routingRules": [],
        "experiments": {
            "rampUpRules": []
        }
    }
}

如果是需要对Traffic rule进行设置,可以借鉴:

{
 "properties": {
  "routingRules": [
   {
    "actionHostName": "<your site name>-slot1.chinacloudsites.cn",
    "reroutePercentage": 50.0,
    "changeStep": null,
    "changeIntervalInMinutes": null,
    "minReroutePercentage": null,
    "maxReroutePercentage": null,
    "changeDecisionCallbackUrl": null,
    "name": "slot1"
   },
   {
    "actionHostName": "<your site name>-slot2.chinacloudsites.cn",
    "reroutePercentage": 50.0,
    "changeStep": null,
    "changeIntervalInMinutes": null,
    "minReroutePercentage": null,
    "maxReroutePercentage": null,
    "changeDecisionCallbackUrl": null,
    "name": "slot2"
   }
  ],
  "experiments": {
   "rampUpRules": [
    {
     "actionHostName": "<your site name>-slot1.chinacloudsites.cn",
     "reroutePercentage": 50.0,
     "changeStep": null,
     "changeIntervalInMinutes": null,
     "minReroutePercentage": null,
     "maxReroutePercentage": null,
     "changeDecisionCallbackUrl": null,
     "name": "slot1"
    },
    {
     "actionHostName": "<your site name>-slot2.chinacloudsites.cn",
     "reroutePercentage": 50.0,
     "changeStep": null,
     "changeIntervalInMinutes": null,
     "minReroutePercentage": null,
     "maxReroutePercentage": null,
     "changeDecisionCallbackUrl": null,
     "name": "slot2"
    }
   ]
  }
 }
}

注意:在发送请求时候,需要携带Authorization Token。(最开的获取方式为Azure 门户,通过F12查看发送请求中的Authorization,复制出来用在Postman中)

 

 

参考资料

路由流量: https://docs.azure.cn/zh-cn/app-service/deploy-staging-slots#route-traffic

 

相关文章
|
3月前
|
编译器 Linux PHP
【Azure App Service】为部署在App Service上的PHP应用开启JIT编译器
【Azure App Service】为部署在App Service上的PHP应用开启JIT编译器
|
17天前
|
开发工具 git C++
【App Service】VS Code直接部署App Service时候遇见 “fatal: not a git repository (or any of the parent directories): .git”
通过VS Code发布Python App Service的时候,遇见了发布失败错误: The deployment failed with error: fatal: not a git repository (or any of the parent directories): .git . Please take a few minutes to help us improve the deployment experience
70 24
|
2天前
|
JavaScript C++ 容器
【Azure Bot Service】部署NodeJS ChatBot代码到App Service中无法自动启动
2024-11-12T12:22:40.366223350Z Error: Cannot find module 'dotenv' 2024-11-12T12:40:12.538120729Z Error: Cannot find module 'restify' 2024-11-12T12:48:13.348529900Z Error: Cannot find module 'lodash'
24 11
|
9天前
|
C#
【Azure App Service】使用Microsoft.Office.Interop.Word来操作Word文档,部署到App Service后报错COMException
System.Runtime.InteropServices.COMException (0x80040154): Retrieving the COM class factory for component with CLSID {000209FF-0000-0000-C000-000000000046} failed due to the following error: 80040154 Class not registered (0x80040154 (REGDB_E_CLASSNOTREG)).
|
16天前
|
机器人 Shell Linux
【Azure Bot Service】部署Python ChatBot代码到App Service中
本文介绍了使用Python编写的ChatBot在部署到Azure App Service时遇到的问题及解决方案。主要问题是应用启动失败,错误信息为“Failed to find attribute &#39;app&#39; in &#39;app&#39;”。解决步骤包括:1) 修改`app.py`文件,添加`init_func`函数;2) 配置`config.py`,添加与Azure Bot Service认证相关的配置项;3) 设置App Service的启动命令为`python3 -m aiohttp.web -H 0.0.0.0 -P 8000 app:init_func`。
|
3月前
|
应用服务中间件 Linux 网络安全
【Azure 应用服务】App Service for Linux 环境中为Tomcat页面修改默认的Azure 404页面
【Azure 应用服务】App Service for Linux 环境中为Tomcat页面修改默认的Azure 404页面
|
3月前
|
开发工具 git
【Azure App Service】App Service设置访问限制后,使用git clone代码库出现403报错
【Azure App Service】App Service设置访问限制后,使用git clone代码库出现403报错
|
3月前
|
存储 Linux 开发工具
【Azure App Service】本地Git部署Python Flask应用上云(Azure App Service For Linux)关键错误
【Azure App Service】本地Git部署Python Flask应用上云(Azure App Service For Linux)关键错误
|
3月前
|
Java Maven
【Azure Function App】Java Function部署到Azure后出现中文显示乱码问题
【Azure Function App】Java Function部署到Azure后出现中文显示乱码问题
|
3月前
|
Java 应用服务中间件 nginx
【Azure Spring Apps】Spring App部署上云遇见 502 Bad Gateway nginx
【Azure Spring Apps】Spring App部署上云遇见 502 Bad Gateway nginx