memcachedb

memcachedb 是以 Berkeley DB 為 backend 的 memcached-compatible server。

memcached 一開始是 LiveJournal 以大量的 memory 作為 cache 加速用。除了 Perl 本身外,後來在各平台上都有對應的 library 可以用,而且也被證實他的效果很棒,Facebook 甚至弄了兩百台 16GB 的機器來跑 memcached。

最初的版本有一些架構上的問題,像是最原始的 memcached 是先計算 key 的 CRC32,再算餘數而決定是哪一台機器。這使得新增或移除機器時,會造成整個 cache 大洗牌,後來引入 Consistent Hashing 後就解決了,而且 Consistent Hashing 的觀念並不難懂,很多 memcached client library 都有實做。

另外是 cache server 重開後會因為要重新計算,會有一段時間網站變慢,Wikipedia 裡有人試著改了一個以 Berkeley DB 為底層的版本,後來不知道什麼原因又改回 memcached 了。

現在這個 memcachedb 是以 Berkeley DB 4.6 為基礎,利用 BDB 提供的 Replication 提供高可靠度,並想辦法維持相同的效能。另外,因為使用 Berkeley DB,所以 disk 也被當作 storage,也希望可以利用更大的空間提高 cache hitrate。

不過有些地雷還是要注意,如果有要使用的人,應該要訂 mailing list 看上面的討論。目前最常遇到的地雷是可以接受的 key 與 value 的長度異常的小,我在 porting 0.0.x 版到 FreeBSD ports 時有把 key 修正到 128bytes (原來是 16bytes),不過這點在 1.0.0 beta 應該修掉了,因為我在更新時翻過 header file,裡面沒有再看到這個限制,不過使用上可能還是要注意一下。

另外 memcached 原作者 Brad Fitzpatrick 似乎對於 Berkeley DB 版本的效率感到好奇,有跟 memcachedb 的原作者討論一些架構上的想法,也許這兩位會擦出什麼火花...

2 thoughts on “memcachedb”

Leave a Reply

Your email address will not be published. Required fields are marked *