5

我正在调查 Windows azure 中的一项新产品。特别是“网站”,我无法找到有关它如何处理会话数据的任何信息。有人知道吗?我将滑块移动到 2 个实例,这一切似乎都“正常工作”,但如果我确定它正在共享会话数据(或不共享会话数据?),我会觉得使用它会更好

4

5 回答 5

5

你有一些选择来解决这个问题

  1. sql解决方案

  2. 表存储解决方案

  3. 内存缓存解决方案

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 解决方案。如果您需要将成本保持在非常低的水平,请选择表格存储。

于 2012-12-01T09:15:23.280 回答
5

如果您想了解有关 Windows Azure 网站架构的更多信息,我建议您观看 TechEd 2012 Windows Azure 网站的本次会议:幕后花絮

于 2012-12-05T23:11:28.793 回答
2

由于上面链接的视频已经过时了,我想我会分享我在 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/ 。

于 2016-02-23T17:56:02.060 回答
1

你的目标是 ASP.NET 4.5 吗?

如果您没有使用 4.5 显式配置任何提供程序,它将默认使用现在包含在 Machine.config 中的 ASP.NET 通用提供程序。因此默认情况下它将使用 SQL 会话状态提供程序。不过,我希望它使用本地数据库,所以我不确定它将如何共享状态。

您可以通过打开一些会话来测试它,然后将实例数减至 1,然后查看某些会话是否丢失状态。

负载均衡器可能正在使用会话亲和性,在这种情况下,您可能不会注意到它是否不共享会话状态。

于 2012-12-01T08:19:36.293 回答
-1

你有多少个网络角色?如果将其保持为 1,则应该没问题,但是您可以在此处阅读有关多个 Web 角色将如何创建相同的会话状态问题的详细信息,如果您正在运行 Web 场,您会遇到......当运行 Web农场一个选项是在你的数据库中保持会话状态。所以你可以想象,如果你需要运行多个 Web 角色,那么你可以依靠 sql Azure(虽然表存储真的很酷,并且可能非常适合会话状态之类的东西)

但要更直接地回答您的问题,您可以使用多个 Web 角色来分配处理负载,而Web 角色只是“IIS 内部托管的前端 Web 应用程序和内容”。同样,如果您只使用一个网络角色,那么您的应用程序可能运行良好。但请注意,如果您需要扩展您的 Web 角色,它将阻碍您的会话持久性。

于 2012-12-01T05:59:41.850 回答