分布式缓存 - 基本概念

12

我正努力理解分布式缓存及其使用的基本概念。

首先,分布式缓存是一组机器集群,它们共同作为所有客户端的一个大缓存,还是客户端保留其本地缓存,而一个协调员只是向所有客户端发送更新,说明如何同步其本地副本?

其次,如果缓存是维护缓存数据的分布式机器集合,为什么我们不直接将查询发送到数据库,而是通过网络将请求发送到缓存?我想性能开销可能是相似的...

最后,分布式缓存的主要好处是什么,即为什么人们不坚持传统的本地缓存模型?

非常感谢您提供的所有答案/资源。

2个回答

6

我将以Couchbase作为分布式缓存的例子 (http://www.couchbase.com/)。

第一个问题:分布式缓存如何协调数据?

回答:通常,分布式缓存实际上是多台计算机作为一个逻辑单元。因此,您可能有五台计算机都在运行Couchbase,并为您处理数据完整性和冗余。换句话说,如果一台计算机出现故障,您仍然可以从集群中获取数据。(但是是的,在发生故障时,每个节点都会有数据副本。)

一些集群化的计算机将在集群中的计算机前面具有一个处理进程来路由请求,有时您会使用多个连接字符串,客户端将轮询将请求发送到群集中。这取决于技术。

第二个问题:既然所有内容都通过网络传输,为什么还要使用缓存?

回答:许多分布式缓存技术都只存在于RAM/内存中。它们永远不必为查询访问磁盘,因此它们比典型的数据库更快。

此外,数据库通常必须执行一些工作来从多个表中将数据组合在一起,而缓存通常只是将数据存储在键/值中。这意味着缓存永远不必真正处理任何东西。它只需要进行廉价的直接查找。

第三个问题:为什么要使用分布式缓存而不是本地缓存?

回答:当您开始扩展时,您将需要分布式缓存。

首先,缓存可以变得非常大,如果只在内存中运行,则会与Web服务器(或其他内容)竞争资源。最好有一个专用于缓存的机器。

其次,缓存将以不同于您的堆栈中的其他技术的方式扩展。您可能只需要每十个Web服务器节点就有四个缓存节点。最好分开。

最后,您希望任何客户端都能够连接并获取最新的数据。否则,如果用户从Web农场中的一个Web服务器跳转到另一个Web服务器,缓存数据可能会有很大不同。


感谢您提供的出色答案。我对内存分布式缓存感到困惑。由于我们拥有一个专用的机器群集,我们的机器将“连接到”以查询缓存,那么在这种情况下,“内存”属性如何实现呢?我们只是查询充当缓存的其他机器/服务器,因此缓存不驻留在我们自己的内存中,对吗? - Bober02
2
正确。客户端(假设是Web服务器)不会在其内存中存储任何内容。 “内存”部分位于集群中的专用缓存机器上。您仍然需要支付网络传输的费用。好处是客户端 - 在这种情况下 - 不必与缓存竞争RAM。它可以执行Web服务器任务,而不必担心将缓存对象保留在内存中。 - ryan1234

4
回答您的第二个问题(基于您对Ryan1234的回应):是的,您需要连接到缓存服务器,如果您有一个数据库,您也需要连接到该数据库,但“数据检索来源”是性能差异的关键;因此,数据库是基于磁盘的,而分布式缓存是基于RAM/内存的。客户之所以依赖缓存是因为DB在连接方面具有有限的资源:越多的连接和越多的调用,DB的性能就会变得越慢,因此您的DB将成为瓶颈。为了减轻DB的压力,缓存层位于DB的“顶部”,并将频繁访问的对象存储在内存中(取决于您的应用程序是事务性还是引用性),现在您的应用程序无需访问DB即可获取这些对象。缓存的一个重要特征是其能够随着应用程序负载的增加或应用程序扩展时呈线性扩展。因此,您可以向缓存层添加更多服务器,这些服务器将汇集内存资源并提高性能。

你提问的第二部分更多涉及本地缓存和分布式缓存。像NCache这样的缓存解决方案提供了“客户端缓存”,它在应用程序所在的同一服务器上保留了应用程序所需的一部分数据,因此你的应用程序不必进行网络调用。同时,该客户端缓存与主缓存保持同步。

如果你想了解更多详细信息,请阅读使用分布式缓存构建可伸缩的 WCF 应用程序


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接