您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

从 0 到 1400 万用户,3 名工程师如何撑起 Instagram?

时间:2023-11-06 17:30:37  来源:CSDN  作者:

Instagram,是 Meta于 2010 年推出的一款免费提供在线图片及视频分享的社群应用软件。在推出短短一年的时间里,Instagram 迅速“蹿红”,它的用户数量从 0 增长到了 1400 万。而在这背后,只有三名工程师在支撑。

Instagram 的成功,成为很多软件产品学习的楷模,那么它究竟是怎么做到的?背后运用了哪些技术栈?近日,一篇文章初探了其中的秘密。

来源:https://engineercodex.substack.com/p/how-instagram-scaled-to-14-million

翻译工具 | ChatGPT 责编 | 苏宓

出品 | CSDN(ID:CSDNnews)

以下为译文:

从 2010 年 10 月到 2011 年 12 月,Instagram 在短短一年多的时间里,用户数量从 0 增长到了 1400 万。他们仅仅依靠 3 名工程师实现了这一壮举。

他们之所以能够做到这一点,是因为遵循了 3 个关键原则并采用了可靠的技术堆栈。

Instagram 的指导原则:

1. 保持极度简单。

2. 不要重新发明轮子。

3. 在可能的情况下使用经过验证的、稳定的技术。

Instagram 背后的技术堆栈

早期的 Instagram 基础设施在 AWS 上运行,使用了带有 Ubuntu linux 的 EC2。EC2 是亚马逊的一项服务,允许开发人员租用虚拟计算机。

为了简化说明,这里从工程师的角度来看用户会话的生命周期(下文标注为“Session:”),从而捋清楚 Instagram 所用到的一些技术。

前端

Session:用户打开 Instagram 应用。

Instagram 最初于 2010 年作为 IOS 应用推出。由于 Swift 于 2014 年发布,我们可以猜测 Instagram 是使用 Objective-C 以及其他如 UIKit 的组合技术来编写的。

从 0 到 1400 万用户,3 名工程师如何撑起 Instagram?

负载均衡

Session:打开应用后,向后端发送请求以获取主要的动态照片,该请求将被发送到 Instagram 的负载均衡器。

Instagram 使用了亚马逊的弹性负载均衡器。工程师租用了3 个 Nginx 实例,并根据它们的健康状态进行交替切换。

每个请求首先会被发送到负载均衡器,然后再路由到实际的应用服务器。

从 0 到 1400 万用户,3 名工程师如何撑起 Instagram?

后端

Session:负载均衡器将请求发送到应用服务器,应用服务器负责保存处理请求的逻辑。

Instagram 的应用服务器使用 Django 框架以及它是用 Python/ target=_blank class=infotextkey>Python 编程语言编写的,并选择 Gunicorn 作为他们的 WSGI 服务器。

值得一提的是,WSGI(Web 服务器网关接口)将请求从 Web 服务器转发到 Web 应用程序。

Instagram 使用 Fabric 在多个实例上并行运行命令。这允许他们在几秒内部署代码。

这些应用服务器运行在超过 25 台亚马逊高性能 CPU 大型服务器上。由于服务器本身是无状态的,当需要处理更多请求时,他们可以添加更多服务器。

从 0 到 1400 万用户,3 名工程师如何撑起 Instagram?

通用数据存储

Session:应用服务器意识到请求需要主要动态数据。为此,让我们假设它需要:

  • 最新相关的照片 ID
  • 与这些照片 ID 匹配的实际照片
  • 这些照片的用户数据。

数据库:Postgres

Session:应用服务器从 Postgres 中获取最新相关的照片 ID。

应用服务器会从存储了大部分 Instagram 数据的 PostgreSQL 中提取数据,包括用户和照片元数据。

Postgres 和 Django 之间的连接使用 Pgbouncer 进行连接池化管理。

由于 Instagram 收到的数据量很大(每秒超过 25 张照片和 90 个点赞),工程师对数据进行了分片。他们使用代码将数千个“逻辑”分片映射到少数物理分片上。

