在集群环境中caching

将数据caching在应用程序代码中通常是一个好主意,原因很多。 我们已经在包括ColdFusion,.NET和PHP在内的共享环境中安静地进行了一段时间。 但是,由于我们与我们组织中的许多其他开发小组共享这种环境,所以我们(或我们的客户)欣赏的停机时间明显更多。

因此,我们的网站pipe理员正在实施一个新的环境。 在这个环境中,他们在当前的Dev和Prod环境之间添加QA级别。 而且,为了增加正常运行时间,他们在QA和Prod两个层面都是集群机器。

这很好,原因很多。 我看到一个问题的一个领域是caching。 将有两个(或更多取决于节点数量)caching集。 你可以想象,这会产生以下潜在的问题。 用户1更新数据,从而在节点A上更新caching。用户2来查询数据,但在节点B上,因此得到的是旧数据。

他们是如何处理这个问题的最佳实践?

我的代码中是否有任何types的更改?

有没有可以实施的服务器设置?

你不会说什么被caching或如何,所以我们会在黑暗中拍摄一点点。

典型的集群caching解决scheme将负责确保集群中的所有成员都具有一致的数据视图。 例如, memcached是应用程序数据caching的常见解决scheme,并且来自一个集群成员的更新将立即对其他集群成员可见。

如果您正在caching生成的网页,则解决scheme通常只caching不变的数据或具有明确定义的到期时间的数据。 每个请求不同的数据通常不会被caching。 这样可以提高Web应用程序的性能,因为像图像,样式表和JavaScript这样的常见项目的提取可以来自caching,而自定义用户HTML则是从后端提取的。 或者,如果用于生成页面的数据已更改,则某些解决scheme可能会使caching无效。

你知道这个集群是如何完成的吗? 例如,如果您通过在硬件负载平衡器后面粘贴一个组来“集群”您的Web服务器,则客户端将保持与单个后备服务器的连接,因此不会有caching问题。