作者:Fenng|可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明
网址:http://www.dbanotes.net/arch/instagram.html
Updated: 2012 年4月10日凌晨消息,Instagram 被 Facebook 以10亿美金收购。团队规模:13 人。
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 还伟大。
--EOF--
分享到:
相关推荐
作业1执行推文的情感分析。 作业2评估了用户Instagram活动与图像内容及其幸福感之间关系的性质。 这是通过有关用户的数据,图像及其元数据和从图像中提取的特征(例如,情感,面部表情)来完成的。
instagram软件 apk
Instagram客户端 高仿~ 初学者入门的好教程!
2019年Instagram调查报告(英文)-Instagram,2019年Instagram调查报告(英文)-Instagram
作者 Instagram 大小 10.29MB 描述 Instagram,iPhone上最著名的照片抓拍、编辑工具之一。它与众不同,为用户创建了一个完整的社交网络。现在它终于抵达了安卓平台,让所有安卓手机用户也能体验这款软件带来的...
549654407452296Instagram.apk
instagram克隆
跨境电商之Pinterest和Instagram的优势分析.pdf
Scaling-Instagram.pdf
Instagram 2020.07.03 登录协议,10版本,有任何问题请私聊
跨境电商之Pinterest和Instagram的优势分析参照.pdf
跨境电商之Pinterest和Instagram的优势分析汇编.pdf
instagram APP ANDROID
instagram_private_api, 用于访问 Instagram API private的python 库 Instagram private APIInstagram private API的python 包装,没有 3rd 方依赖项。 同时支持应用程序和网络 api 。 概述当他们在开发人员访问中夹...
使用Instagram图片下载的并非图片本身,而是图片链接,用户可以用浏览器或其他工具批量下载。
Laravel开发-laravel-instagram-api 为Laravel 5.4实现Instagram私有API
PHP-Instagram-API, 用于 Instagram API的PHP 5.3 + 包装器 #PHP Instagram API这是一个用于 Instagram API的PHP + API包装器。API带有一个cURL客户机( InstagramNetCurlClient ) 来访问 Instagran API 。
这个是instagram 的mac版,可以在状态栏中出现查看状态。
InstaIndex 可以直观地索引你在 Instagram 的图片。InstaIndex 是一个简单的管道,结合了 Clarifai 的图像 识别/深度学习 API ,以及 Algolia 的搜索作为服务 API ,可以让你直观地索引你的 Instagram 的图片,随时...
前端项目-jquery-instagram,Instagram jQuery plugin