了解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个位于不同可用区里的副本,通过repmgr 以Streaming 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个实例,应用服务器通过pylibmc 和libmemcached 进行连接。虽然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背后的技术细节,可以访问其技术团队的博客 。

物理小白也能懂的PINN指南:用Python给神经网络注入‘物理常识‘ 本文为物理小白提供了一份通俗易懂的PINN入门指南。通过生活化类比和Python实战,详细讲解了如何将物理定律作为约束注入神经网络,使其具备“物理常识”,从而在数据稀缺时也能做出符合规律的预测。文章以热传导方程为例,手把手教你从零构建物理信息神经网络。 阅读详情

相关推荐

colmap+openMVS稠密重建

简要记录一下colmap+openMVS稠密重建相关使用。

weixin_41631106的博客 2243

Instagram的技术架构

http://blogread.cn/it/article/5497  Instagram 被 Facebook 以10亿美金收购。团队规模:13 人。而在被Facebook收购前的一个月,整个团队才7名员工。 2010年: 2位工程师 2011年: 3 位工程师 2012年: 5 位工程师     制胜法宝: 广泛的单元测试和功能测试 坚持DRY(Don’t Repea...

weixin_34128501的博客 1177

Springboot+Vue 实现鸿蒙商城管理系统开发实践

通过使用 Springboot 和 Vue 技术栈,我们成功实现了鸿蒙商城管理系统的开发。系统具备用户管理、商品管理、订单管理、库存管理和统计分析等功能,支持 Web 端和鸿蒙端的访问和操作。在开发过程中,我们充分利用了 Springboot 的快速开发优势和 Vue 的组件化开发特点,提高了开发效率和系统的可维护性。同时,通过与鸿蒙设备的集成,实现了多设备之间的数据交互和协同工作,提升了用户体验。

ZXJ_SXT的博客 1324

Instagram架构的发展

Instagram是一家基于iOS和Android的社交图片照片分享应用开发商。凭借着独特的运营理念,自2010年3月成立以来,短短一年的时间就吸引了1400万用户。而后随着手机相机改动、图像处理升级、与Facebook等社交灵活交互、支持Android等服务不断升级,用户量迅速冲击3000万,于2012年9月被Facebook以7.15亿美元收购。而截止到今年2月底,其活跃用户成功突破1亿。

小刚的专栏 6627

SAP ERP销售应收&成本科目确定

ERP作为业财一体软件,其中最核心的就是业务与财务模块的自动集成,无需财务进行手工做账,提高工作效率的同时降低人工操作产生的误差。今天浅浅的分享一下SD模块生成会计凭证时,借贷项确定的系统配置。一般项目上借贷项、科目都有FICO提供,但是具体的集成配置是在SD这边。

weixin_43657667的博客 1569

DoDAF2.0与UAF1.0与UPDM与IBD与Rhapsody与MagicDraw与SysML

参考:fr=ge_alafr=ge_ala。

计算机辅助工程 1421

Instagram后端架构

在 Amazon EC2上跑 Ubuntu Linux 11.04 (Natty Narwhal) 在 Amazon 的 ELB(Elastic Load Balancer) 上起了三个 Nginx 实例 DNS 服务使用 Amazon Route53 服务 使用 Django 做逻辑处理 大部分数据存储在 PostgreSQL TB 级别的海量图片存储在 Amazon S3 上 CD

小刚的专栏 3257

AMBA-CHI协议详解(二)

读事务,写事务,原子事务,Stash事务,Dataless事务,DVM事务,Retry事务。

Crazzy_M的博客 6656

[zz]了解Instagram背后的技术

[url]http://www.infoq.com/cn/news/2012/05/instagram[/url] 刚被Facebook以10亿美金收购的著名手机照片分享应用Instagram最近吸引了无数人的眼球,Android版本登陆Google Play不到一个月下载量就突破1000万,总用户数即将超过5000万。Instagram联合创始人Mike Krieger说他们用了8周时...

zyslovely的博客 234

R语言中的Gamma分布函数

在R语言中,我们可以使用最大似然估计(Maximum Likelihood Estimation,MLE)或最小二乘估计(Least Squares Estimation,LSE)等方法来估计Gamma分布的参数。本文介绍了在R语言中使用Gamma分布函数的基本操作,包括生成随机变量、计算概率密度函数和累积分布函数,以及参数估计和拟合。函数来生成Gamma分布的随机变量,计算概率密度函数(PDF)和累积分布函数(CDF),以及进行参数估计和拟合。要计算Gamma分布的累积分布函数(CDF),我们可以使用。

ByteWhiz的博客 1632

基于深度学习的农作物病虫害检测识别系统:YOLOv8 + UI界面 + 数据集

该系统的目标是使用YOLOv8模型自动检测农作物的病虫害,并通过UI界面提供实时反馈。用户可以通过上传图像,系统会输出图像中是否存在病虫害以及具体种类。数据集准备与处理:收集并准备包含农作物病虫害图像的数据集,并进行标注和数据增强。YOLOv8模型训练:使用YOLOv8训练农作物病虫害检测模型。UI界面设计与开发:开发一个用户友好的界面,支持上传图像并展示检测结果。系统测试与优化:评估模型的准确性、实时性,并对系统进行优化。

YOLO 883

(转)了解Instagram背后的技术

原文地址:http://www.infoq.com/cn/news/2012/05/instagram 刚被Facebook以10亿美金收购的著名手机照片分享应用Instagram最近吸引了无数人的眼球,Android版本登陆Google Play不到一个月下载量就突破1000万,总用户数即将超过5000万。Instagram联合创始人Mike Krieger说他们用了8周时间打造了最初的Ins...

