【问题标题】:Distributed cache - basic concepts分布式缓存 - 基本概念
【发布时间】:2013-05-23 16:15:06
【问题描述】:

我正在尝试了解分布式缓存的基本概念及其用法。

首先,分布式缓存是一组机器,它们共同充当所有客户端的大缓存,或者客户端是否保留其本地缓存,并且一个协调器只需向所有客户端发送更新,说明如何同步其本地缓存复制?

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

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

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

【问题讨论】:

    标签: caching distributed-computing


    【解决方案1】:

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

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

    答案: 通常分布式缓存确实是多台机器充当一个逻辑单元。因此,您可能有五台计算机都在运行 Couchbase,它们会为您处理数据完整性和冗余。换句话说,如果一台机器死了,你仍然可以从集群中获取数据。 (但是是的,每个节点都会有一个数据副本,以防万一发生故障。)

    一些集群机器会在集群中的机器前面有一个进程来路由请求,有时您使用多个连接字符串,客户端会将请求轮询到集群。只是取决于技术。

    第二个问题:为什么要使用缓存,因为它是通过网络传输的?

    答案: 相当多的分布式缓存技术仅存在于 RAM/内存中。它们永远不必去磁盘进行查询,因此它们比典型的数据库更快。

    此外,数据库通常需要做一些工作来将来自多个表的数据连接在一起,而缓存通常只是将数据存储在键/值中。这意味着缓存永远不必实际处理任何内容。它只是进行廉价的直接查找。

    第三个问题: 为什么分布式缓存优于本地缓存?

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

    首先,缓存会变得非常大,如果它只在内存中运行,它将与您的 Web 服务器(或其他任何东西)竞争资源。最好有一台专门用于缓存的机器。

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

    最后,您希望任何客户端都能够连接并获取最新数据。否则,如果用户在网络场中从一台网络服务器跳转到另一台网络服务器,缓存的数据可能会完全不同。

    【讨论】:

    • 感谢您的出色回答。我对内存中的分布式缓存感到困惑。由于我们有一个专用的机器集群,我们的机器将“连接”到它以查询缓存,那么在这种情况下“内存中”属性怎么可能呢?我们只是在查询充当缓存的其他机器/服务器,所以缓存不会驻留在我们自己的内存中,对吧?
    • 正确。客户端(让我们假设一个 Web 服务器)不会在其内存中存储任何内容。 “内存中”部分位于集群中的专用缓存机器上。您仍然需要付出代价才能上网。好消息是客户端(在这种情况下)不必与缓存竞争 RAM。如果可以做 Web 服务器的事情,而不用担心将缓存的对象保存在内存中。
    【解决方案2】:

    要回答您的第二个问题(基于您对 Ryan1234 的回复):是的,您必须连接到缓存服务器,如果您有数据库,您也必须连接到该服务器,但它是“在哪里数据是从导致性能差异的部分检索的;所以数据库是基于磁盘的,而分布式缓存是基于 RAM/内存的。客户之所以依赖缓存,是因为 DB 在连接方面的资源有限:连接越多,对 DB 的调用越多,性能就越慢,因此您的 DB 将成为瓶颈。为了减轻对数据库的压力,缓存层位于数据库的“顶部”,并将经常访问的对象存储在内存中(取决于您的应用程序是事务性的还是引用性的),现在您的应用程序不需要去数据库来获取这些对象。缓存的一个重要特性是它能够随着应用程序负载的增加或应用程序的扩展而线性扩展。因此,本质上,您可以将更多服务器添加到缓存层,这些服务器将汇集内存资源并提高性能。

    您问题的第二部分更多的是本地缓存和分布式缓存。有像NCache 这样的缓存解决方案提供“客户端缓存”,将应用程序所需的数据子集保存在与应用程序相同的服务器上,因此您的应用程序不必通过网络调用。同时这个客户端缓存与主缓存保持同步。

    如果您想了解更多详情,请阅读Scalable WCF Applications Using Distributed Caching

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-08
      • 2016-07-06
      相关资源
      最近更新 更多