开启左侧

[转]Instagram 架构分析笔记

[复制链接] 0
回复
2039
查看
打印 上一主题 下一主题
楼主
跳转到指定楼层
发表于 2015-10-13 14:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
这是一篇旧文,值得一读, 就转来了:
9 L* l* X& y2 b% O3 O. s4 a% A) e* X. W) ^, A: t3 d
2012 年4月10日凌晨消息,Instagram 被 Facebook 以10亿美金收购。团队规模:13 人。
, s; n$ n5 p2 h- G' }7 w6 O. }! _/ J
Instagram 团队上个月才迎来第 7 名员工,是的,7个人的团队。作为 iPhone 上最火爆的图片类工具,instagram 用户数量已经超过 1400 万,图片数量超过 1.5 亿张。不得不说,这真他妈是个业界奇迹。
, R' C/ T" E* l& v8 u4 Z: u( g. G$ H0 d2 ~. Y- j) o" z' [( V
几天前,只有三个人的 Instagram 工程师团队发布了一篇文章:What Powers Instagram: Hundreds of Instances, Dozens of Technologies,披露了 Instagram 架构的一些信息,足够勾起大多数人的好奇心。读罢做点笔记,各种线索还是有一定参考价值的。能打开原文的建议直接读原文。
+ R1 I1 I) J. f! D$ Q+ _$ R5 H  z0 V+ R' C# J. A# T" `6 Z6 j. j
Instragram.png/ D" E7 K+ m7 f" P+ M6 s( ^1 f0 V& M
# W% Q* A5 R! |2 I4 B" X
Instagram 开发团队奉行的三个核心原则:1 q/ ?; p6 j$ {  O7 |$ t! j

7 y* h# s, Z9 n    Keep it very simple (极简主义)9 G0 p8 r# C% s
     Don't re-invent the wheel (不重复发明轮子)
% J; L$ q4 Y! Y! p# I' l( |4 ]     Go with proven and solid technologies when you can(能用就用靠谱的技术)
3 V7 M8 t% v8 k/ T7 l
9 u, j9 ^7 V- h, L' f/ @# u( ^OS/主机
: k4 q4 e; V8 l0 t1 F0 u! B
; x0 I  ]$ A5 \7 s5 a4 N 操作系统的选择,在Amazon EC2上跑 Ubuntu Linux 11.04 (Natty Narwhal) ,这个版本经过验证在 EC2 上够稳定。因为只有三名工程师,只有三名工程师,所以自己部署机器到 IDC 是不靠谱的事情。幸好有亚马逊。
- `" n& j! |, b. [& H% k: X/ S8 B; b7 b& Y
负载均衡
) u: }# X" D! i7 ~  ]5 E% }+ B6 ~. M, x5 @; C" l
此前曾用过两台 Nginx 做 DNS 轮询承载前端请求,这样做会有副作用,现在已经迁移到Amazon的ELB(Elastic Load Balancer),起了三个 Nginx 实例,在 ELB 层停掉了 SSL , 以缓解 CPU 压力。DNS 服务使用 Amazon Route53 服务。
1 ^" f% l% R1 E! @5 {7 i- F* y& M% h) n  v# x
应用服务器
, Y0 b5 S! q, s8 a  b" f) H- {
$ O5 Y- O0 Z9 C- i 启用了 25 个 Django 实例,运行在 High-CPU Extra-Large 类型的服务器实例上,之所以用 High-CPU Extra-Large 实例是因为应用请求是 CPU 密集型而非 IO 密集型。% G9 T4 x- g8 ]; G

* t* V" ^  l" |, N+ u& C4 K% Y! q 使用 Gunicorn 作为 WSGI 服务器。过去曾用过 Apache 下的 mod_wsgi 模块,不过发现 Gunicorn 更容易配置并且节省 CPU 资源。使用 Fabric 加速部署。( N( j. {" h% {, F6 f& ~
" i" D: Z: m, b6 o% K  k
数据存储% W3 ?' ?" `% @' o1 D' |; C0 J: m

7 f8 F, Q( g0 E* O* a 用户信息、图片元数据、标签等大部分数据存储在 PostgreSQL 中。主要的 Shard 数据库集群有 12个节点。( T% l/ u3 t) _
+ R, ?4 \$ A" N' I% l- W
实践中发现 Amazon 的网络磁盘系统单位时间内寻道能力不行,所以有必要将数据尽量放到内存中。创建了软 RAID 以提升 IO 能力,使用的 Mdadm 工具进行 RAID 管理。
6 S8 O! i0 m& O4 S3 o5 i) E! s0 B3 a7 w
管理内存中的数据,vmtouch 这个小工具值得推荐。9 D% U( E% @3 K0 P; C
1 D. y5 P# G6 `) ?, H; \2 z; U% m, H
PostgreSQL 设置为 Master-Replica 方式,流复制模式。利用 EBS 的快照进行数据库备份。使用 XFS 文件系统,以便和快照服务充分配合。 使用 repmgr 这个小工具做 PostgreSQL 复制管理器器。
0 V: z4 G4 I/ K7 j
) @' g+ R5 j6 Q5 f3 E( Z1 K% n 连接池管理,用了 Pgbouncer。Christophe Pettus 的文章包含了不少 PostgreSQL 数据库的信息。
  d1 D2 _' ^* ~! C! G" u% G& \! m8 N- |& d% F- E* C; |
TB 级别的海量图片存储在 Amazon S3 上,CDN 采用的也是 Amazon 的服务,CloudFront。" E! M; N3 A- |- M1 m1 T/ n; x

7 a, x- s* I5 Q9 R+ f; dInstagram 也是 Redis 的重度用户,Feed 以及 Session 信息都用 Redis 处理,Redis 也是以 Master-Replica 方式部署。在 Replica 节点上进行数据备份。
1 L0 Z  \; o6 J0 w
9 B% Q* x! \' P( W6 `& u& }! \9 L 使用了 Apache Solr 承担 Geo-search API 的工作,Solr 简单的 JSON 接口也不错。  r9 |' N) b# g
, j5 T/ Z3 n6 W2 _- ?: r
缓存使用了 6 个 Memcached 实例,库使用 pylibmc 和 libmemcached。亚马逊也提供缓存服务-Elastic Cache service ,Instagram 也有尝试,不过不便宜。# u0 I% ^. X& b. ~, n

% p& T, }/ u4 c/ Q# c! ?7 m6 n 任务队列/发布通知: H* A) \- F3 c! c

