我读过an article about Distributed Hash Tables
,似乎可以像APC一样实现memcache之类的东西。如您所知,如果我们从单个服务器获取密钥,APC比memcache快得多。所以如果我们让APC分布式的话,我们既有性能又有分布。我需要一些想法来启动它。熟悉哈希表的人可以解释如何做到这一点?如何使APC像memcache一样?
如果您对keyspace partitioning
和Overlay network
有所了解,那将会更好。如何基于分布式散列表(如memcache)制作APC缓存?
回答
虽然表面上两个软件都提供了类似的服务,但它们的基础却完全不同,这就解释了性能的巨大差异。
APC基本上是一个允许您在共享内存中存储对象(无论是用户对象还是解析的操作码块)的系统。在我知道的所有系统中,共享内存与获得指向它的指针一样快。
所以,简而言之,APC所要做的写入或读取对象是:
- 要求SHM访问和获得它的指针
- 计算对象的SHM偏移和大小
- memcpy的内存区到缓冲区,反之亦然
- 做
简单,并考虑到内存带宽现在是每秒10兆字节,很快。需要做
由于一个内存缓存方案的详细其分布式性质:
- 客户端编码并传输请求
- 服务器接收和解码请求
- 服务器计算对象偏移量和大小在分布式缓存的存储器
- 服务器memcpy的内存区域成缓冲区或反之亦然
- 服务器发送缓冲区
- 客户端接收和解码缓冲区
现在,如果我们想分发APC,客户端和服务器将需要相互通话。突然之间,我们发现自己处于一个场景,除了一些不太重要的细节之外,它与memcache使用的场景完全相同。而且所有昂贵的操作都将再次变得必要,即所有的复制都通过网络堆栈发送。
这也解释了为什么即使运行在本地主机上的memcache实例,在节点之间没有极其缓慢的千兆以太网,为使分布式系统工作还需要付出相当大的开销。
这就是为什么我确信你在这里看到错误的嫌疑人,使APC分布式,它将处于相同的性能/吞吐量类别。
OTOH中详细说明引擎盖下的部分,看起来如果可以通过SHM访问memcached,可能会加速memcached (如果不在那里,则回到网络),尽管你可能不得不放弃一些一致性保证。 – 2012-07-20 21:59:12
@tc。当然可以完成,例如Informix提供shm作为服务器和客户端之间的替代通信路径,但这种设置的好处很难估计(因为它只在多节点设置中才有意义 - 否则只是坚持APC--这意味着总流量的很大一部分仍然会通过网络),并且代码复杂度会增加很多。 – fvu 2012-07-20 22:27:06
够公平,相信。我认为最好的方法是同时使用APC和memcache。用于opCode缓存的APC和用于数据缓存的memcache(当我们有多个服务器时)。 – ALH 2012-07-21 04:35:03
- 1. 如何强制Magento使用APC缓存
- 2. 如何使APC(PHP缓存)工作?
- 3. 如何缓存memcache中的symfony部分?
- 4. 分布式缓存
- 5. 分布式缓存
- 6. 如何制作一个基于sub_category的分区列表模板?
- 7. 如何防止APC缓存碎片
- 8. 如何诊断APC缓存问题?
- 9. 禁用memcache和apc
- 10. PHP APC和Memcache Benchmarking
- 11. PHP Apc:如何查看APC中的缓存条目
- 12. Hadoop分布式缓存不起作用
- 13. 如何制作基于百分比的水平布局?
- 14. ASP.NET InProc缓存vs分布式缓存
- 15. 何时使用分布式散列表而不是“传统”散列表?
- 16. 优化APC缓存
- 17. apc缓存压缩
- 18. 配置APC缓存
- 19. 分布式修订控制系统的分散行为如何工作?
- 20. 如何更改替代PHP缓存(APC)中的锁定机制?
- 21. 将memcache用作多个站点的分布式存储
- 22. 如何制作NSURL缓存?
- 23. 分布式缓存帮助
- 24. Java分布式缓存
- 25. 分布式缓存技术
- 26. 替代分布式缓存
- 27. 的MapReduce分布式缓存
- 28. 如何在分区器hadoop中使用分布式缓存?
- 29. 分布式缓存系统及其如何分配数据
- 30. PHP - Memcache - HTML缓存
APC不仅仅是一个很快的速度,因为它不是一个服务器,而是专门用于疼痛/对象存储的本地内存块。也就是说,你的想法不会通过分发apc来使自己失效吗? – fvu 2012-07-20 18:09:08
@fvu,如果因为它在本地主机上更快,那么为什么memcache在APC等本地主机上的速度不如APC快? – ALH 2012-07-20 18:12:22
apc =被访问的内存块,就是这样。 Memcache是一个服务器,也就是localhost或不是,**是**网络流量,客户端必须对请求进行编码,发送,服务器对其解码,对其答案进行编码,通过网络发送并由客户端进行解码。现在,“分布式apc”必须是服务器,并且非常类似于memcache的当前模型,并且该模型继承了行为和性能级别,但没有办法绕过它。 Memcache对于它的工作已经非常快,我认为你在这里寻找错误的罪魁祸首。 – fvu 2012-07-20 20:54:38