`
DigitalSonic
  • 浏览: 215191 次
社区版块
存档分类
最新评论

了解Instagram背后的技术

阅读更多

(本文首发于InfoQ中文站:http://www.infoq.com/cn/news/2012/05/instagram

 

刚被Facebook以10亿美金收购的著名手机照片分享应用Instagram 最近吸引了无数人的眼球,Android版本 登陆Google Play不到一个月下载量就突破1000万,总用户数即将超过5000万。Instagram联合创始人Mike Krieger说他们用了8周时间打造了最初的Instagram ,但现在的系统肯定已经今非昔比。Instagram技术团队曾发表过一篇文章 ,介绍了Instagram背后的技术,日前Mike Krieger在名为Scaling Instagram 的演讲里,又介绍了更多细节,让人们能了解到5名技术人员是如何支撑起整个系统的。

 

一张照片上传的过程是这样的:

  1. 采用同步的方式写入媒体数据库
  2. 如果照片上有地理位置标签,则以异步的方式将照片提交给Solr 进行索引
  3. 将照片的ID加入每个关注者的列表里,该列表保存在Redis之中
  4. 在显示Feed时,选取一小部分照片ID,在Memcached里进行查询

在设计系统时,Instagram的设计哲学是简单、为最小化运维负担进行优化并监控一切内容;其核心原则是保持简单,不要重复发明轮子,尽可能使用经过验证、稳定可靠的技术。

 

由于只有5名技术人员(其中仅2.5名后端工程师),精力有限,选择Amazon的云服务 是个不错的选择。目前他们使用了超过100个EC2 实例用于提供各种服务,运行的操作系统是Ubuntu 11.04,之前的一些版本在高流量时表现不够稳定。在负载均衡方面,他们使用Amazon的Elastic Load Balancer 实现负载均衡,后端运行了3个Nginx实例,SSL只到ELB上为止,降低了Nginx上的CPU负载。DNS和CDN分别由Amazon的Route 53 CloudFront 提供,所有的照片都存放在S3 上,目前已经有几TB的规模了。

 

用于处理请求的应用服务器运行于Amazon High-CPU Extra-Large Instance 之上,由于他们的请求更多是CPU密集型的,因此这能更好地平衡CPU与内存。采用的开发框架是Django ,WSGI服务器是Gunicorn ,通过Fabric 在所有机器上进行并行部署,一次部署仅需几秒钟。

 

大多数数据都存放在PostgreSQL里,主分片集群运行于12个High-Memory Quadruple Extra-Large Instance (68.4GB内存)上,另有12个位于不同可用区里的副本,通过repmgrStreaming Replication 的方式进行同步。由于Elastic Block Store 的磁盘IOPS不高,因此需要将正在使用的数据都加载到内存里,vmtouch 能帮助管理内存中的数据。他们在EBS上使用mdadm 实现了软件Raid,以此提升写吞吐量;数据库的文件系统用的是XFS,在从库获取快照时,会先冻结RAID阵列,保证快照的一致性。

 

应用程序在连接数据库时,由Pgbouncer 建 立连接池。目前,Instagram的数据按照用户ID进行分片,某些分片可能会超出物理节点的容量上限,为此他们将数据分成了很多个逻辑分片,映射到少 数几个物理节点之上;当一个节点被填满之后,可以将某些逻辑分片移到别的节点上,以缓解该节点的压力。随着数据量的增长,以后他们也会进行垂直分 区,Django DB Router能让一切轻松不少。

 

Instagram也大量使用Redis 来存放复杂的对象(对象的大小做了一定的限制),用于主Feed、活动Feed、会话系统 及其他相关系统 。因为要将Redis的所有数据都放在内存里,此处同样也用了High-Memory Quadruple Extra-Large Instance ,并对数据做了分片。当Redis实例的请求达到4万/秒后,它渐渐成为了瓶颈,于是Redis也做了主从复制,副本的数据会经常导出到磁盘上,通过EBS快照进行备份。

 

除了Redis,他们还使用Memcached来做缓存,目前运行了6个实例,应用服务器通过pylibmclibmemcached 进行连接。虽然Amazon提供了Elastic Cache服务,但该服务的价格并不便宜,相比之下,还是运行自己的Memcached实例比较划算。异步任务队列使用的是Gearman ,目前有大约200个工作进程来处理各种任务,比如把照片分享到Twitter和Facebook,通知用户有新照片等等。Pyapns 已经处理了十亿的推送通知,非常稳定,他们还自己开发了基于Node.js的node2dm ,用于向Android设备发送推送通知。

 

监控方面,Instagram使用Munin 以图形化的方式呈现整个系统的运行状况,还通过Python-Munin 定制了一些插件,用来显示业务数据;网络守护进程Stated 可以实时收集数据并做汇总;Dogslow 会监控进程,一旦发现运行时间过长的进程,便会保存该进程的快照,以便后续分析,比如响应时间超过1.5秒的请求,通常都是卡在Memcached的set()和get_many()方法上。对于Python的错误,只要登上Sentry 就能实时获取错误信息。

 

HighScalability 上还根据整理Mike Krieger的演讲整理了一些值得借鉴的经验,比如:

  • 找那些你熟悉的技术和工具,在简单的使用场景里先做一些尝试
  • 不要使用两个工具来处理同样的任务
  • 事先准备降级方案,以便在需要时降低负载
  • 不要过度优化,或者希望能事先知道站点要扩展,对于一个初创的社交站点而言,没什么扩展性问题是解决不了的
  • 如果一个办法不行,赶快换下一个

如果您想进一步了解Instagram背后的技术细节,可以访问其技术团队的博客

分享到:
评论

相关推荐

    类似instagram图片分享社区数据库设计

    在构建一个类似Instagram的图片分享社区数据库时,我们需要考虑多个关键方面来确保系统高效、稳定且...通过“camera-jiegou.sql”和“camera-all.sql”这两个文件,我们可以深入了解这种复杂系统背后的数据库设计思路。

    instagram:instagram克隆

    Instagram 克隆是一种常见的软件开发练习,旨在帮助开发者...通过这个项目,开发者不仅可以提高编程技能,还能了解社交应用背后的架构和工作原理。无论是对于初学者还是经验丰富的开发者,这都是一个值得尝试的挑战。

    Atom-instatom_node,instagram的简单nodejs atom提要提供程序。通过在github上创建一个帐户,为gasp/instatom_节点开发做出贡献。.zip

    《Atom与instatom_node:构建Instagram的Node.js Atom提要》 在当今的软件开发领域,集成开发环境(IDE)扮演着至关...通过深入理解其背后的Node.js编程和Atom插件机制,你不仅可以享受便利,还能提升自己的技术能力。

    InstaPhotoDataParser:通过链接从 Instagram 获取照片数据

    在实际操作中,我们还需要了解Instagram API的基本概念,如OAuth认证流程,以便正确处理用户授权和访问令牌。此外,熟悉JSON格式也是必要的,因为Instagram API返回的数据通常是以JSON格式呈现。 总的来说,...

    Pr-tica1-Instagram

    【标题】"Pr-tica1-Instagram"是一个与Instagram相关的项目实践,可能是一个仿制版的Instagram应用或者是一个与其功能相关的编程练习...通过实践这样的项目,开发者可以提升综合技能,理解社交应用背后的复杂技术架构。

    Instagram-Brave-Bot:这是一个Instagram Unfollowfollow机器人,它使用Selenium通过Brave Browser自动执行其功能

    因此,在使用Instagram-Brave-Bot时,应合理设置执行间隔,避免过于频繁的操作,同时了解并遵循Instagram的使用政策。 6. **异常处理与登录验证**: 在编写自动化脚本时,必须考虑到可能出现的各种异常情况,如网络...

    社交聆听-了解客户真实需求的一场革命.pdf

    社交聆听平台会利用网络爬虫技术来抓取包括Facebook、Twitter、Instagram、微博、知乎等社交平台上的公开数据。这些数据不仅限于文字信息,还包括图片、视频和表情符号等各种形式的非结构化数据,它们共同构成了对...

    初中语文文摘社会麻烦背后的商机

    3. **大数据分析**:3floz可能运用大数据分析技术来了解消费者的购买习惯,预测需求,从而优化库存管理和产品推荐。通过收集和分析用户行为数据,企业可以更好地理解消费者喜好,提高销售额。 4. **物流与供应链...

    InstaFilters

    本文将深入探讨InstaFilters这一话题,揭示其背后的技术、设计原理以及如何利用这些滤镜提升社交媒体的互动体验。 首先,让我们了解什么是InstaFilters。InstaFilters,即Instagram滤镜,是Instagram应用程序内的一...

    SelfieMirror:这是适用于 Android 的 Instagram 客户端,向我们展示标记为自拍的照片

    本文将深入探讨SelfieMirror的核心功能、技术实现以及其背后的编程语言——Java。 首先,让我们了解SelfieMirror的基本功能。这款应用的核心是它的自拍筛选机制。在Instagram上,用户可以标记自己的照片为自拍,...

    依偎在阿尔卑斯山脚下的欧洲小镇.ppt

    【知识点】 虽然这个文件主要描述的是欧洲阿尔卑斯山...以上就是从描述欧洲小镇的文件中关联到的技术知识点,尽管文件的主要内容是关于旅游,但背后的技术支持不容忽视,它们共同构成了现代旅游体验的重要组成部分。

    奢侈品牌介绍英文.pptx

    Instagram、微博等平台上的精心策划内容使品牌能够直接与消费者建立联系,分享新品发布、时尚秀和背后的故事。同时,大数据和人工智能的运用帮助品牌更精准地了解客户需求,进行个性化推广。 此外,区块链技术也...

    上瘾:让用户养成使用习惯的四大产品逻辑

    为什么有些产品能抓住我们的注意力;而其他的产品却不能?...你将会看到: •创造用户粘性习惯的实际见解 •创造人们喜爱产品的可操作计划 •Twitter、Instagram、Pinterest等国际知名互联网产品常用的用户行为技术解析

    七夕情人节广告语推荐.doc

    8. **情感营销**:利用情感分析技术,了解哪些情感词汇更能触动消费者的心弦,如“浪漫”、“甜蜜”、“缘分”等,将这些元素融入广告语中。 9. **实时响应**:在社交媒体上设立实时聊天机器人,根据用户输入的...

    Toonme一键换成漫画脸.rar

    下面我们将深入探讨Toonme背后的技术以及如何使用该应用。 1. **人工智能技术**:Toonme的核心是深度学习算法,尤其是卷积神经网络(CNN)。这些算法经过训练,可以识别图像中的特征,如面部结构、眼睛、鼻子和嘴巴...

    生日手机短信集锦.doc

    【生日手机短信集锦】这份...综上所述,尽管"生日手机短信集锦"的主题看似简单,但它背后涵盖了众多与IT相关的知识点,从通信技术到社交媒体,再到人工智能和用户体验设计,展现了信息技术在日常生活中无处不在的影响。

    互联网用户的情绪表达方法研究4.zip

    通过对“互联网用户的情绪表达方法研究4.zip”这个压缩包文件中的内容进行深入分析,我们可以了解到多种多样的在线情感传达策略及其背后的社会心理学机制。 文档“互联网用户的情绪表达方法研究4.docx”可能包含了...

    经典温暖的生日祝福语精选.doc

    2. **社交媒体平台**:Facebook、Instagram、Twitter等社交媒体使得祝福可以瞬间传达给远方的朋友,而且能够公开展示,让更多的人参与进来,形成一种集体庆祝的氛围。 3. **个性化定制**:利用编程技术,我们可以...

    咖啡爱好者常逛的八个咖啡学习网站.docx

    - **Sweet Maria's主页**: 展示了团队走访各地咖啡产地的过程,用户可以了解不同产地咖啡豆的处理方法及其背后的故事。 #### 二、Barista Hustle **简介**: Barista Hustle是一个专注于咖啡技术和知识分享的专业...

    Web-Love520表白

    综上所述,【Web-Love520表白】不仅是一个情感传达的工具,背后还涵盖了Web开发的多个技术层面,包括前端设计、后端开发、数据库管理、安全措施、服务器部署、社交媒体集成以及数据分析等,这些都是构建此类应用不可...

Global site tag (gtag.js) - Google Analytics