2010-01-12 70 views
4

我们当前的工作项目是一个新的MVC网站,它将使用WCF服务,主要通过Web服务访问第三方帐单系统以及用于用户个性化的小型SQL数据库。 WCF服务使用nHibernate作为SQL数据库。网络农场中的nHibernate策略

我们希望实施某种网络服务器场以实现负载平衡以及故障转移和维护。如果有多个WCF服务在运行,我正试图决定处理nHibernate缓存和数据库并发的最佳方式。

有些场景我一直在想......

1)多IIS服务器,一个服务器WCF。通过这种设置,WCF服务器将成为单点故障,但nHibernate缓存或数据库并发将不存在问题。

2)多个IIS服务器,每个服务器都有自己的WCF服务。这消除了单点故障,但是现在,一台机器上的nHibernate不会知道另一台机器所做的数据库更改。

对于数字2的一些解决方案是使用IStatelessSession,所以我们没有做任何缓存,nHibernate总是直接从数据库中获取。这可能是最可行的,因为我们的个性化数据库中只有很少的对象。我也在考虑一个二级缓存,比如memcached或者Velocity,但是对于这个系统来说这可能是过度的。

我在这里看看有没有人有过这样的体系结构的经验,并得到一些解决方案的想法。谢谢!

+0

“但我用nHibernate实现了一个二级查询缓存,并且它工作得很好。”我可以问哪个二级缓存实施你去了,为什么? – 2010-03-20 19:55:07

+0

Memcahced http://memcached.org/ – 2010-03-22 13:53:48

回答

2

我错过了这里的东西,我没有看到与网络服务器上的nhibernate问题。 应用程序缓存不会成为问题,因为每个nhibernate盒都会保留它自己的缓存,该缓存将从数据存储区填充。看看创建一个可以监视的表格,以便进行缓存刷新。我们曾经使用.net 2.0中的CacheDependency类来完成此操作,该类将检测对列的更改,然后从缓存中删除相关项目。所以如果用户插入新产品,则缓存将被丢弃,下一次获取产品的调用将再次加载缓存。这是旧的,但检查:概念的http://msdn.microsoft.com/en-us/magazine/cc163955.aspx#S2。欢呼声

+1

您的回答促使我在nHibernate中进行一级和二级查询缓存,多个WCF服务的测试,在详细控制台模式下运行SQL Profiler和memcached,进行更多的研发工作。这有助于我更好地理解nHibernate在缓存中的作用,以及我的WCF代码中的会话管理缺陷。 – 2010-02-19 15:27:12

2

我会建议不要缓存,直到不做缓存成为一个问题。您的数据库将自行缓存,以避免您重复搜索相同的数据,因此唯一需要担心的是数据通过线路传输。根据你的描述来判断,你不会在那里遇到问题。如果你进入了一个阶段,使用分布式缓存 - 允许你的服务器单独缓存会导致刷新时弹出数据问题。

+1

这绝对是一个好点。由于我们处理的数据量很小,缓存可能不是必需的,但我使用nHibernate实现了二级查询缓存,并且它工作得很好。 – 2010-02-19 15:28:42