Instagram 面临并解决的一个有趣挑战是生成可以按时间排序的 ID。他们生成的可按时间排序的 ID 如下:

  • 用 41 位表示毫秒级时间(使用自定义时期,可提供 41 年的 ID)
  • 用 13 位表示逻辑分片 ID
  • 用 10 位表示自动递增序列,模数为 1024。这意味着我们可以在每个分片中每毫秒生成 1024 个 ID

由于在 Postgres 中使用可按时间排序的 ID,应用服务器已成功接收到最新相关的照片 ID。

照片存储:S3 和 Cloudfront

Session:应用服务器获取与这些照片 ID 匹配的实际照片,并使用快速 CDN 链接,以便为用户快速加载这些照片。

数千字节的照片存储在 Amazon S3 中。这些照片通过 Amazon CloudFront 迅速提供给用户。

缓存:redis 和 Memcached

Session:为了从 Postgres 中获取用户数据,应用服务器(Django)使用 Redis 将照片 ID 与用户 ID 匹配。

Instagram 使用 Redis 存储了大约 3 亿张照片与创建它们的用户 ID 的映射,以便在获取主要动态数据、活动动态数据等时知道要查询哪个分片。所有的 Redis 都存储在内存中,以降低延迟,并分布在多台机器上。

通过一些巧妙的哈希处理,Instagram 成功地将 3 亿个键映射存储在不到 5GB 的空间中。

为了知道要查询哪个 Postgres 分片,需要这种 photoID 到 user ID 的键-值映射。

Session:由于最近已经缓存响应,通过高效的 Memcached 缓存获取用户数据,从 Postgres 获取数据的速度很快。

对于一般的缓存,Instagram 使用了 Memcached。那时他们有 6 个 Memcached 实例。在 Django 上使用 Memcached 相对简单。

有趣的事实:2 年后,即在 2013 年,Facebook 发布了一篇关于如何扩展 Memcached 以帮助他们处理每秒数十亿请求的重要论文。

Session:用户现在可以看到主页动态,其中包含他正在关注的人的最新照片。

从 0 到 1400 万用户,3 名工程师如何撑起 Instagram?

主从设置

Postgres 和 Redis 都在主从设置下运行,并使用 Amazon EBS(弹性块存储)的快照功能来频繁备份系统。

推送通知和异步任务

Session:现在,假设用户关闭了应用,但后来收到了一个朋友发布了一张照片的推送通知。

这个推送通知是使用 pyapns 发送的,以及 Instagram 发送出的十亿多条其他推送通知。Pyapns 是一个开源的通用苹果推送通知服务(APNS)提供商。

Session:用户非常喜欢这张照片!所以他决定在 Twitter 上分享它。

在后端,这个任务被推送到 Gearman,这是一个任务队列,用于分配适合的机器来处理工作。Instagram 拥有大约 200 个 Python 工作程序来消耗 Gearman 任务队列。

Gearman 被用于多个异步任务,比如向所有用户的粉丝(称为粉丝传播)推送活动信息(比如发布新照片)。

从 0 到 1400 万用户,3 名工程师如何撑起 Instagram?

监控

Session:糟糕!Instagram 应用程序崩溃了,因为服务器上出现了错误,并发送了错误的响应。三名 Instagram 工程师立即收到警报。

Instagram 使用 Sentry,一个开源的 Django 应用程序,实时监控 Python 错误。

Munin 用于绘制系统范围的指标和警告异常。Instagram 有很多自定义的 Munin 插件来跟踪应用级别的指标,比如每秒发布的照片数量。

Pingdom 用于外部服务监控,PagerDuty 用于处理事故和通知。

最终架构概述

从 0 到 1400 万用户,3 名工程师如何撑起 Instagram?



