了解Instagram背后的技术

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背后的技术细节,可以访问其技术团队的博客。

YOLOv8改进:卷积篇 | 保姆级探索动态蛇形卷积 (Dynamic Snake Convolution) 的实现与应用 动态蛇形卷积是一种新的卷积操作,它能够更好地捕捉图像中的细节信息。传统卷积核的形状和大小是固定的,而动态蛇形卷积则允许卷积核在不同的位置动态调整其形状,以更好地适应输入数据的特点。这种灵活性使得动态蛇形卷积在处理复杂背景和细节丰富的图像时具有显著优势。我们先定义一个基本的动态蛇形卷积模块。这个模块将作为YOLOv8卷积层的替代。为了全面集成动态蛇形卷积,我们需要修改YOLOv8的模型定义,将所有的基础卷积层替换为我们的SnakeConv模块。 阅读详情

相关推荐

封装CTP API为Java SDK

本文介绍了在Windows环境下使用Java调用CTP API的编译实现过程。首先需要准备CTP API SDK、JDK、SWIG和Visual Studio等工具,配置好开发环境。然后通过搭建目录结构、编写SWIG接口文件ctp.i,实现C++到Java的代码转换。文中详细说明了文件目录组织方式,并提供了处理中文乱码的代码示例。通过这一系列步骤,最终将CTP的C++接口转换为Java可调用的形式,为Java项目获取期货实时报价数据提供支持。

weixin_43952815的博客 1222

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

dify1.3.1应用服务与数据服务分离,附件及插件包迁移至minio,实现离线部署,保证插件正常运行

dify1.3.1应用服务与数据服务分离,附件及插件包迁移至minio,实现离线部署,保证插件正常运行

Time_1023的博客 1872

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

最近做了一个类似instagram的图片分享社区,能发表图片,点赞,评论等功能,我看看有时间把数据库设计的表结构整理一下分享给大家,这个数据库的设计如果想设计朋友圈的数据库的话也可以参考的。表包括:用户表、图片发布表、评论表、点赞表、私信记录表、精彩推荐表、优秀用户表、硬币交易表等。...

苟活于“盛世” 2487

S32K344 Bootloader实战:一个按键实现从Boot到App的无缝跳转(附完整代码)

本文详细介绍了基于NXP S32K344微控制器的Bootloader开发实战,重点解析如何通过一个硬件按键实现从Boot到App的可靠跳转。内容涵盖内存分区规划、中断向量表重映射、外设初始状态管理等核心要素,并提供了完整的代码示例和调试技巧,适用于汽车电子和工业控制等高可靠性应用场景。

weixin_29192365的博客 307

【python3.7】解决报错 error: Microsoft Visual C++ 14.0 or greater is required. Get it with “Microsoft C++

解决pip安装py7zr遇到的报错问题。

水w的博客 3937

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

Kafka 系列 —(17)Kafka 流式处理:Kafka Streams架构、使用场景、框架选择

本文介绍了KafkaStreams的架构特点、应用场景及与其他流处理框架的比较。KafkaStreams作为嵌入式分布式流处理库,其核心架构包含流处理器、任务、拓扑和本地状态存储,具备自动容错和伸缩能力。适用于实时监控、ETL、聚合、Join、物化视图等低延迟场景。与Flink、Spark相比,KafkaStreams适合简单架构和微服务,而Flink适合大规模处理,Spark更适合批处理。选择框架需根据具体场景需求,如微服务推荐KafkaStreams,大规模处理推荐Flink。

moton2017的博客 1629

[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

STM32 BootLoader 入门教程:从原理到 APP 跳转实现

在 STM32 项目开发中,BootLoader 通常用于实现固件升级、程序引导和应用程序校验。本文从最基础的 BootLoader 原理开始,讲解 STM32 内部 Flash 分区设计、APP 地址偏移、向量表重定位、BootLoader 跳转 APP 的核心代码,以及实际开发中常见的问题。本文适合刚开始接触 STM32 BootLoader、IAP 在线升级、串口升级、OTA 升级的开发者阅读。

lidecong133的博客 1665

Python与网络爬虫案例:电影评论抓取

接下来,我们就可以通过分析该页面中的HTML代码,来确定需要抓取的内容。在这段代码中,我们首先对每个评论div元素进行for循环,然后通过find方法获取class为'title'、'text'、'rating-other-user-rating'的元素,并将结果分别赋值给title、content和rating变量。在这段代码中,我们首先定义了目标网站的URL和headers信息,然后通过requests.get方法向目标网站发送了一个GET请求,并将返回的响应赋值给了response变量。

吃不胖. 1262

(转)了解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的博客 106

akamai3简单分析

akamai流程的简单分析

记录一些web逆向的过程 916

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

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

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

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

Pedrito666的博客 742

efm32 入门.pdf

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

Instagram 代码背后的免费午餐

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

Scent of Mobile Application 5066

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

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的博客 261

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的博客 647

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

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

gitblog_00166的博客 490
上一篇: 了解Instagram背后的技术
下一篇: 《实战HotSpot JVM GC》分享Slides
dingx
博客等级 码龄24年 67粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值