互联网从业者的资讯社区
互联网从业者的资讯社区
下载 App 在 App 中打开
今日热议

(2010)Reddit 如何可以承受每月 2.7 亿 PV

#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 可以在不同时间部署新代码。
5.Open Schema:他们用 postgres 做数据库服务器,但只有一个表,叫 Thing。什么东西都是一个 thing,包括 user, link, comment 等。靠 python 代码来保证数据的完整性一致性。这是很宝贵的经验。现在的趋势是,很多公司都用 mysql 或 postgres,但都把他们当做 key/value store 来用。
6.Keep it Stateless:每台 app/web server 都不存状态,而是把状态保存到 memcache 中。这样的话,某台 app server 挂了就挂了,再起一台新的就是了。
7.Memcached:他们把 memcached 用到了极致 - 缓存数据库中来的数据、session data、rendered page、还有一堆 precomputed data。
8.Store Redundant Data:他们 precompute 了各种东西,空间换时间。各种排好序的 list 都缓存(按时间排序、按 upvote 的数量排序、按评论数排序等)。
9.Work Offline:异步处理一些没必要在线处理的东西,比如生成缩略图、发邮件之类的。

Reddit 网站代码竟然是开源的,有兴趣可以读一下。

原文链接:
http://highscalability.com/blog/2010/5/17/7-lessons-learned-while-building-reddit-to-270-million-page.html
https://zhijieshequ.com/post/klZs1c3b
回复 湾区日报

未登录无法操作

评论
列表为空,暂无内容

服务条款 隐私政策 Cookie 使用条款

© 2024 知结社区 | Powered by Fresns

弗雷森斯(苏州)科技有限公司

苏ICP备2021027795号-3

增值电信业务经营许可证:苏B2-20210954

广播电视节目制作经营许可证:(苏)字第02601号

不良信息举报: jubao@fresns.cn