EN
返回档案库

案例库 · 软件与 IT · 技术决策 · 2003–2004

LiveJournal 在 2003 年构建 memcached,将闲置内存变为全站缓存

陷入困境的 LiveJournal 将整个服务器集群中的闲置内存汇集为一个分布式缓存,使 MySQL 不再承担每次读取,网站变得极快。

LiveJournal · Danga Interactive

解法

到2003年,LiveJournal的博客网络运行在约70台机器上,每一次页面浏览都会冲击数据库。布拉德·菲茨帕特里克发现他的Web节点“无条件地冲击数据库”,而数据库缓存只有4-8 GB的上限——传统解决办法是购买内存更大的64位数据库服务器。

他选择了相反的方法:在Web层做缓存。mod_perl进程无法共享内存,而System V共享内存只能在一台机器上工作,因此他构建了一个跨越所有服务器的“全局哈希表”——memcached。每个守护进程在有空闲内存的地方运行,一致性哈希将每个键发送到相同节点,使整个服务器集群就像一个缓存。

效果立竿见影:memcached“不占CPU,并且让网站飞快”。LiveJournal在2003年5月底上线,这一设计——避免磁盘,横向扩展许多小机器而不是纵向扩展——后来传播到Slashdot和Wikipedia,最终成为标准的Web构建模块。

生效的原因

  • 读取在Web节点上命中内存,而不是访问数据库磁盘
  • 一致的键到节点映射使跨机器的缓存保持一张缓存镜像
  • 无复制、无持久化,使缓存简单快速
  • 廉价空闲内存胜过购买更大的数据库服务器
取得的成效将空闲内存合并为全局缓存,数据库作为最后手段聪明

可借鉴之处

当读取压垮数据库时,扩展缓存而非数据库:利用已有机器上的空闲内存,而不是购买更大的服务器。

后续进展

Memcached成为Web上使用最广泛的缓存系统之一,被Wikipedia、Facebook、Twitter等数千网站采用;Facebook后来发布了如何将这一设计扩展到数万台服务器的论文。该项目在布拉德·菲茨帕特里克的原始架构下保持开源。

资料来源

发现哪里写错了?告诉我们。

相关案例