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