Instagram 早期技术架构

这篇具有很好参考价值的文章主要介绍了Instagram 早期技术架构。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

哈喽大家好,我是咸鱼

想必大家都听说过 Instagram ,它是全球最受欢迎的社交媒体平台之一,拥有数十亿的活跃用户

Instagram 诞生于 2010 年,上线一周就坐拥 10 万注册用户,一年之内就拥有了 1400 万用户,可见扩张趋势突飞猛进。

Instagram 诞生的时候只有 3 个工程师,想必大家对【他们怎么设计后端架构,使用了什么技术来支持这么多用户】很感兴趣吧,那么今天我们就来了解一下 Instagram 是如何在只有 3 名工程师的情况下扩展到 1400 万用户

原文:https://engineercodex.substack.com/p/how-instagram-scaled-to-14-million
Instagram 早期技术架构

从 2010 年 10 月到 2011 年 12 月,Instagram 的用户在一年多的时间里从 0 增加到1400万,关键是他们只有 3 个工程师

这听起来是不是很不可思议。据 Instagram 工程师透露,他们通过遵循下面 3 个关键原则并拥有可靠的技术栈来做到这一点:

  • 让事情变得非常简单
  • 不要重复造轮子
  • 尽可能使用经过验证的可靠技术

技术栈

Instagram 早期的基础设施运行在 AWS 上,使用 EC2 和 Ubuntu Linux

EC2 是 Amazon 的云服务,它允许开发人员租用虚拟机

  • 前端 APP

Instagram 最初在 2010 年作为 iOS 应用程序推出。由于 Swift 在 2014 年才发布,那 Instagram 应该是使用 Objective-C 和 UIKit 等其他语言的组合来编写的

  • 负载均衡

Instagram 使用了 Amazon 的 Elastic 负载均衡器(Load Balancer)。他们有 3 个 Nginx 实例,Nginx 之间会进行健康检查以此保证服务高可用

当用户请求到来时,每个请求会先经过负载均衡器,然后才被转发到后端实际服务器

Instagram 早期技术架构

  • 后端服务

Instagram 的应用程序服务器使用了 Django 框架,它是由 Python 编写的,而 Gunicorn 是它们的 WSGI 服务器

WSGI (Web Server Gateway Interface)全称 web 服务器网关接口,它会将请求从 web 服务器转发到 web 应用程序

在批量管理和自动运维方面,Instagram 通过 Fabric 同时在多个实例上面并行运行命令,做到几秒钟内部署代码

Fabric 是 Python 的一个模块,基于 SSH 提供了丰富的交互接口,可以用来在本地或远程机器上自动化的执行 Shel l命令,非常适合用来做应用的远程部署及系统维护

这些实例在超过25台 Amazon High-CPU Extra-Large 机器上运行。由于服务器本身是无状态的,如果需要处理更多请求时,便可以添加更多的机器

  • 一般数据存储

Instagram 使用了 PostgreSQL 来存储数据,应用程序服务器将从 PostgreSQL 中提取数据,PostgreSQL 存储了 Instagram 的大部分数据,例如用户和照片元数据

PostgreSQL 和 Django 之间的连接通过 pgbouncer

pgbouncer 是一个 PostgreSQL 连接池

任何目标应用程序都可以像连接 PostgreSQL 服务器一样连接到 pgbouncer,并且 pgbouncer 将创建到实际服务器的连接,或者重用其现有的连接

Instagram 对用户的数据进行了分片,即使用代码将几千个“逻辑”碎片映射到几个物理碎片,因为收到的数据量很大(每秒超过 25 张照片和 90 个赞)

但是在将数据写入这组服务器之前,Instagram 必须解决如何为数据库中的每条数据分配ID(唯一标识符)的问题

下面则是 Instagram 中每条数据 ID 包含的内容:

  • 41 位表示时间(以毫秒为单位)
  • 13 位表示逻辑分片 ID
  • 10 位表示自动递增序列,模数 1024。这意味着我们可以在每毫秒内为每个分片生成 1024 个id

Instagram 的数据分片和 ID 具体是怎么解决的小伙伴们可以看这篇文章:

https://instagram-engineering.com/sharding-ids-at-instagram-1cf5a71e5a5c

  • 照片数据存储

对于用户的照片,Instagram 使用 Amazon S3 来存储,并且使用 Amazon CloudFront 把照片快速提供给用户

  • 缓存

Instagram 使用 Redis 将大约 3 亿张照片映射到创建它们的用户 ID 进行存储,所有 Redis 都存储在内存中以减少延迟,并在多台机器上进行分片。

通过一些巧妙的散列,Instagram 能够在不到 5 GB 的内存中存储 3 亿个键映射

对于常规缓存,Instagram 使用了 Memcached。他们当时有 6 个 Memcached 实例。Memcached 相对容易叠加在 Django 上

Instagram 早期技术架构
PostgreSQL 和 Redis 都使用了主从架构,并使用 Amazon EBS(弹性块存储)快照对系统进行频繁备份

  • 推送通知和异步任务

Instagram 使用 pyapns 来实现,Pyapns 是一个开源的、通用的苹果推送通知服务(APNS)提供商

在后端,任务被推送到 Gearman,这是一个任务队列,将工作分配给更适合的机器。Instagram 有 大约 200 名 Python 工作者使用 Gearman 任务队列

