Instagram 架构分析笔记
全部 技术博客

Instagram团队上个月才迎来第 7 名员工,是的,7个人的团队。作为 iPhone 上最火爆的图片类工具,instagram 用户数量已经超过 1400 万,图片数量超过 1.5 亿张。不得不说,这真他妈是个业界奇迹。

几天前,只有三个人的 Instagram 工程师团队发布了一篇文章:What Powers Instagram: Hundreds of Instances, Dozens of Technologies,披露了 Instagram 架构的一些信息,足够勾起大多数人的好奇心。读罢做点笔记,各种线索还是有一定参考价值的。能打开原文的建议直接读原文。

Instagram 开发团队奉行的三个核心原则:
Keep it very simple (极简主义)
Don’t re-invent the wheel (不重复发明轮子)
Go with proven and solid technologies when you can(能用就用靠谱的技术)
OS/主机

操作系统的选择,在Amazon EC2上跑 Ubuntu Linux 11.04 (Natty Narwhal) ,这个版本经过验证在 EC2 上够稳定。因为只有三名工程师,只有三名工程师,所以自己部署机器到IDC是不靠谱的事情。幸好有亚马逊。

负载均衡

此前曾用过两台 Nginx 做DNS轮询承载前端请求,这样做会有副作用,现在已经迁移到Amazon的ELB(Elastic Load Balancer),起了三个 Nginx 实例,在 ELB 层停掉了SSL, 以缓解CPU压力。DNS 服务使用 Amazon Route53 服务。

应用服务器

启用了 25 个 Django 实例,运行在 High-CPUExtra-Large 类型的服务器实例上,之所以用 High-CPUExtra-Large 实例是因为应用请求是CPU密集型而非IO密集型。

使用Gunicorn作为 WSGI 服务器。过去曾用过 Apache 下的 mod_wsgi 模块,不过发现 Gunicorn 更容易配置并且节省CPU资源。使用Fabric加速部署。

数据存储

用户信息、图片元数据、标签等大部分数据存储在 PostgreSQL 中。主要的 Shard 数据库集群有 12个节点。

实践中发现 Amazon 的网络磁盘系统单位时间内寻道能力不行,所以有必要将数据尽量放到内存中。创建了软RAID以提升IO能力,使用的Mdadm工具进行RAID管理。

管理内存中的数据,vmtouch这个小工具值得推荐。

PostgreSQL 设置为 Master-Replica 方式,流复制模式。利用 EBS 的快照进行数据库备份。使用 XFS 文件系统,以便和快照服务充分配合。 使用repmgr这个小工具做 PostgreSQL 复制管理器器。

连接池管理,用了Pgbouncer。Christophe Pettus的文章包含了不少PostgreSQL数据库的信息。

TB 级别的海量图片存储在 Amazon S3 上,CDN 采用的也是 Amazon 的服务,CloudFront。

Instagram 也是 Redis 的重度用户,Feed 以及 Session 信息都用 Redis 处理,Redis 也是以 Master-Replica 方式部署。在 Replica 节点上进行数据备份。

使用了 Apache Solr 承担 Geo-searchAPI的工作,Solr 简单的 JSON 接口也不错。

缓存使用了 6 个 Memcached 实例,库使用 pylibmc 和 libmemcached。亚马逊也提供缓存服务-Elastic Cache service ,Instagram 也有尝试,不过不便宜。

任务队列/发布通知

队列服务使用Gearman,通知系统则使用pyapns来实现。

监控

前面提及的服务器实例数量加起来,的确有100多个,有效的监控是相当有必要的。使用 Munin 作为主要监控工具 , 也写了不少定制插件,外部监控用Pingdom的服务。通知服务使用PagerDuty。

对于 Python 的错误报告,使用 Disqus 团队开源的Sentry来处理。

几个感想

0)轻装上阵说起来容易,做起来非常难。这也是 Instagram 团队目前最令人着迷的地方;

1)Python 社区已经足够成熟,各个环节上都已经有不错的解决方案了。

2)如果要问我最大的一个感慨,我要说:Amazon 真是一家伟大的公司,甚至比 Google 还伟大。

转自草根网:原文地址: http://www.20ju.com/content/V189855.htm

