sách gpt4 ai đã đi

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

In lại 作者:行者123 更新时间:2023-12-04 20:50:21 26 4
mua khóa gpt4 Nike

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

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

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

谢谢,

1 Câu trả lời

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

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
    行者123
    Hồ sơ cá nhân

    Tôi là một lập trình viên xuất sắc, rất giỏi!

    Nhận phiếu giảm giá Didi Taxi miễn phí
    Mã giảm giá Didi Taxi
    Giấy chứng nhận ICP Bắc Kinh số 000000
    Hợp tác quảng cáo: 1813099741@qq.com 6ren.com