Tags:Instagram   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
亚马逊与Meta罕见“结盟”:Instagram和Facebook可一键直达亚马逊购物网
美国两大科技巨头:亚马逊(AMZN.US)以及Instagram和Facebook母公司Meta Platforms(META.US)正在测试一项重要功能:让购物者可以直接从Instagram和Facebook社交平台上的广告中购买亚...【详细内容】
2023-11-10  Search: Instagram  点击:(104)  评论:(0)  加入收藏
Instagram 早期技术架构,你了解了吗?
想必大家都听说过 Instagram ,它是全球最受欢迎的社交媒体平台之一,拥有数十亿的活跃用户Instagram 诞生于 2010 年,上线一周就坐拥 10 万注册用户,一年之内就拥有了 1400 万用...【详细内容】
2023-11-07  Search: Instagram  点击:(292)  评论:(0)  加入收藏
如何将TikTok连接到Instagram?
为什么将TikTok连接到Instagram?1、节省时间和资源创作短视频并不容易,品牌和创作者们要花上数小时来集思广益,然后才能把想法变成现实。将TikTok链接到Instagram可以帮助您更...【详细内容】
2023-11-07  Search: Instagram  点击:(104)  评论:(0)  加入收藏
从 0 到 1400 万用户,3 名工程师如何撑起 Instagram?
Instagram,是 Meta于 2010 年推出的一款免费提供在线图片及视频分享的社群应用软件。在推出短短一年的时间里,Instagram 迅速“蹿红”,它的用户数量从 0 增长到了 1400 万。而...【详细内容】
2023-11-06  Search: Instagram  点击:(253)  评论:(0)  加入收藏
取TikTok之精华,Instagram创始人们的新赌注
“用新闻打造下一个爆款,AI驱动的美版头条能复刻社交奇迹吗?”作者 | Lexie编辑 | Lu首图来源:Drunk on Social信息速食时代,数字媒体崛起,大大小小新闻门户和自媒体的遍地开花让...【详细内容】
2023-05-30  Search: Instagram  点击:(120)  评论:(0)  加入收藏
如何在iPhone上用声音滚动TikTok、Instagram和其他应用程序
如果你在iPhone上使用TikTok、Instagram或任何其他社交媒体应用程序,现在你可以不用手指就能滚动屏幕了。没错,你所要做的就是用你的声音,你的iPhone就会为你滚动。这是一个非...【详细内容】
2023-03-17  Search: Instagram  点击:(257)  评论:(0)  加入收藏
Instagram为什么被封号?要怎么避免被封?
在这个流量至上的媒体时代,新媒体、自媒体行业可以说是香饽饽,大家都想来分一杯羹,因此国内环境也是竞争非常激烈,因此很多运营从业者纷纷表示不想卷了,所以选择做起了海外的运营...【详细内容】
2022-12-12  Search: Instagram  点击:(481)  评论:(0)  加入收藏
Meta加大对NFT推广力度:Instagram创作者可直接向粉丝出售NFT
新浪科技讯 北京时间11月3日早间消息,据报道,尽管数字资产交易放缓,但Meta正在其平台上扩展NFT(不可替代代币)的推出。当地时间周三,Meta表示,Instagram上的创作者将能够制作并直接...【详细内容】
2022-11-03  Search: Instagram  点击:(209)  评论:(0)  加入收藏
Instagram信息流的运算逻辑是怎么样的
很多的外贸运营人员在是用Instagram后,都有着一些平台算法上的困扰,特别是在核心算法保密的状态下,虽然后面也是公布了六个比较关键的排名因素。在Instagram的官方透露中,有三个...【详细内容】
2022-10-31  Search: Instagram  点击:(271)  评论:(0)  加入收藏
Instagram广告有什么特点?与您分享Instagram营销技巧
全球社交媒体平台巨头之一的Instagram月活跃度超过10亿,70%以上的用户年龄在35岁以下,人均日浏览时长超过1小时。Instagram日益灵活的广告功能正不断加强对用户的影响力,这使得...【详细内容】
2022-10-26  Search: Instagram  点击:(279)  评论:(0)  加入收藏
▌简易百科推荐
即将过时的 5 种软件开发技能!
作者 | Eran Yahav编译 | 言征出品 | 51CTO技术栈(微信号:blog51cto) 时至今日,AI编码工具已经进化到足够强大了吗?这未必好回答,但从2023 年 Stack Overflow 上的调查数据来看,44%...【详细内容】
2024-04-03    51CTO  Tags:软件开发   点击:(5)  评论:(0)  加入收藏
跳转链接代码怎么写?
在网页开发中,跳转链接是一项常见的功能。然而,对于非技术人员来说,编写跳转链接代码可能会显得有些困难。不用担心!我们可以借助外链平台来简化操作,即使没有编程经验,也能轻松实...【详细内容】
2024-03-27  蓝色天纪    Tags:跳转链接   点击:(12)  评论:(0)  加入收藏
中台亡了,问题到底出在哪里?
曾几何时,中台一度被当做“变革灵药”,嫁接在“前台作战单元”和“后台资源部门”之间,实现企业各业务线的“打通”和全域业务能力集成,提高开发和服务效率。但在中台如火如荼之...【详细内容】
2024-03-27  dbaplus社群    Tags:中台   点击:(8)  评论:(0)  加入收藏
员工写了个比删库更可怕的Bug!
想必大家都听说过删库跑路吧,我之前一直把它当一个段子来看。可万万没想到,就在昨天,我们公司的某位员工,竟然写了一个比删库更可怕的 Bug!给大家分享一下(不是公开处刑),希望朋友们...【详细内容】
2024-03-26  dbaplus社群    Tags:Bug   点击:(5)  评论:(0)  加入收藏
我们一起聊聊什么是正向代理和反向代理
从字面意思上看,代理就是代替处理的意思,一个对象有能力代替另一个对象处理某一件事。代理,这个词在我们的日常生活中也不陌生,比如在购物、旅游等场景中,我们经常会委托别人代替...【详细内容】
2024-03-26  萤火架构  微信公众号  Tags:正向代理   点击:(10)  评论:(0)  加入收藏
看一遍就理解:IO模型详解
前言大家好,我是程序员田螺。今天我们一起来学习IO模型。在本文开始前呢,先问问大家几个问题哈~什么是IO呢?什么是阻塞非阻塞IO?什么是同步异步IO?什么是IO多路复用?select/epoll...【详细内容】
2024-03-26  捡田螺的小男孩  微信公众号  Tags:IO模型   点击:(8)  评论:(0)  加入收藏
为什么都说 HashMap 是线程不安全的?
做Java开发的人,应该都用过 HashMap 这种集合。今天就和大家来聊聊,为什么 HashMap 是线程不安全的。1.HashMap 数据结构简单来说,HashMap 基于哈希表实现。它使用键的哈希码来...【详细内容】
2024-03-22  Java技术指北  微信公众号  Tags:HashMap   点击:(11)  评论:(0)  加入收藏
如何从头开始编写LoRA代码,这有一份教程
选自 lightning.ai作者:Sebastian Raschka机器之心编译编辑:陈萍作者表示:在各种有效的 LLM 微调方法中,LoRA 仍然是他的首选。LoRA(Low-Rank Adaptation)作为一种用于微调 LLM(大...【详细内容】
2024-03-21  机器之心Pro    Tags:LoRA   点击:(12)  评论:(0)  加入收藏
这样搭建日志中心,传统的ELK就扔了吧!
最近客户有个新需求,就是想查看网站的访问情况。由于网站没有做google的统计和百度的统计,所以访问情况,只能通过日志查看,通过脚本的形式给客户导出也不太实际,给客户写个简单的...【详细内容】
2024-03-20  dbaplus社群    Tags:日志   点击:(4)  评论:(0)  加入收藏
Kubernetes 究竟有没有 LTS?
从一个有趣的问题引出很多人都在关注的 Kubernetes LTS 的问题。有趣的问题2019 年,一个名为 apiserver LoopbackClient Server cert expired after 1 year[1] 的 issue 中提...【详细内容】
2024-03-15  云原生散修  微信公众号  Tags:Kubernetes   点击:(6)  评论:(0)  加入收藏
站内最新
站内热门
站内头条