Instagram 架构分析笔记相关推荐

  1. 【转载】Instagram架构分析笔记

    原文地址:http://chengxu.org/p/401.html Instagram 架构分析笔记 全部 技术博客Instagram团队上个月才迎来第 7 名员工,是的,7个人的团队.作为 iPh ...

  2. Instagram 架构分析笔记(转)

    Instagram 团队上个月才迎来第 7 名员工,是的,7个人的团队.作为 iPhone 上最火爆的图片类工具,instagram 用户数量已经超过 1400 万,图片数量超过 1.5 亿张.不得不 ...

  3. [转]Instagram 架构分析笔记

    作者: Fenng 来源:http://www.dbanotes.net/arch/instagram.html Updated: 2012 年4月10日凌晨消息,Instagram 被 Facebo ...

  4. instagram架构分析_转

    转自:http://www.eit.name/blog/read.php?504 Instagram 团队上个月才迎来第 7 名员工,是的,7个人的团队.作为 iPhone 上最火爆的图片类工具,in ...

  5. linux内核源码分析笔记

    一.内核源码目录结构 1.Linux 内核源代码包括三个主要部分 1)内核核心代码:包括linux内核整体架构分析笔记描述的各子系统和子模块,以及其他支撑子系统,如:电源管理.linux初始化等. 2 ...

  6. Deep Learning论文笔记之(六)Multi-Stage多级架构分析

    Deep Learning论文笔记之(六)Multi-Stage多级架构分析 zouxy09@qq.com http://blog.csdn.net/zouxy09          自己平时看了一些 ...

  7. RT-1052学习笔记 - GPIO架构分析

    RT-1052学习笔记 - GPIO架构分析 一.RT1052之GPIO与IOMUX 二.GPIO架构分析 分析GPIO的外设框架 库函数操作 1.初始化MUX 2.初始化PAD 3.初始化GPIO外 ...

  8. motan学习笔记 二 motan架构分析

    motan学习笔记 一 微博轻量级RPC框架Motan motan学习笔记 二 motan架构分析 motan学习笔记 三 motan Demo 分析 motan学习笔记 四 motan Demo 之 ...

  9. TPM分析笔记(十)TPM 组织架构(TPM hierarchy)

    目录 一.TPM组织架构 1.1 三种持续性组织架构 1.1.1 平台hierarchy 1.1.2 存储hierarchy 1.1.3 背书hierarchy 1.2 非持久性组织架构 1.2.1 ...

最新文章

  1. linux gcc 静态编译 减小体积
  2. VC++控制台程序中使用定时器
  3. mysql优化概述4
  4. java生成验证码工具类_Java生成图形验证码工具类
  5. Android持久化存储(1)文件存储
  6. 高通要大干无人机芯片 耗时一年获总部飞行许可
  7. TIOBE 2月编程语言排行榜新鲜出炉!C# 获3.08%增长率!
  8. 量子计算机功率,量子计算功耗知多少
  9. BZOJ 1031: [JSOI2007]字符加密Cipher( 后缀数组 )
  10. 【跨语言通信】你还在为了JAVA调用C而苦恼吗
  11. google bert
  12. hypopg1.3.0 使用-常用命令
  13. c语言知识点总完整版pdf,C语言知识点总结 重点版.pdf
  14. 数据在网络中如何传输的
  15. 基于JAVA第二课堂选课系统计算机毕业设计源码+系统+lw文档+部署
  16. Android Service保活方法总结
  17. android 异源投屏,华为MATE10支持异源投屏是什么意思?
  18. 提升团队战斗力的要点
  19. iOS 图片转base64编码
  20. React 和 Redux

热门文章

  1. 赶集网入车行,纵向垂直看好市场
  2. [App探索]JSBox中幽灵触发器的实现原理探索
  3. 服务器存储系统只读,服务器变成了只读系统
  4. C语言网 蓝桥杯训练 1075 台球碰撞
  5. 快捷键设置--vscode--pycharm
  6. 同行涉嫌数据抄袭、商业诋毁和人身攻击,甚至向我们的法人推销,你会怎么办?...
  7. unity静音功能_如何更改iPad静音开关的功能
  8. 运行python程序的两种方式交互式和文件式_教你如何编写、保存与运行 Python 程序...
  9. JS中获取标签的宽和高
  10. Go语言学习笔记【18】 Go语言常见库:html/template