我读过一篇文章Distributed Hash Tables
,似乎可以用 APC 实现像 memcache 这样的东西。如您所知,如果我们从单个服务器获取密钥,APC 比 memcache 快得多。因此,如果我们使 APC 分布式,我们将同时拥有性能和分布。我需要一些想法来开始它。熟悉哈希表的人可以解释一下如何做到这一点吗?如何让 APC 像 memcache 一样?
如果你知道一些事情keyspace partitioning
,Overlay network
那就更好了。
问问题
263 次
1 回答
1
尽管从表面上看,这两种软件都提供了可比的服务,但它们的基础完全不同,这就解释了性能上的巨大差异。
APC 基本上是一个允许您将对象(无论是用户对象还是解析的操作码块)存储在共享内存中的系统。在我知道的所有系统中,共享内存在获得指向它的指针后与本地 RAM 一样快。
所以,简而言之,APC 必须做的就是写或读一个对象:
- 请求 shm 访问并获取指向它的指针
- 计算 shm 中的对象偏移量和大小
- memcpy 将该内存区域放入缓冲区,反之亦然
- 完毕
很简单,考虑到现在的内存带宽是每秒 10 GB,很快。
由于它在 memcache 场景中的分布式特性,需要做更多工作:
- 客户端对请求进行编码和传输
- 服务器接收并解码请求
- 服务器计算 memcached 内存中的对象偏移量和大小
- 服务器 memcpy 将该内存区域放入缓冲区,反之亦然
- 服务器发送缓冲区
- 客户端接收并解码缓冲区
现在,如果我们要分发 APC,客户端和服务器将需要相互通信。突然之间,我们发现自己处于一个场景中,除了一些不太重要的细节外,它与 memcache 使用的相同。并且所有昂贵的操作将再次变得必要,即所有复制,通过包含的网络堆栈发送。
这也解释了为什么即使在 localhost 上运行 memcache 实例,节点之间没有非常慢的千兆以太网,在使分布式系统工作时需要做的事情有相当大的开销。
这就是为什么我确信您在这里寻找错误的嫌疑人,使 APC 分布式并且它将属于相同的性能/吞吐量类别。
于 2012-07-20T21:37:57.657 回答