Azure横向扩展WebApp连接不断在服务器之间切换

n53p2ov0  于 2022-12-24  发布在  其他
关注(0)|答案(1)|浏览(130)

我们有一个ASP.NET WebForms网站在Azure WebApp中运行,并启用了自动“横向扩展”。我可以看到当前有两个示例正在运行。我们有一个测试页,其中包含以下代码:

Request.ServerVariables["LOCAL_ADDR"]

如果我们不断刷新此页面,IP会在两个不同的值之间随机切换(可能是针对正在运行的两个不同网站示例)。这会破坏依赖于会话的功能,因为会话是特定于服务器的。
1.有没有一种方法可以让用户在同一台服务器上,而不是为每个请求将他们连接到一个随机的服务器上?(我知道这不能完全解决问题,所以我的下一个问题是......)
1.启用了“横向扩展”功能的Session对象是否不可行?如果不可行,还有哪些其他选择?如果我们使用Cookie,我担心会达到数据限制,因为我们偶尔会使用Session来短期保存大型数据集。如果我们使用Redis缓存,它会增加我们的运营成本。有没有更好的方法来做到这一点?

rdrgkggo

rdrgkggo1#

Azure App Service中,我们需要启用ARR Affinity以使会话在一个服务器中保持活动状态。
请求路由的应用程序标识用户并分配关联Cookie。客户端与当前示例建立会话,并保持示例活动,直到会话过期。

  • scale out应用服务示例时,ARR affinity将不起作用;当我们横向扩展时,将创建应用服务服务器的新示例,如果请求转到新服务器,ARR Affinity将失败。

谢谢@ajkuma-MSFT
如果我们的应用程序是有状态的,向上扩展将是最好的选择,如果我们的应用程序是无状态的,向外扩展将提供更大的灵活性和更好的可伸缩性潜力。
通过将现有App Service plansizeSKU提升到具有更多计算和功能的更高层,然后启用ARR affinity,我们可以使用Scale upApp Services plan,这有助于会话在一台服务器中保持活动和持久性。
如果我们使用像Redis缓存这样的东西,它会增加我们的运营成本。
谢谢@Praveen Kumar Sreeram
当你使用自动伸缩功能配置负载均衡器时,“会话”将不会按计划在Azure应用服务中工作。另一个选项是使用Redis缓存。
目前我使用的是标准层S1。

  • 使用自动缩放规则,我们可以在不需要时缩放。
  • 最高可扩展到Standard S3

对于每个请求,一个affinity cookie将被关联到应用服务器,即使应用接收重复的请求;这将保持会话的持久性和活动性。由于不会创建应用服务器的新示例,因此应用会话将由于ARR affinity而保持活动。
参考取自Microsoft Q&A

相关问题