开启左侧

[转]Instagram 架构分析笔记

[复制链接]
发表于 2015-10-13 14:40 | 显示全部楼层 |阅读模式

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

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

x
这是一篇旧文,值得一读, 就转来了:
; i$ ]) \; l, r" |, L2 ~; q# [
; K7 X+ l; g( j2012 年4月10日凌晨消息,Instagram 被 Facebook 以10亿美金收购。团队规模:13 人。* A1 a0 \1 n/ r0 z
8 Y8 U/ Q. [1 Q& R+ _% D9 I
Instagram 团队上个月才迎来第 7 名员工,是的,7个人的团队。作为 iPhone 上最火爆的图片类工具,instagram 用户数量已经超过 1400 万,图片数量超过 1.5 亿张。不得不说,这真他妈是个业界奇迹。& P' j0 }" z, U

2 P# v* D% y$ H, U2 ^! R1 l 几天前,只有三个人的 Instagram 工程师团队发布了一篇文章:What Powers Instagram: Hundreds of Instances, Dozens of Technologies,披露了 Instagram 架构的一些信息,足够勾起大多数人的好奇心。读罢做点笔记,各种线索还是有一定参考价值的。能打开原文的建议直接读原文。
; e  A& C2 u3 o  _! ?
. O0 f$ J/ A$ v# q' v. eInstragram.png$ I# V0 o6 s9 {5 r

( E7 E$ h1 C7 S& z Instagram 开发团队奉行的三个核心原则:
) f( {) t0 t) }- q% A5 o. y+ M; z) F! \
    Keep it very simple (极简主义); M7 j) S' \3 A, {1 z1 S; U
     Don't re-invent the wheel (不重复发明轮子)