Gearman 常用于多个异步任务,例如向用户的所有关注者推送活动(发布的新照片)

  • 监控

Instagram 使用开源 Django 应用程序 Sentry 来实时监控 Python 错误

Munin 用于绘制系统范围的指标并发出异常警报。Instagram 有一堆自定义的 Munin 插件来跟踪应用程序级别的指标,例如每秒发布的照片

Pingdom 用于外部服务监控,PagerDuty 用于处理事件和通知文章来源地址https://www.toymoban.com/news/detail-745929.html

到了这里,关于Instagram 早期技术架构的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 27岁,没有学历,没有技术,大家有什么好的职业发展建议吗?

    我们常常把人的学习能力划分为三个阶段,25岁以前的黄金期,25-28岁的白银期,28-33岁以后的青铜期。主要依据无外乎个人的学习能力、记忆力和精力、生活压力等各方面因素综合考量而来的。一般都是越年轻越有活力,思维更敏捷,学习东西也更快;但也不是说年龄大了就

    2023年04月27日
    浏览(54)
  • AIGC + 任意应用情景组合,从技术层面给了大家体验不同领域的创作的机会

    还在为学技术的时候面对一大堆教程苦恼? 画画、剪辑、建模 ...  啥啥啥都想学 🤯 AIGC 来解决!! 每个人都有机会当五分钟艺术家! AIGC 究竟有多强大? 简单用一个公式来概况 AIGC 的强大之处,就是 AIGC + 任意应用情景组合在一起,就可以生成无限的可能,诞生出巨大的

    2024年02月09日
    浏览(40)
  • chrome插件:instagram粉丝列表追踪

    开发一个 Chrome 插件来实现 Instagram 粉丝列表的追踪并进行关注管理是一个相对复杂的任务,需要深入了解 Instagram 的网页结构和使用 Chrome 插件开发的基础知识。下面是一个大致的步骤和示范代码,但由于 Instagram 的网页结构可能随时更改,因此需要定期更新插件以适应变化。

    2024年02月07日
    浏览(36)
  • 如何在Instagram和kol展开合作

    网红营销已经演变成一个由品牌、MCN机构、红人和消费者组成的复杂生态系统,并在某种程度上重新定义了当今社交媒体时代营销和广告的本质。在这个情况下,品牌找红人进行营销推广已经成为大势,而最能体现网红营销发展的莫过于Instagram这个平台。今天就来聊聊Instag

    2024年02月07日
    浏览(37)
  • 巨头游戏:Instagram 将运行 Polygon 支持的 NFT 市场

    Meta 宣布社交媒体巨头 Instagram 将推出一个在 Polygon 支持下运行的不可替代代币 (NFT) 市场。 “创作者很快就能在 Instagram 上制作自己的数字收藏品,并将其出售给 Instagram 内外的粉丝,”Meta 在更新的博客文章中宣布。 根据 Meta 的说法,用户将从 Polygon 区块链开始获得一个端到

    2024年01月19日
    浏览(43)
  • Instagram最新养号攻略:保护您的账号安全

    Instagram一直以来都是海外社媒巨头,也是跨境外贸引流推广的必争之地。然而,在庞大的用户群中,了解平台规则的人并不多。Instagram有一系列的社区准则和使用条款,稍有不慎违反规定就会造成限流,甚至导致账号被封禁,进而造成客户流失。 为了帮助大家更好地养号防封

    2024年02月01日
    浏览(39)
  • ins视频批量下载,instagram批量爬取视频信息【爬虫实战课1】

    Instagram 是目前最热门的社交媒体平台之一,拥有大量优质的视频内容。但是要逐一下载这些视频往往非常耗时。在这篇文章中,我们将介绍如何使用 Python 编写一个脚本,来实现 Instagram 视频的批量下载和信息爬取。 我们使用selenium获取目标用户的 HTML 源代码,并将其保存在本地

    2024年04月23日
    浏览(56)
  • 中国互联网的早期形态

    1 大约是从 1991 年开始,国内开始了第一个 BBS 站——北京长城站,经过长时间发展,直到 1995 年,随着计算机及其外设的大幅降价,BBS 才逐渐被部分人们所认识。少数玩 BBS 站的“极客”站长, 基于个人关系,每天都互相交换电子邮件,渐渐地形成了一个全国性的电子邮件

    2024年01月16日
    浏览(32)
  • RFC8470在HTTP中使用早期数据

    使用 TLS早期数据会暴露出重放攻击的可能性。本文定义了允许客户端与服务器就早期数据中发送的HTTP请求进行通信的机制。描述了使用这些机制来减轻重放风险的技术。 TLS 1.3[TLS13]引入了早期数据(也称为零往返时间(0-RTT)数据)的概念。如果客户端最近与同一服务器 通

    2024年02月16日
    浏览(24)
  • STM32 HAL库常用函数(早期学习备份版)

    目录 GPIO  读取电平  电平设置 翻转IO口电平 NVIC  中断回调函数  switch选择中断线 定时器中断回调函数 UART中断回调函数 Timers 定时器开关函数 开启定时器及中断 关闭定时器及中断 开启定时器 关闭定时器 PWM开启定时器 PWM关闭定时器 读写定时器相关值的函数 设置比较值 获

    2024年02月21日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包