我试图了解分布式缓存的基本概念及其用法。
首先,分布式缓存是一组计算机,它们共同作为所有客户端的一个大缓存,或客户端保留其本地缓存,一个协调器只是向所有客户端发送更新,说明如何同步其LOCAL副本?
其次,如果缓存是维护缓存数据的分布式机器集,为什么我们不直接向DB发送查询,而是通过网络将请求发送到缓存?我猜性能开销可能类似......
最后,分布式缓存的主要好处是什么,即人们为什么不坚持使用传统的本地缓存模型?
非常感谢您提供的所有答案/资源。
答案 0 :(得分:5)
我将使用Couchbase作为分布式缓存(http://www.couchbase.com/)的示例。
第一个问题: 分布式缓存如何协调数据?
答案: 通常,分布式缓存 确实很多机器充当一个逻辑单元。因此,您可能有五台计算机都运行Couchbase,它们会为您处理数据完整性和冗余。换句话说,如果一台计算机死机,您仍然可以从群集中获取数据。 (但是,如果出现故障,每个节点都会有一份数据副本。)
某些群集计算机将在群集中的计算机前面有一个进程来路由请求,有时您使用多个连接字符串,客户端将循环访问群集的请求。只是取决于技术。
第二个问题: 为什么要使用缓存,因为它全部通过网络?
答案: 相当多的分布式缓存技术仅存在于RAM /内存中。他们永远不必转到磁盘查询,因此它们比典型的数据库更快。
数据库通常还需要做一些工作来从多个表连接数据,而缓存通常只是将数据存储在键/值中。这意味着缓存永远不必实际处理任何事情。它只是直接查找,价格便宜。
第三个问题: 为什么分布式缓存超过本地缓存?
答案: 当您开始扩展时,您将需要分布式缓存。
首先,缓存可能会变得非常大,如果它只在内存中运行,它将与您的Web服务器(或其他)竞争资源。最好有一台专门用于缓存的机器。
其次,缓存的扩展速度与堆栈中的其他技术不同。每十个Web服务器节点可能只需要四个缓存节点。最好分开。
最后,您希望任何客户端都能够连接并获取最新数据。否则,如果用户从Web服务器中的一个Web服务器跳转到另一个Web服务器,则缓存的数据可能会大不相同。
答案 1 :(得分:4)
回答你的第二个问题(根据你对Ryan1234的回应):是的,你必须要连接到缓存服务器,如果你有一个数据库,你必须连接到那个,但它的“从“产生性能差异的部分检索数据;所以DB是基于磁盘的,而分布式缓存是基于RAM /内存的。为什么客户依赖缓存是因为DB在连接方面的资源有限:连接越多,对数据库的调用越多,性能就越低,因此数据库将成为瓶颈。为了减轻DB上的压力,缓存teir位于DB的“顶部”,并将经常访问的对象存储在内存中(取决于您的应用程序是事务性的还是参考性的),现在您的应用程序无需转到DB来获取这些对象。缓存的一个重要特性是它能够随着应用程序负载的增加或应用程序扩展时的线性扩展。因此,基本上,您可以向缓存teir添加更多服务器,这些服务器将汇集内存资源并提升性能。
您问题的第二部分更多是本地缓存和分布式缓存。有一些缓存解决方案,如NCache,提供“客户端缓存”,可以将应用程序所需的数据子集保存在与应用程序相同的服务器上,从而使您的应用程序不必通过网络调用。同时,此客户端缓存与主缓存保持同步。
如果您想了解更多详细信息,请阅读Scalable WCF Applications Using Distributed Caching