快捷搜索:

Facebook对Memcached的提升

原文:Scaling memcached at Facebook

作者:Paul Saab

翻译:ShiningRay

由于我们有好几千台机械,每个都运行了几百个Apache进程以致更多,终极导致到memcached进程的TCP链接有几十万个。这些链接本身并不是什么大年夜问题,然则memcached为每个TCP链接分配内存的措施却很成问题。

假如你翻阅过一些关于大年夜型网站扩展(Scaling)的资料,那么你可能据说过一个叫memcached的器械。memcached是一个高机能、散播式的内存工具缓存系统。我们Facebook可能是天下上最大年夜的memcached用户了。我们使用 memcached来减轻数据库的包袱。memcached确凿很快,然则我们还要让他更快、更高效。我们应用了跨越800台办事器,供给跨越28TB的内存来办事于用户。在以前的一年里,跟着Facebook的用户量直线上升,我们碰到了一系列的扩展问题。日益增长的需求使得我们必须对操作系统和 memcached进行一些改动,以得到足够的机能来为我们的用户供给最好的体验。

由于我们有好几千台机械,每个都运行了几百个Apache进程以致更多,终极导致到memcached进程的TCP链接有几十万个。这些链接本身并不是什么大年夜问题,然则memcached为每个TCP链接分配内存的措施却很成问题。memcached为每个链接应用零丁的缓存进行数据的读写。当达到几十万链接的时刻,这些累计起来达好几个G——这些内存着实可以更好地用于存储用户数据。为了收复这些内存,我们实现了一个针对TCP和UDP套接字的每线程共享的链接缓存池。这个改变使每个办事器可以收回几个G的内存。

虽然TCP上我们改进了内存的应用效率,但我们照样转向了UDP,目的是让get(获取)操作能低落收集流量、让multi-get(同时并行地获取几百个键值)能实现利用法度榜样级其余流量节制。我们发明Linux上到了必然负载之后,UDP的机能下降地很厉害。这是因为,当从多个线程经由过程单个套接字通报数据时,在UDP套接字锁上孕育发生的大年夜量锁竞争导致的。要经由过程分离锁来修复内核生怕不太轻易。以是,我们应用了分离的UDP套接字来通报回覆(每个线程用一个回复套接字)。这样篡改之后,我们就可以支配UDP同时后端机能不打折。

另一个Linux中的问题是到了必然负载后,某个核心可能因进行收集软终端处置惩罚会饱和而限定了收集IO。在Linux中,收集中断只会老是通报给某个核心,是以所有的吸收软终真个收集处置惩罚都发生在该内核上。别的,我们还发明某些网卡有过高的中断频率。我们经由过程引入收集接口的“谋利”轮询办理了这两个问题。在该模型中,我们组合了中断驱动和轮询驱动的收集IO。一旦进入收集驱动(平日是传输一个数据包时)以及在进程调整器的余暇轮回的时刻,对收集接口进行轮询。别的,我们也用到了中断(来节制延迟),不过收集中断用到的数量大年夜大年夜削减(一样平常经由过程大年夜幅度提升中断联络阈值interrupt coalescing thresholds)。因为我们在每个核心长进行收集传输,同时因为在调整器的余暇轮回中对收集IO进行轮询,我们将收集处置惩罚平均地分散到每个核心上。

着末,当开始支配8核机械的时刻,我们在测试中发清楚明了新的瓶颈。首先,memcached的stat对象集依附于一个全局锁。这在4核上已经很令人憎恶了,在8核上,这个锁可以占用20-30%的CPU应用率。我们经由过程将stats对象集移入每个线程,并且必要的时刻将结果聚合起来。其次,我们发明跟着通报UDP数据包的线程数量的增添,机能却在低落。着末在保护每个收集设备的传送行列步队的锁上发清楚明了严重的争用。数据包是由设备驱动进行入队传输和出队。该行列步队由Linux的“netdevice”层来治理,它位于IP和设备驱动之间。每次只能有一个数据包加入或移出行列步队,这造成了严重的争用。我们傍边的一位工程师改动了出队算法,实现了传输的批量出队,去掉落了行列步队锁,然后批量传送数据包。这个更正将哀求锁的开销平摊到了多个数据包,显明地削减了锁争用,这样我们就能在8核系统上将memcached舒展至8线程。

做了这些改动之后,我们可以将memcached提升到每秒处置惩罚20万个UDP哀求,匀称延迟低落为173微秒。可以达到的总吞吐量为30万UDP 哀求/s,不过在这个哀求速率上的延迟太高,是以在我们的系统顶用场不大年夜。对付通俗版本的Linux和memcached上的50,000 UDP哀求/s而言,这是个了不起的提升。

我们盼望尽快将我们的改动集成到官方的memcached仓库中去,我们抉择在这之前,先将我们对memcached的改动宣布到github上。

TAG:

Facebook

Memcached

您可能还会对下面的文章感兴趣: