【发布时间】:2011-04-06 12:31:33
【问题描述】:
我们有一个 ASP.Net [MVC] 网络场(运行 IIS 的 Windows Server 2008 R2)。我们希望在每个盒子之间共享会话状态。
我知道我们可以使用 SQL Server 做到这一点,但要理解这样做会产生开销(有人提到性能下降 25%)。
Memcachedb 不断被提及,但我似乎无法找到将其挂接到 ASP.Net 以用于会话状态的方法。
有人用 .Net 成功实现了 Memcachedb 吗?或者对于在所有盒子中存储会话状态的最佳方法是否有其他建议?
非常感谢
【问题讨论】:
-
我没有看到你说的这 25% 的性能下降......你能告诉我们你在哪里看到的吗?在我的 sql server 中,会话状态非常快,我什至不在乎。
-
我找不到明确表示 25% 的来源,但是这篇文章引用了“10%-25%”。在某些情况下我们使用复杂类型,我认为我们的命中率可能更高:idunno.org/articles/277.aspx - FTA:“使用 SQL 比使用 InProc 会话状态慢。当存储基本数据类型(字符串、整数等)时, ASP.Net 存储它们的值可能需要 10%-25% 的时间。复杂类型需要更长的时间。当然,因为您连接到单独的服务器,它确实会使用网络上的带宽。”
-
10%-25% 听起来太大了(但是...),我的网站需要 70 毫秒到 200 毫秒才能开始显示页面,并且我使用 sql 会话状态。现在 100 毫秒上的 10%,只是额外的 10 毫秒,太小而不能算作延迟。而且我的延迟不是来自会话状态。现在,如果您的一台服务器在欧洲而另一台服务器在美国,则使用 SQL 连接到另一台服务器是一个问题,您可能有 100 毫秒以上的延迟。但如果它们在同一建筑物上,则延迟为 0。
标签: asp.net session-state memcachedb