开启左侧

[转]Instagram 架构分析笔记

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

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

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

x
这是一篇旧文,值得一读, 就转来了:. y3 s% ^0 E, x6 E" N0 [$ S
! `( Y/ F+ S# A' U" {- V! E
2012 年4月10日凌晨消息,Instagram 被 Facebook 以10亿美金收购。团队规模:13 人。
; j, M* R7 P( z
2 c6 X' S) D( X. lInstagram 团队上个月才迎来第 7 名员工,是的,7个人的团队。作为 iPhone 上最火爆的图片类工具,instagram 用户数量已经超过 1400 万,图片数量超过 1.5 亿张。不得不说,这真他妈是个业界奇迹。! e, u" c0 P* ?' x" X3 f6 E5 C
* d& g4 X0 ~: f6 Y2 f
几天前,只有三个人的 Instagram 工程师团队发布了一篇文章:What Powers Instagram: Hundreds of Instances, Dozens of Technologies,披露了 Instagram 架构的一些信息,足够勾起大多数人的好奇心。读罢做点笔记,各种线索还是有一定参考价值的。能打开原文的建议直接读原文。
% k, ~' ~  k; X; E& @/ F  v' r
0 ]; ?4 j4 _; o7 uInstragram.png2 y5 Q( P$ E% C- E
" [) l' g) ^% p
Instagram 开发团队奉行的三个核心原则:
- q8 q- j+ K* ^
5 o2 `3 J9 m" \% U* h: R0 N    Keep it very simple (极简主义)! S3 T7 G. w; w+ ^
     Don't re-invent the wheel (不重复发明轮子)6 b0 ~+ A( z- g! C
     Go with proven and solid technologies when you can(能用就用靠谱的技术)* t  p7 [' H' o7 g$ s7 O8 E4 k

6 f' l5 v6 F9 v& COS/主机
" N* W3 @2 t, k- K- ~) [4 ~/ |- o2 x! Q/ B& P$ f
操作系统的选择,在Amazon EC2上跑 Ubuntu Linux 11.04 (Natty Narwhal) ,这个版本经过验证在 EC2 上够稳定。因为只有三名工程师,只有三名工程师,所以自己部署机器到 IDC 是不靠谱的事情。幸好有亚马逊。+ N. T$ U; q; c- l5 K7 {0 S9 W1 d
2 h* U( D$ H: }* D$ _1 Q* j$ W. s
负载均衡
# x/ W7 q  e+ Q5 N! c! A8 h( v3 }, s8 }' D) b3 ^& B& V
此前曾用过两台 Nginx 做 DNS 轮询承载前端请求,这样做会有副作用,现在已经迁移到Amazon的ELB(Elastic Load Balancer),起了三个 Nginx 实例,在 ELB 层停掉了 SSL , 以缓解 CPU 压力。DNS 服务使用 Amazon Route53 服务。
+ B# H8 T0 @0 l, K: n6 \5 u9 w. _+ |  w# y( [6 [! I
应用服务器, G. G* o+ Z7 ^* Q8 m1 p  e

: y7 z3 C0 h* |9 U: r$ M% v 启用了 25 个 Django 实例,运行在 High-CPU Extra-Large 类型的服务器实例上,之所以用 High-CPU Extra-Large 实例是因为应用请求是 CPU 密集型而非 IO 密集型。3 a7 \3 D& z2 Q7 `

8 v- G6 w6 }% ?4 Z; X 使用 Gunicorn 作为 WSGI 服务器。过去曾用过 Apache 下的 mod_wsgi 模块,不过发现 Gunicorn 更容易配置并且节省 CPU 资源。使用 Fabric 加速部署。8 M( u/ M* `8 ^  {# N- o& x7 C  H
* ^. `* ~! N; E
数据存储8 U! y# p. J; N) w0 D7 b

% j' Q( y5 P+ w, A* ]2 Y+ {  ` 用户信息、图片元数据、标签等大部分数据存储在 PostgreSQL 中。主要的 Shard 数据库集群有 12个节点。
; b5 I, ~' f( ?: M/ a1 |1 T/ o
2 U; Z. ^1 N( h! }4 Q4 L" u% t 实践中发现 Amazon 的网络磁盘系统单位时间内寻道能力不行,所以有必要将数据尽量放到内存中。创建了软 RAID 以提升 IO 能力,使用的 Mdadm 工具进行 RAID 管理。* [8 s8 \$ O- J% h  H, e5 A
. O$ {5 a1 D; z+ t8 T. J+ `
管理内存中的数据,vmtouch 这个小工具值得推荐。
: v/ f7 d* R/ x( G2 i4 g) r
) K1 S. _2 h2 `  gPostgreSQL 设置为 Master-Replica 方式,流复制模式。利用 EBS 的快照进行数据库备份。使用 XFS 文件系统,以便和快照服务充分配合。 使用 repmgr 这个小工具做 PostgreSQL 复制管理器器。
# H: J) b8 P  P6 W: i" x+ y
1 ?2 H' v+ |' p0 X0 m( ^# | 连接池管理,用了 Pgbouncer。Christophe Pettus 的文章包含了不少 PostgreSQL 数据库的信息。
/ i, S: P2 T" V; ]8 K; {5 ]5 @, E# k% h- N/ c
TB 级别的海量图片存储在 Amazon S3 上,CDN 采用的也是 Amazon 的服务,CloudFront。
+ j7 n6 C4 }5 H# h1 l
$ E- k& L) q; ?; t. D- ]5 tInstagram 也是 Redis 的重度用户,Feed 以及 Session 信息都用 Redis 处理,Redis 也是以 Master-Replica 方式部署。在 Replica 节点上进行数据备份。. T7 d. A* L5 ^; m, a; Q

, [+ v; D& D- d9 q& {/ Y 使用了 Apache Solr 承担 Geo-search API 的工作,Solr 简单的 JSON 接口也不错。
% w0 E. K: r( ?
$ p1 m' Y% I, H9 U0 h7 ^1 H 缓存使用了 6 个 Memcached 实例,库使用 pylibmc 和 libmemcached。亚马逊也提供缓存服务-Elastic Cache service ,Instagram 也有尝试,不过不便宜。
) O( U7 A; |" X( v/ q
9 |  x2 L+ Y6 O/ C4 p) ]: U 任务队列/发布通知
1 ~8 r. r) p! `$ B1 ~; r$ z7 V, U* V4 o/ Z" @3 {
队列服务使用 Gearman ,通知系统则使用 pyapns 来实现。3 W5 X2 ?0 ?: u% g* q

. \% z0 S5 `& J: `- q1 e 监控
: F% v/ M8 @/ R+ x
8 M; _  ~  t% ^* \/ A* y2 T1 T, b 前面提及的服务器实例数量加起来,的确有100多个,有效的监控是相当有必要的。使用 Munin 作为主要监控工具 , 也写了不少定制插件,外部监控用 Pingdom 的服务。通知服务使用PagerDuty。8 e5 ^& B+ C( u

$ U/ E0 y6 ^# e4 {* f 对于 Python 的错误报告,使用 Disqus 团队开源的 Sentry 来处理。
5 |: y- K9 |& _  m9 N1 D- j- {& z: D  J+ C" P
几个感想, E( Z, q' \4 O% Z! i4 z
7 a' C# y6 h; j7 ?0 U. p  ~& |4 a
0)轻装上阵说起来容易,做起来非常难。这也是 Instagram 团队目前最令人着迷的地方;$ t$ ?! x0 a& }' |
$ a' [( {' L* x7 `4 |0 O  B, ^
1)Python 社区已经足够成熟,各个环节上都已经有不错的解决方案了。. `6 J  G2 x2 U$ `* o9 g
- e# X* o0 t$ V+ ?* O4 {: Z
2)如果要问我最大的一个感慨,我要说:Amazon 真是一家伟大的公司,甚至比 Google 还伟大  ]1 t9 K3 `7 Y+ |8 p4 E$ J


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

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

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

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

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