McDipper: 用于flash存储器的key-value缓存

来自facebook的最新一篇文章:McDipper: A key-value cache for Flash storage,其中谈到了缓存失效这难点。

Memcache广泛应用在facebook,当然基于内存的缓存相当还是昂贵的,特别是对于一些占用空间很大,但是请求率不是很高,属于中下等频率,相比内存,flash存储提供每台服务器20倍容量,还提供每秒数万次的操作。

这就是McDipper, flash-based cache服务器,兼容Memcache 协议,已经在facebook替代memcache运行近一年了。

缓存策略可配置,可采取FIFO (first-in, first-out) or LRU (least recently used)....

老的memcache有一个缓存失效问题,计算机科学难点之一,如后面附图:

这里存在一个缓存中老的数据失效删除同时,这时将有新的数据value1被保存set到缓存中,这就存在两个写动作的竞争(图中6和7同时发生),在另外一篇Gumball: A race condition prevention technique for cache augmented SQL Database Management systems一文中举类似的例子:

当用户爱丽丝更新她的个人资料同时,管理员因为政策问题删除其个人资料,更新和删除两个动作同时发生竞争。

memcached的解决办法是delete hold-off删除推迟:直到删除过期后,才进行新值的set操作,这意味着旧无效数据在其删除后还存在几秒,直到其对整个缓存一致性没有影响以后才真正失效。

为了实现推迟删除,你得检查推迟数据中不存在你所要实现的推迟,这里面又有竞争情况,得用 read-modify-write原子性操作。

而使用了McDipper,因为容量相当大,也就没有因为缓存大小限制导致频繁失效设置操作。


[该贴被admin于2013-03-11 15:07修改过]



facebook使用McDipper替代memcache实现图片功能,McDipper可以作为边缘缓存服务器实现CDN。超过 150 Gb/s访问数据, 每十分钟累积 10 TB. facebook非常满意McDipper在CDN中表现的性能。.



[该贴被admin于2013-03-11 15:08修改过]