我正在调查 Windows azure 中的一项新产品。特别是“网站”,我无法找到有关它如何处理会话数据的任何信息。有人知道吗?我将滑块移动到 2 个实例,这一切似乎都“正常工作”,但如果我确定它正在共享会话数据(或不共享会话数据?),我会觉得使用它会更好
5 回答
你有一些选择来解决这个问题
sql解决方案
表存储解决方案
内存缓存解决方案
Sql是经典的解决方案。Sql 处理所有带有经典 sql 请求的会话。
表存储可以创造奇迹(根据我的经验)。它真的很容易扩展并且很容易实现(只需在你的 webconfig 上写几行代码)。
Memcache解决方案是最好的解决方案。Azure 提供了一组“缓存服务器”来存储会话(或其他可序列化对象)。它真的很容易扩展并且运行速度非常快。我在我的生产环境中使用这个解决方案,有 0 个问题和非常好的性能结果。
为了实现 Memcache,您只需在 web.config 中添加这些行:
<configuration>
<configSections>
<section name="dataCacheClients" type="Microsoft.ApplicationServer.Caching.DataCacheClientsSection, Microsoft.ApplicationServer.Caching.Core" allowLocation="true" allowDefinition="Everywhere"/>
<!-- more config sections here -->
</configSections>
<dataCacheClients>
<dataCacheClient name="default">
<hosts>
<host name="YOUR_NAME_HERE.cache.windows.net" cachePort="YOUR_PORT_HERE"/>
</hosts>
<securityProperties mode="Message">
<messageSecurity authorizationInfo="YOUR_KEY_HERE">
</messageSecurity>
</securityProperties>
</dataCacheClient>
</dataCacheClients>
<!-- more configurations here -->
概括
如果您不关心成本并且希望尽可能获得最佳性能,请选择 memcache 解决方案。如果您需要将成本保持在非常低的水平,请选择表格存储。
如果您想了解有关 Windows Azure 网站架构的更多信息,我建议您观看 TechEd 2012 Windows Azure 网站的本次会议:幕后花絮
由于上面链接的视频已经过时了,我想我会分享我在 Azure 上找到的有关会话的内容。
Azure 使用Application Request Routing。
ARR 通过给他们一个特殊的cookie(称为affinity cookie)巧妙地跟踪连接的用户,它允许它在后续请求时知道他们正在与哪个服务器实例通信。这样,我们可以确定,一旦客户端与特定服务器实例建立会话,只要会话处于活动状态,它就会继续与同一服务器对话。
参考: https ://azure.microsoft.com/en-us/blog/disabling-arrs-instance-affinity-in-windows-azure-web-sites/ 。
你的目标是 ASP.NET 4.5 吗?
如果您没有使用 4.5 显式配置任何提供程序,它将默认使用现在包含在 Machine.config 中的 ASP.NET 通用提供程序。因此默认情况下它将使用 SQL 会话状态提供程序。不过,我希望它使用本地数据库,所以我不确定它将如何共享状态。
您可以通过打开一些会话来测试它,然后将实例数减至 1,然后查看某些会话是否丢失状态。
负载均衡器可能正在使用会话亲和性,在这种情况下,您可能不会注意到它是否不共享会话状态。
你有多少个网络角色?如果将其保持为 1,则应该没问题,但是您可以在此处阅读有关多个 Web 角色将如何创建相同的会话状态问题的详细信息,如果您正在运行 Web 场,您会遇到......当运行 Web农场一个选项是在你的数据库中保持会话状态。所以你可以想象,如果你需要运行多个 Web 角色,那么你可以依靠 sql Azure(虽然表存储真的很酷,并且可能非常适合会话状态之类的东西)
但要更直接地回答您的问题,您可以使用多个 Web 角色来分配处理负载,而Web 角色只是“IIS 内部托管的前端 Web 应用程序和内容”。同样,如果您只使用一个网络角色,那么您的应用程序可能运行良好。但请注意,如果您需要扩展您的 Web 角色,它将阻碍您的会话持久性。