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

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

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

谢谢,

最佳答案

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


尽管我们使用TCP提高了内存效率,但我们转向了UDP
获取操作以减少网络流量并实施
多级应​​用程序级流控制(数百个
键)。


TCP也是流控制,如果是Memcache多次获取,它是相当串行的。您打开连接(或将其合并),查询键列表,等待,然后获取包含所有值列表的结果。相反,他们在无连接的并行UDP获取之上自己实现了应用程序级流控制。对于FB大小的软件,这是UDP的优点:


无需打开连接,集中连接,进行其他往返,会话,握手,保持活动状态等;
可以并行查询多个分布式Memcache服务器和索引,这符合微服务和“微缓存”即服务的精神;
可以多播UDP数据包以提供高可用性,并提供冗余,负载平衡,动态路由甚至是分片-赢得第一响应!
可以在应用程序级别实施个人获取超时和重试策略;
只要有部分完整的数据可用,就可以执行该逻辑-无需等待完整的多次获取结果;


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

10-05 21:18
查看更多