我正在尝试理解分布式缓存的基本概念及其用法。
首先,分布式缓存是一群机器,它们共同充当所有客户端的大缓存,还是客户端保留其本地缓存,一个协调器简单地向所有客户端发送更新,说明如何同步其本地副本?
其次,如果缓存是一组维护缓存数据的分布式机器,为什么我们不直接向DB发送查询,而是通过网络将请求发送到缓存?我猜性能开销可能是相似的……
最后,分布式缓存的主要好处是什么,即为什么人们不坚持传统的本地缓存模型?
非常感谢您提供的所有答案/资源。
发布于 2013-05-29 05:16:59
我将使用Couchbase作为分布式缓存(http://www.couchbase.com/)的示例。
第一个问题:分布式缓存如何协调数据?
回答:通常分布式缓存实际上是许多机器充当一个逻辑单元。因此,您可能有五台计算机都在运行Couchbase,它们会为您提供数据完整性和冗余。换句话说,如果一台机器死了,你仍然可以从集群中获取数据。(是的,每个节点都有一份数据副本,以防出现故障。)
一些集群机器会在集群中的机器前面有一个进程来路由请求,有时您使用多个连接字符串,客户端将轮询请求到集群。这取决于技术。
第二个问题:既然缓存都通过网络,为什么要使用缓存?
回答:相当多的分布式缓存技术只存在于内存/内存中。它们永远不需要到磁盘上进行查询,因此它们比典型的数据库更快。
此外,数据库通常需要做一些工作来连接来自多个表的数据,而缓存通常只将数据存储在键/值中。这意味着缓存永远不需要实际处理任何东西。它只是做直接的查找,这是便宜的。
第三个问题:为什么使用分布式缓存而不是本地缓存?
回答:当您开始扩展时,您将需要一个分布式缓存。
首先,缓存可能会变得非常大,如果它只在内存中运行,它将与您的web服务器(或其他任何服务器)竞争资源。最好有一台专门用于缓存的机器。
其次,缓存的可伸缩性与堆栈中的其他技术不同。对于每十个web服务器节点,您可能只需要四个缓存节点。最好还是分开吧。
最后,您希望任何客户端都能够连接并获取最新数据。否则,如果用户在web场中从一台web服务器跳到另一台服务器,缓存的数据可能会有很大的不同。
发布于 2013-05-29 18:16:29
回答你的第二个问题(基于你对Ryan1234的回应):是的,你确实必须连接到缓存服务器,如果你有一个数据库,你也必须连接到缓存服务器,但这是“从哪里检索数据”部分造成了性能上的差异;所以数据库是基于磁盘的,而分布式缓存是基于内存/内存的。客户之所以依赖缓存,是因为数据库在连接方面的资源有限:连接越多,对数据库的调用越多,性能就越慢,因此数据库将成为瓶颈。为了减轻数据库上的这种压力,缓存团队位于数据库的“顶部”,并将频繁访问的对象存储在内存中(取决于您的应用程序是事务性的还是引用的),现在您的应用程序不需要到DB获取这些对象。缓存的一个重要特性是它能够随着应用程序负载的增加或应用程序的扩展而线性扩展。因此,从本质上讲,您可以将更多服务器添加到缓存团队中,这些服务器将汇集内存资源并提高性能。
你的问题的第二部分更多的是关于本地缓存和分布式缓存。像NCache这样的缓存解决方案提供了一个“客户端缓存”,它将应用程序所需的数据的一个子集保存在与应用程序相同的服务器上,因此您的应用程序不必通过网络调用。同时,该客户端高速缓存与主高速缓存保持同步。
如果你想阅读更多关于这方面的细节,请阅读Scalable WCF Applications Using Distributed Caching
https://stackoverflow.com/questions/16796333
复制相似问题