3

我们当前的工作项目是一个新的 MVC 网站,它将主要使用 WCF 服务通过 Web 服务以及用于用户个性化的小型 SQL 数据库访问第 3 方计费系统。WCF 服务将 nHibernate 用于 SQL 数据库。

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

我一直在考虑的一些场景...

1) 多台 IIS 服务器,一台 WCF 服务器。使用此设置,WCF 服务器将成为单点故障,但不会出现 nHibernate 缓存或数据库并发问题。

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

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

我把它放在那里,看看是否有人有做这种架构的经验,并获得一些解决方案的想法。谢谢!

4

2 回答 2

2

我在这里遗漏了什么吗,我没有看到网络服务器上的 nhibernate 有问题。应用程序缓存不会成为问题,因为每个休眠盒都会保留它自己的缓存,该缓存将从数据存储中填充。看看创建一个可以监控的表,以便进行缓存刷新。我们曾经使用 .net 2.0 中的 CacheDependency 类来执行此操作,该类将检测列的更改,然后从缓存中删除相关项目。因此,如果用户插入新产品,缓存将被删除,下一次获取产品的调用将再次加载缓存。它很旧,但请查看:http: //msdn.microsoft.com/en-us/magazine/cc163955.aspx#S2的概念。干杯

于 2010-02-10T09:41:06.623 回答
2

我建议在不进行缓存成为问题之前不要进行缓存。您的数据库将进行自己的缓存,以节省您重复搜索相同数据的时间,因此您唯一需要担心的是网络上的数据。从你的描述来看,你不会有问题。如果您达到了您这样做的阶段,请使用分布式缓存 - 允许您的服务器单独缓存将导致您在刷新时出现反弹数据问题。

于 2010-02-17T00:02:01.623 回答