2010-08-02 53 views
2

3台服务器从单一服务器转换到负载均衡环境的任何建议?负载均衡环境中的Asp.net会话管理

我考虑过使用Sql Server会话管理,但我在存在序列化问题的会话中存储linq2sql对象。通过快速搜索,我发现了一个workaround。但我怀疑使用这种方法考虑了代码更改/可读性/性能问题。欢迎任何建议。

+0

你为什么要在'session'中存储linq2sql对象?首先,通常这应该保存在缓存中,其次,理想情况下,您不应该缓存linq2sql对象 - 要么将它们投影到POCO中,要么投影到通用集合中(例如List )。如果您担心序列化,那么在中间框上使用ASP.NET状态服务 - 将所有其他服务器指向该服务器(以便共享会话)。但当然如果这个盒子出现故障,请告诉任何当前会话。 – RPM1984 2010-08-02 23:32:50

+0

- 这些是用户将其提交到数据库之前的用户/表单特定数据。- 所有对象的类型为集合。这些对象之间的关系在层之间传递时仍然存在(序列化问题的原因) - 我认为状态服务也会进行序列化。可能是我错了 – Syam 2010-08-02 23:43:39

+0

你是对的,它确实做了序列化,只是从经验来看,我曾经在sql状态中遇到过麻烦(会话过期无故)。 – RPM1984 2010-08-03 00:23:14

回答

3

只是一个建议:你不能在你的负载均衡器中使用粘性会话吗?

+0

我使用inproc到现在。我不知道如何在asp.net中使用粘性会话。有没有办法访问和修改负载均衡器中的会话? – Syam 2010-08-02 23:32:04

+0

@Syam,这必须在负载均衡器上进行配置。我们在三台服务器的生产中使用它。大多数硬件和软/硬件负载平衡器都可以做到这一点。请参阅http://en.wikipedia.org/wiki/Load_balancing_(computing)#Persistence – madaboutcode 2010-08-03 00:17:38

+0

我刚刚与网络团队确认了粘性会话。这解决了我的问题。非常感谢 – Syam 2010-08-03 18:36:55

2

我们使用memcached,但它听起来像是你希望某些东西成为你的应用程序的一个更关键的部分,而不仅仅是缓存,如果你将LINQ to SQL对象放在那里(并且我btw同意你应该考虑退出RPM的业务...)

无论如何,this is a nice blog post,给你几个选择。因为它是微软提供的(这是一个asp.net应用程序),Velocity绝对是一个值得关注的东西,而且这些日子似乎正在变得越来越流行。

+0

我喜欢这个解决方案,但是我的问题似乎比这更简单。 @LightX建议我为这个问题使用粘性会话。非常感谢。正如我所提到的,我正在使用收集对象来存储会话。这些表之间的关系是曾经造成序列化的痛苦 – Syam 2010-08-03 18:42:58