4 B. V2 j, w( n     Go with proven and solid technologies when you can(能用就用靠谱的技术)- C7 L' `  M* j# d( ]
6 m- @/ q# y2 {2 U! }
OS/主机
7 t3 |" a' t( B  e: a  b2 G. X( H; e1 f1 s, x1 p* v
操作系统的选择,在Amazon EC2上跑 Ubuntu Linux 11.04 (Natty Narwhal) ,这个版本经过验证在 EC2 上够稳定。因为只有三名工程师,只有三名工程师,所以自己部署机器到 IDC 是不靠谱的事情。幸好有亚马逊。" @9 ^- ?4 q4 R! V

5 g! I$ A( o8 T5 H: f" w0 i, l 负载均衡
( P8 b2 S& C! j
4 O. [; P2 |( `1 a 此前曾用过两台 Nginx 做 DNS 轮询承载前端请求,这样做会有副作用,现在已经迁移到Amazon的ELB(Elastic Load Balancer),起了三个 Nginx 实例,在 ELB 层停掉了 SSL , 以缓解 CPU 压力。DNS 服务使用 Amazon Route53 服务。+ T) V; |' u) _3 c2 }

& O$ ~1 B4 {; V) e; T$ W 应用服务器* b7 B8 K0 Z' k
" k" Z. n2 f8 c9 a% _" a4 u
启用了 25 个 Django 实例,运行在 High-CPU Extra-Large 类型的服务器实例上,之所以用 High-CPU Extra-Large 实例是因为应用请求是 CPU 密集型而非 IO 密集型。! q# v; F1 q0 H) u1 ]; M
$ A6 H, A; h9 C/ X6 C/ X. G
使用 Gunicorn 作为 WSGI 服务器。过去曾用过 Apache 下的 mod_wsgi 模块,不过发现 Gunicorn 更容易配置并且节省 CPU 资源。使用 Fabric 加速部署。' `9 @$ s' H) f% |" d. Q) b  O
8 e( o1 ?! |* I
数据存储
+ ]9 N' v+ f: Q% H* `) ~. a
* l" b9 _. T' T9 L 用户信息、图片元数据、标签等大部分数据存储在 PostgreSQL 中。主要的 Shard 数据库集群有 12个节点。
' y* V3 N/ x- b1 W' t
+ R. @( b* Y) R1 v 实践中发现 Amazon 的网络磁盘系统单位时间内寻道能力不行,所以有必要将数据尽量放到内存中。创建了软 RAID 以提升 IO 能力,使用的 Mdadm 工具进行 RAID 管理。  q8 b/ X7 a& C- }$ p# K: V

9 k7 k2 H4 n* e  l+ Y7 j! s 管理内存中的数据,vmtouch 这个小工具值得推荐。4 |* T  X  h2 w( o

3 |% D# Q, X; j- ~* l! F' e* gPostgreSQL 设置为 Master-Replica 方式,流复制模式。利用 EBS 的快照进行数据库备份。使用 XFS 文件系统,以便和快照服务充分配合。 使用 repmgr 这个小工具做 PostgreSQL 复制管理器器。- U& V/ _8 k  c0 `- Q" D. Y3 |. u  E

: C- ^5 m- e0 \- o9 Z3 Y& h 连接池管理,用了 Pgbouncer。Christophe Pettus 的文章包含了不少 PostgreSQL 数据库的信息。$ j' @! P- A! ?( b" f

( C& F. e. f; n" {" ~: h, z/ mTB 级别的海量图片存储在 Amazon S3 上,CDN 采用的也是 Amazon 的服务,CloudFront。- f+ [- I" D3 c* u# n/ Y
: |! _! i0 t( _& Z: x5 y7 w7 y0 S
Instagram 也是 Redis 的重度用户,Feed 以及 Session 信息都用 Redis 处理,Redis 也是以 Master-Replica 方式部署。在 Replica 节点上进行数据备份。+ ^* O: m" T  T$ |+ R& r9 e/ a# Y

/ W" o1 B2 P$ H6 k$ q 使用了 Apache Solr 承担 Geo-search API 的工作,Solr 简单的 JSON 接口也不错。
% g' Q8 L  W, y
2 H/ ]' @! X2 Q- i7 t4 ~ 缓存使用了 6 个 Memcached 实例,库使用 pylibmc 和 libmemcached。亚马逊也提供缓存服务-Elastic Cache service ,Instagram 也有尝试,不过不便宜。
1 u4 w: H) f; u% O  M+ I4 {! I" t, g7 D8 [$ Q
任务队列/发布通知
& D/ j  R! D- o" ]& U% x- T6 F( `; N  V  s- |9 c. o4 d  r  D
队列服务使用 Gearman ,通知系统则使用 pyapns 来实现。6 E* {, H2 [; R: j

. H5 j) @8 f$ p: ]# k8 n 监控3 h1 ^6 r$ T: E7 C
3 l( n9 X' {2 t$ h$ d7 h+ I
前面提及的服务器实例数量加起来,的确有100多个,有效的监控是相当有必要的。使用 Munin 作为主要监控工具 , 也写了不少定制插件,外部监控用 Pingdom 的服务。通知服务使用PagerDuty。2 k/ X" n) U4 p9 i* j

6 V0 ]2 O: w* i# P8 w5 Q! q: u; M3 A 对于 Python 的错误报告,使用 Disqus 团队开源的 Sentry 来处理。
& O6 L4 w- _5 F+ H8 n) F  t! }
4 p6 L; R2 l% b9 F- p% n 几个感想
7 Q/ c, X. ?# v+ ~
* h: N* {3 n/ s& K0)轻装上阵说起来容易,做起来非常难。这也是 Instagram 团队目前最令人着迷的地方;- f1 L5 g7 x2 W7 @  s) _( z$ O

4 b. u/ M, a( Y( C5 ^1)Python 社区已经足够成熟,各个环节上都已经有不错的解决方案了。* n( C, Z3 R& E9 ~% U8 c
, M. k2 y1 K0 [
2)如果要问我最大的一个感慨,我要说:Amazon 真是一家伟大的公司,甚至比 Google 还伟大7 x/ a+ M; w+ {' R# N' Q


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

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

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

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

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