6 W2 |# q6 p1 p+ S+ C 队列服务使用 Gearman ,通知系统则使用 pyapns 来实现。) y3 q9 o4 |& K3 B- P0 Z
8 L* o& l; W/ F% e, \
监控! d# Y& }& b# k4 D

. d' N, Z  y# `" Q' M# F) e 前面提及的服务器实例数量加起来,的确有100多个,有效的监控是相当有必要的。使用 Munin 作为主要监控工具 , 也写了不少定制插件,外部监控用 Pingdom 的服务。通知服务使用PagerDuty。
' X& ~5 r" V* r* p. H7 Q, y* T8 l, [. [6 a
对于 Python 的错误报告,使用 Disqus 团队开源的 Sentry 来处理。4 R# u$ I8 ~$ S2 P6 D4 H/ U
# m6 _; I5 l" X* ?* l1 x
几个感想
- x2 }9 X/ Y1 r: n* Z
9 w; Z1 V# {+ X% ^- p6 d3 F0)轻装上阵说起来容易,做起来非常难。这也是 Instagram 团队目前最令人着迷的地方;
* Z1 s1 @6 F, i4 d/ W1 U3 O2 T8 d; ^9 L0 z! a* H5 U' C% J
1)Python 社区已经足够成熟,各个环节上都已经有不错的解决方案了。& I5 Q2 E3 J! j- z9 U
' I- Z, W% U, Q3 ?# {& K# u! ^
2)如果要问我最大的一个感慨,我要说:Amazon 真是一家伟大的公司,甚至比 Google 还伟大
+ p* X+ R; C8 m6 B( E

转载请保留当前帖子的链接:https://www.beimeilife.com/thread-2324-1-1.html 谢谢

使用高级回帖 (可批量传图、插入视频等)快速回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则   Ctrl + Enter 快速发布  

发帖时请遵守我国法律,网站会将有关你发帖内容、时间以及发帖IP地址等记录保留,只要接到合法请求,即会将信息提供给有关政府机构。
快速回复 返回顶部 返回列表