如何根据分布式哈希表(如memcache)制作APC缓存?

时间:2012-07-20 17:56:32

标签: memcached hashtable apc

我已经阅读了an article about Distributed Hash Tables,似乎可以用APC实现像memcache这样的东西。如您所知,如果我们从单个服务器获取密钥,APC比memcache快得多。因此,如果我们分发APC,我们既有性能又有分布。我需要一些想法来启动它。熟悉哈希表的人可以解释一下如何做到这一点吗?如何让APC像memcache一样? 如果您对keyspace partitioningOverlay network有所了解,那会更好。

1 个答案:

答案 0 :(得分:1)

尽管表面上两个软件都提供了类似的服务,但它们的基础完全不同,这解释了性能的巨大差异。

APC基本上是一个允许您在共享内存中存储对象(无论是用户对象还是已解析的操作码块)的系统。在我所知道的所有系统中,共享内存在获得指向它的指针后,与本地RAM一样快。

因此,简而言之,APC编写或读取对象所需要做的是:

  • 请求shm访问并获取指向它的指针
  • 在shm中计算对象偏移量和大小
  • memcpy将内存区域放入缓冲区或反之亦然
  • 完成

简单,并考虑到现在的内存带宽是每秒10千兆字节,快速。

由于其在memcache场景中的分布式特性,还需要做更多的工作:

  • 客户端编码并传输请求
  • 服务器接收并解码请求
  • 服务器计算memcached内存中的对象偏移量和大小
  • 服务器memcpy将该内存区域放入缓冲区,反之亦然
  • 服务器传输缓冲区
  • 客户端接收并解码缓冲区

现在,如果我们要分发APC,客户端和服务器将需要相互通信。突然之间,我们发现自己处于一个场景中,除了一些不太重要的细节外,它与memcache使用的场景相同。并且所有昂贵的操作将再次成为必要,即所有复制,包括通过网络堆栈发送。

这也解释了为什么即使在localhost上运行memcache实例,节点之间没有非常缓慢的千兆以太网,也需要做大量的开销才能使分布式系统工作。

这就是为什么我说服你在这里查看错误的嫌疑人,让APC分发并且它将处于相同的性能/吞吐量类别。