想必大家都听说过 Instagram ,它是全球最受欢迎的社交媒体平台之一,拥有数十亿的活跃用户
Instagram 诞生于 2010 年,上线一周就坐拥 10 万注册用户 , 一年之内就拥有了 1400 万用户 , 可见扩张趋势突飞猛进 。
Instagram 诞生的时候只有 3 个工程师,想必大家对【他们怎么设计后端架构,使用了什么技术来支持这么多用户】很感兴趣吧
那么今天我们就来了解一下 Instagram 是如何在只有 3 名工程师的情况下扩展到 1400 万用户
原文:https://engineercodex.substack.com/p/how-instagram-scaled-to-14-million
文章插图
图片
从 2010 年 10 月到 2011 年 12 月,Instagram 的用户在一年多的时间里从 0 增加到1400万,关键是他们只有 3 个工程师
这听起来是不是很不可思议 。据 Instagram 工程师透露,他们通过遵循下面 3 个关键原则并拥有可靠的技术栈来做到这一点:
- 让事情变得非常简单
- 不要重复造轮子
- 尽可能使用经过验证的可靠技术
EC2 是 Amazon 的云服务,它允许开发人员租用虚拟机
- 前端 App
- 负载均衡
当用户请求到来时,每个请求会先经过负载均衡器,然后才被转发到后端实际服务器
文章插图
图片
- 后端服务
文章插图
图片
Instagram 的应用程序服务器使用了 Django 框架 , 它是由 Python/ target=_blank class=infotextkey>Python 编写的,而 Gunicorn 是它们的 WSGI 服务器
WSGI (Web Server Gateway Interface)全称 web 服务器网关接口,它会将请求从 web 服务器转发到 web 应用程序
在批量管理和自动运维方面,Instagram 通过 Fabric 同时在多个实例上面并行运行命令,做到几秒钟内部署代码
Fabric 是 Python 的一个模块,基于 SSH 提供了丰富的交互接口,可以用来在本地或远程机器上自动化的执行 Shel l命令,非常适合用来做应用的远程部署及系统维护
这些实例在超过25台 Amazon High-CPU Extra-Large 机器上运行 。由于服务器本身是无状态的,如果需要处理更多请求时,便可以添加更多的机器
- 一般数据存储
PostgreSQL 和 Django 之间的连接通过 pgbouncer
pgbouncer 是一个 PostgreSQL 连接池
任何目标应用程序都可以像连接 PostgreSQL 服务器一样连接到 pgbouncer,并且 pgbouncer 将创建到实际服务器的连接,或者重用其现有的连接
Instagram 对用户的数据进行了分片,即使用代码将几千个“逻辑”碎片映射到几个物理碎片,因为收到的数据量很大(每秒超过 25 张照片和 90 个赞)
但是在将数据写入这组服务器之前,Instagram 必须解决如何为数据库中的每条数据分配ID(唯一标识符)的问题
下面则是 Instagram 中每条数据 ID 包含的内容:
- 41 位表示时间(以毫秒为单位)
- 13 位表示逻辑分片 ID
- 10 位表示自动递增序列,模数 1024 。这意味着我们可以在每毫秒内为每个分片生成 1024 个id
https://instagram-engineering.com/sharding-ids-at-instagram-1cf5a71e5a5c
- 照片数据存储
推荐阅读
- 碗莲栽培养殖方法和技术 碗莲栽培养殖方法
- 青蛙高产养殖技术 青蛙的高效养殖技术
- 看到章子怡这组早期照片,终于明白张艺谋为什么要力捧她了!
- LLM 大型语言模型技术精要,不看亏了
- 退休人员的养老金和退休前的专业技术职称有关系吗?
- 雪梨花养殖方法 雪梨花养殖方法和技术
- 40岁的女人学点化妆技术:会化妆,是一种积极且美丽的生活态度
- 华为手环睡眠监测原理,华为运动手环采用什么睡眠监测技术
- 什么是隐身技术 什么是隐身技术,有哪些分类
- 假设庖丁获得了全国技术能手称号 湖蒿是什么菜