【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
当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2020-09-27 【Azure Redis 缓存 Azure Cache For Redis】Redis性能问题,发现Server Load非常的高,导致正常连接/操作不成功