2014-02-12 40 views
0

我们目前有一个网站托管在一台服务器上,我们正在考虑添加一台新服务器。主要问题是关于缓存。有些项目会根据更改时间进行缓存。但是现在,它们在相同的过程中被改变,因此缓存可以失效。处理与多个服务器的陈旧缓存

如果网站托管在两台服务器上,可以在两台服务器上完成更改,并且不会通知这些更改。缓存需要保留,因为它大大加快了网站的速度。我宁愿如果缓存不在缓存服务器中进行进程外,因为它会降低网络速度而不是内存速度,并增加服务器的复杂性。

该网站是在.Net中实现的,使用MySQL作为其备份数据存储。我的问题是如何在数据更改时通知流程。当数据发生变化时,MySQL是否有可能自动通知所有已注册的客户端?我使用了RavenDb,它具有类似的功能,非常方便。我找不到任何类似于MySQL的东西。如果这是不可能的,任何想法如何解决这个问题?

回答

1

分布式缓存是一个复杂的话题。这听起来像你正在运行一个更基本的内存缓存。如果是这种情况,您需要自己处理同步,或者对数据的“最终一致性”感到满意,假设您有一些过时的密钥检查机制。

就我个人而言,我会研究使用memcached(我们使用Couchbase)。您对此成为网络瓶颈的看法可能未被实现,但是实际情况是,内存访问速度更快。实际上,我们注意到Couchbase缓存的速度足够快,并且在关键级别上是原子性的。它将处理节点上的密钥分发。

至于MySQL推送通知给客户端,我不知道,但我不这么认为。如果你有一层代码(DAL等)通过数据库访问,你可以自己模拟它。

要使缓存遵循与数据库相同的完整性原则,也很难调和。如果你做到了这一点,那么你所做的全部都是内存数据库。缓存应该是一段时间内数据准确性的折衷,以提高可伸缩性。

+0

是的,我正在运行一个基本的内存中缓存。问题是这是一个旧的代码库,并且缓存中的一些对象不容易序列化。因此,内存工作正常,但进程外需要它们是可序列化的。 Couchbase似乎是NoSQL数据库,而不是缓存服务器?我认为现在我不得不面对最终的一致性。如果数据库服务器支持更改通知,这将是实施的一块蛋糕。不幸的是MySQL似乎没有。 –

+0

@KarlCassar Couchbase是一种介于两者之间的产品。它在底层使用了memcached,但在关键级别提供了光盘支持和原子性,因此它是一种温和的内存数据库。我们倾向于使用它的缓存面比光盘背面更多。 –