参见:https://pdos.csail.mit.edu/6.824/notes/l-memcached.txt
网站架构
FE 前端web服务器(无状态的,所以很简单)
cache 中间memcached
DB 数据库 (西海岸是主数据库,数据只有一份,没有replication。后来增加了东海岸机房,作为从数据库。所有的写都走主数据库。)
《Scaling Memcache at Facebook》主要讲的就是中间这个cache层怎么设计。
目标
- 为数据库挡下绝大多数的读操作。
网站的读操作远远多于写。
数据库主要是应付所有的写操作,读操作比写操作多得多得多,如果读都到数据库去读,数据库会撑不住。
而memcached数据是在内存,所以相同的硬件能比DB应付更多的请求。 - 一致性要求。要求最终一致性,数据更新后,用户可以读到几秒钟前的过时的数据,但是最终用户总能读到正确的版本。
但是有一种情况不可接受,就是数据库的数据更新后,缓存永久性地错过这个更新,非要等到下一次用户再写,缓存才会改变。这不能接受。 - 防止数据库被客户端请求挤爆是一个要求。另一个要求是防止路由器被挤爆,出现in-cast的情况。