我们有一个ASP.NET WebForms网站在Azure WebApp中运行,并启用了自动“横向扩展”。我可以看到当前有两个示例正在运行。我们有一个测试页,其中包含以下代码:
Request.ServerVariables["LOCAL_ADDR"]
如果我们不断刷新此页面,IP会在两个不同的值之间随机切换(可能是针对正在运行的两个不同网站示例)。这会破坏依赖于会话的功能,因为会话是特定于服务器的。
1.有没有一种方法可以让用户在同一台服务器上,而不是为每个请求将他们连接到一个随机的服务器上?(我知道这不能完全解决问题,所以我的下一个问题是......)
1.启用了“横向扩展”功能的Session对象是否不可行?如果不可行,还有哪些其他选择?如果我们使用Cookie,我担心会达到数据限制,因为我们偶尔会使用Session来短期保存大型数据集。如果我们使用Redis缓存,它会增加我们的运营成本。有没有更好的方法来做到这一点?
1条答案
按热度按时间rdrgkggo1#
在
Azure App Service
中,我们需要启用ARR Affinity
以使会话在一个服务器中保持活动状态。请求路由的应用程序标识用户并分配关联Cookie。客户端与当前示例建立会话,并保持示例活动,直到会话过期。
scale out
应用服务示例时,ARR affinity
将不起作用;当我们横向扩展时,将创建应用服务服务器的新示例,如果请求转到新服务器,ARR Affinity
将失败。谢谢@ajkuma-MSFT
如果我们的应用程序是有状态的,向上扩展将是最好的选择,如果我们的应用程序是无状态的,向外扩展将提供更大的灵活性和更好的可伸缩性潜力。
通过将现有
App Service plan
的size
和SKU
提升到具有更多计算和功能的更高层,然后启用ARR affinity
,我们可以使用Scale up
App Services plan
,这有助于会话在一台服务器中保持活动和持久性。如果我们使用像Redis缓存这样的东西,它会增加我们的运营成本。
谢谢@Praveen Kumar Sreeram
当你使用自动伸缩功能配置负载均衡器时,“会话”将不会按计划在Azure应用服务中工作。另一个选项是使用Redis缓存。
目前我使用的是标准层S1。
Standard S3
。对于每个请求,一个
affinity cookie
将被关联到应用服务器,即使应用接收重复的请求;这将保持会话的持久性和活动性。由于不会创建应用服务器的新示例,因此应用会话将由于ARR affinity
而保持活动。参考取自Microsoft Q&A