每天推送5篇优质英文文章 · By makers, for makers

运营 1110 天, 推荐好文 4,975 篇, 原创简评 1,021,072 字, 原文总阅读时间 43,518 分钟, 138,984 人订阅

Reddit在美国年轻人中很受欢迎,感觉黃易山做CEO后更蒸蒸日上了。 这篇文章有点老,是2010年的。相信这4年间,他们面临的scalability的问题更严峻,一些架构可能都推倒重来了。但文中提到的7条经验,还是很实用的。
  • Crash Often:web server的进程常常会莫名其妙地挂掉(可能有哪个exception没被catch到,或者用太多内存被操作系统的OOM killer给干掉之类的)。 Reddit用supervise来启动并监控进程,如果进程挂了,自动重启。现在是2014年了,感觉supervisord用得比较多点。
  • Separation of Services:也就是service oriented architecture。有几个显而易见的好处(临时头脑风暴的,不全面):1)同一个service访问数据库的access pattern比较predictable,方便cache; 2)哪个service比较吃力了,只给那个service加机器就行;3)fault isolation;4)不同的service可以在不同时间部署新代码。
  • Open Schema:他们用postgres做数据库服务器,但只有一个表,叫Thing。什么东西都是一个thing,包括user, link, comment等。靠python代码来保证数据的完整性一致性。 这是很宝贵的经验。现在的趋势是,很多公司都用mysql或postgres,但都把他们当做key/value store来用。
  • Keep it Stateless:每台app/web server都不存状态,而是把状态保存到memcache中。这样的话,某台app server挂了就挂了,再起一台新的就是了。
  • Memcached:他们把memcached用到了极致 - 缓存数据库中来的数据、session data、rendered page、还有一堆precomputed data。
  • Store Redundant Data:他们precompute了各种东西,空间换时间。各种排好序的list都缓存(按时间排序、按upvote的数量排序、按评论数排序等)。
  • Work Offline:异步处理一些没必要在线处理的东西,比如生成缩略图、发邮件之类的。
Reddit网站代码竟然是开源的,有兴趣可以读一下。
分享到: