多个 Azure Web 应用程序实例 - 不一致的数据库查询/数据

Multiple Azure Web App Instances - Inconsistent DB Queries / Data

我有一个 Azure Web 应用程序,它配置了至少 2 个实例的自动缩放。数据库是 SQL Azure。

用户将对数据进行更改,例如编辑产品的价格。更改将进入数据库,我可以在 SSMS 中看到它。但是,在用户刷新页面后,数据可能会或可能不会更新。

我目前的理论是与拥有多个网络应用程序实例有关,因为如果我关闭自动缩放并只有 1 个实例,问题就消失了。

我根本没有在 Azure 中配置任何类型的缓存。

听起来好像是数据可能会或可能不会出现,因为它存储在工作服务器的内存中(至少是暂时的)。当您有多个工作服务器时,不同的服务器可能会处理请求,在这种情况下,该服务器不会在内存中具有该值。解决方案是确保您的应用程序代码在每种情况下都从数据库中重新获取值。

Azure Web Apps 有一些针对此的内置保护,称为 ARR 亲和性 cookie。基本上每个请求都有一个 cookie 来保持会话 "sticky"。即,如果工作服务器正在为某个用户提供请求,则该用户也应该从该服务器接收后续请求。这是默认行为,但您可能已将其禁用。参见:https://azure.microsoft.com/en-us/blog/disabling-arrs-instance-affinity-in-windows-azure-web-sites/