gpt4 book ai didi

caching - 为什么 Facebook 在 memcached 中使用 TCP 进行 SET 和 UDP 进行 GET

转载 作者:行者123 更新时间:2023-12-04 20:50:21 26 4
gpt4 key购买 nike

我的问题是关于 memcached。 Facebook 使用 memcached 作为其结构化数据的缓存,以减少用户的延迟。他们在 Linux 上使用 UDP 优化了 memcached 的性能。 http://www.facebook.com/note.php?note_id=39391378919

但有趣的是,他们仍然使用 TCP 进行设置操作,但使用 UDP 进行获取操作。

他们为什么要这样做?我的意思是为什么不也使用 UDP 进行设置操作?由于需要在操作系统中维护的状态减少,UDP 的伸缩性比 TCP 更好。

谢谢,

最佳答案

这句话几乎揭示了问题和解决方案:

Although we improved the memory efficiency with TCP, we moved to UDP for get operations to reduce network traffic and implement application-level flow control for multi-gets (gets of hundreds of keys in parallel).



TCP 也是流量控制,在 Memcache 多获取的情况下,它是非常串行的。您打开连接(或池),查询键列表,等待然后获得所有值列表的结果。相反,他们在无连接的并行 UDP 获取之上实现了应用程序级流量控制。以下是我在 FB 大小的软件中看到的 UDP 的好处:
  • 无需打开连接、池化它们、进行额外的往返、 session 、握手、保持连接等;
  • 可以并行查询多个分布式Memcache服务器和索引,这很好,符合微服务和“微缓存”作为服务的精神;
  • 可以多播 UDP 数据包以提供具有冗余、负载平衡、动态路由甚至分片的高可用性 - 第一个响应获胜!
  • 可以在应用程序级别实现单独的获取超时和重试策略;
  • 只要有任何部分完整的数据可用,就可以执行逻辑 - 无需等待完整的多获取结果;

  • 另一方面,我认为他们确实通过 TCP 写入以保持一致性。带有 memcached 的 TCP 提供了一个事务,在该事务中发送请求,然后响应确认缓存更新。我想在 UDP 中重新实现它不会提供太多好处。

    关于caching - 为什么 Facebook 在 memcached 中使用 TCP 进行 SET 和 UDP 进行 GET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11406148/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com