代码之家  ›  专栏  ›  技术社区  ›  Pete Nelson

网络农场中的非充气策略

  •  4
  • Pete Nelson  · 技术社区  · 16 年前

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

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

    我一直在想的一些场景…

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

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

    第2个问题的一些解决方案是使用IStaTelessSession,因此我们不进行任何缓存,而且nhibernate总是直接从数据库中获取数据。这可能是最可行的,因为我们的个性化数据库中的对象非常少。我也在考虑第二级缓存,如memcached或velocity,但对于这个系统来说,这可能是杀伤力太大了。

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

    2 回复  |  直到 16 年前
        1
  •  2
  •   Samuel Goldenbaum    16 年前

    我是不是漏掉了什么东西,我觉得网络服务器上的nhibernate没有问题。 应用程序缓存不会是问题,因为每个nhibernate框都会保留自己的缓存,该缓存将从数据存储中填充。请查看创建一个可以监视的表,以了解执行缓存刷新的原因。我们曾经使用.NET 2.0中的cacheDependency类来完成此操作,该类将检测列的更改,然后从缓存中移除相关项。因此,如果用户插入一个新产品,那么缓存将被删除,并且下次调用以获取产品时,将再次加载缓存。它很旧,但是看看: http://msdn.microsoft.com/en-us/magazine/cc163955.aspx#S2 对于这个概念。干杯

        2
  •  2
  •   pdr    16 年前

    我建议在不进行缓存成为问题之前不要进行缓存。你的数据库会自己做缓存来保存你重复搜索相同数据的过程,所以你唯一需要担心的就是数据的传输。从你的描述来看,你不会有问题的。如果您到了这样的阶段,请使用分布式缓存-允许服务器单独缓存将导致刷新时出现跳跃数据问题。

    推荐文章