weixin_30781107的博客 107

在 SAP 资产模块跨 2024 和 2025 两个年度操作后,运行 AFAB 测试无数据,大概率是折旧已完全过账、跨期配置异常或资产数据异常等原因

SAP资产模块跨年度操作AFAB测试无数据的排查方案:首先检查折旧是否已完全计提,确认资产主数据价值;其次验证跨年度配置是否合规,包括全局配置、折旧范围和账期状态;然后重新执行AFAR折旧计算刷新数据;排查资产主数据异常或业务操作冲突;最后核对AFAB运行参数是否正确设置,包括会计年度、期间范围和运行模式等。

金牌架构师 866

instagram技术_Instagram9位科技女孩进行技术采访的主要技巧

instagram技术by Rachel 通过瑞秋 Instagram9位科技女孩进行技术采访的主要技巧 (Top tips for technical interviews from nine of Instagram’s tech girls) My job-hunt came to an end a few weeks ago. After endless phone interview...

cumi7754的博客 6471

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

藏在巨大市场效应背后的Instagram标签

人们很容易忽视一些看似无足轻重的小标签,正如Instagram标签的重要性是让人着迷的。它在扩展你的粉丝群方面起着至关重要的作用。 根据美国数据极客Simply Measured对Instagram的使用情况研究表明,超过88%的品牌帖子至少包含一个标签,有标签的帖子比没有标签的帖子数量平均多12.6%。早在1988年,人们便开始在一个名为IRC - Internet Relay Chat的平...

Pedrito666的博客 742

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Instagram 代码背后的免费午餐

http://diwublog.com/archives/165 这篇博文。)Instagram 就是这样一款杀器。精美的 UI 、流畅的体验以及高水准的滤镜 ( filter ) 算法让这款应用在不到半年的时间内轻松拿下两百万的注册量以及一亿张照片的上传量。然而,出乎所有人意料, Instagram 本身仍然只是一个四人组成的团队。作为开发者,我们很难想象这个“袖珍团队”是如何在如此短暂

Scent of Mobile Application 5066

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Instagram CEO Kevin Systrom谈Instagram背后的故事

<br /> <br />First off, we have to say that we never expected the overwhelming response that we've seen. We went from literally a handful of users to the #1 free photography app in a matter of hours. But as my cofounder Mike Krieger likes to say, Instagram

行有志,思无涯 1253

Toutatis背后的技术:解析Instagram API逆向工程的关键步骤

Toutatis是一款强大的Instagram信息提取工具,能够帮助用户从Instagram账户中提取电子邮件、电话号码等关键信息。本文将深入解析Toutatis背后的核心技术,揭秘其如何通过Instagram API逆向工程实现信息提取功能,为你展示从API请求构造到数据解析的完整技术路径。 ## 逆向工程的起点:理解Instagram API架构 Instagram作为全球流行的社交媒体平

gitblog_00689的博客 473

Instagram背后的技术

刚被Facebook以10亿美金收购的著名手机照片分享应用Instagram 最近吸引了无数人的眼球,Android版本 登陆Google Play不到一个月下载量就突破1000万,总用户数即将超过5000万。Instagram联合创始人Mike Krieger说他们用了8周时间打造了最初的Instagram ,但现在的系统肯定已经今非昔比。Instagram技术团队曾发表过一篇文章 ,介...

SAN_YUN的专栏 245

揭秘Instagram Hyperlapse背后的技术

【编者按】Instagram是全球知名的社交网络之一,用户数量高达数亿人。日前,Instagram推出了一款新视频应用Hyperlapse。它是一种延时摄影技术或功能,用户们可以利用该应用将长时间拍摄的视频压缩成一段很短的视频,从而创建出“高质量的延时视频”并导入Instagram。 对于这样一款应用,很对业界人士认为它将很快被主流用户接受并对所有人乃至整个社会造成巨大的影响。很多人都会好奇,它...

weixin_34007906的博客 262

instagram架构_Facebook如何收购Instagram内幕故事

instagram架构 重点 (Top highlight)Facebook’s $1 billion acquisition of Instagram was a watershed moment for Big Tech. It demonstrated just how much wealth and power the industry holds — and how it could b...

weixin_26744853的博客 2267

使用IGdm Pro批量发送Instagram私信的技术指南

IGdm Pro是一款功能强大的Instagram消息管理工具,专为需要高效处理大量私信的用户设计。作为一款桌面应用程序,它提供了比官方Instagram应用更丰富的消息管理功能,特别适合社交媒体运营者、网红博主以及商业用户使用。 ## 准备工作 在开始批量发送消息前,您需要: 1. 下载并安装IGdm Pro客户端 2. 确保您的设备满足系统要求 3. 准备好您的Instagram账号凭证

gitblog_00425的博客 648

洞察你的Instagram世界 - Insights for Instagram深度解析

洞察你的Instagram世界 - Insights for Instagram深度解析 在数字营销和社交媒体监控的今天,每个内容创作者和品牌都渴望深入了解其Instagram账号的影响力。为此,我们发现了一款宝藏应用——Insights for Instagram,它以极简的方式为iOS用户揭示了Instagram媒体数据背后的秘密。 项目简介 Insights for Instagram是一个...

gitblog_00166的博客 490
上一篇: 我讨厌单元测试:滕振宇谈如何进行单元测试
下一篇: 了解Instagram背后的技术
dingx
博客等级 码龄24年 67粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值