【Azure 应用服务】App Service多个部署槽(Slot)之间,设置Traffic百分比后,如何来判断请求是由那一个槽(Slot)来进行处理呢?
问题描述
当我们部署应用到App Service后,为了实现对生成的最小影响,通常是把新版本部署在一个预生产的槽中,然后进行验证。另一方面,为了进行A/B验证,需要把生成槽的流量,切入一部分到预生产槽中. 这个时候,我们就可以通过 路由流量(Traffic %) 来实现这个目的。
只是问题是:如果无法从访问的页面显示中判断出是生成槽在提供服务还是预生产槽在提供服务,是否有其他的办法来进行确认呢?
问题分析
浏览器访问应用时,会自动路由到特定槽后,在该客户端会话生存期内都将“固定”到该槽。 在客户端浏览器上,可以通过查看 HTTP 标头中的
x-ms-routing-namecookie 来查看会话固定到哪个槽。 路由到“暂存”槽的请求具有 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
- 【Azure 应用服务】Azure App Service (Windows) 使用Flask框架部署Python应用,如何在代码中访问静态文件呢?如何设置文件路径?是相对路径还是绝对路径呢?
- 【Azure 应用服务】在Azure App Service for Windows 中部署Java/NodeJS/Python项目时,web.config的配置模板内容
- 在Web应用中,会用到大量的Ajax请求,在Ajax请求中存在的一个问题就是如何判断session超时,在网上找到的一个java中处理此问题方法:
- 【Azure 应用服务】App Service For Linux 中安装paping, 用于验证从App Service向外请求的网络连通性
- 【Azure 应用服务】基于Azure的CI/CD工具链部署App Service
- 【Azure 应用服务】App Service .NET Core项目在Program.cs中自定义添加的logger.LogInformation,部署到App Service上后日志不显示Log Stream中的问题
- 【Azure 云服务】Azure Cloud Service在发布新部署后遇见不能RDP(远程连接)到实例时如何处理?
- 【Azure 应用服务】App Service下部署的应用报错 Out of Memory
- 【Azure 应用服务】App Service 默认开放端口说明, 如何禁用Web app的端口号?
- 【Azure 应用服务】App Service 在使用GIt本地部署,上传代码的路径为/home/site/repository,而不是站点的根目录/home/site/wwwroot。 这个是因为什么?
- 【Azure 应用服务】如何定期自动重启 Azure App Service Plan(应用服务计划)
- 【Azure 应用服务】App Service 通过配置web.config来添加请求返回的响应头(Response Header)
- 【Azure 应用服务】FTP 部署 Vue 生成的静态文件至 Linux App Service 后,访问App Service URL依旧显示Azure默认页面问题
- 【Azure 应用服务】Python flask 应用部署在Aure App Service 遇见的 3 个问题
- 【应用服务 App Service】在Azure Web App的部署文件中,是否可以限制某些文件无法被访问?(如json)
- 如何使用Azure Container Service Engine在Azure中国区部署容器服务(一):DC/OS篇
- 【Azure 应用服务】遇见“无法创建hybrid connection for App Service”的解决办法
- 【Azure 应用服务】App Service中抓取 Web Job 的 DUMP 办法
- 【Azure 应用服务】App Service中,为Java应用配置自定义错误页面,禁用DELETE, PUT方法
- iOS 判断当前APP是否开启定位服务,未开通点击确定进入设置里进行设置