成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Instagram 早期技術架構,你了解了嗎?

開發 架構
在后端,任務被推送到 Gearman,這是一個任務隊列,將工作分配給更適合的機器。Instagram 有 大約 200 名 Python 工作者使用 Gearman 任務隊列。

哈嘍大家好,我是咸魚

想必大家都聽說過 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 個關鍵原則并擁有可靠的技術棧來做到這一點:

  • 讓事情變得非常簡單
  • 不要重復造輪子
  • 盡可能使用經過驗證的可靠技術

技術棧

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 的應用程序服務器使用了 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 上

圖片圖片

PostgreSQL 和 Redis 都使用了主從架構,并使用 Amazon EBS(彈性塊存儲)快照對系統進行頻繁備份

  • 推送通知和異步任務

Instagram  使用 pyapns 來實現,Pyapns 是一個開源的、通用的蘋果推送通知服務(APNS)提供商

在后端,任務被推送到 Gearman,這是一個任務隊列,將工作分配給更適合的機器。Instagram 有 大約 200 名 Python 工作者使用 Gearman 任務隊列

Gearman 常用于多個異步任務,例如向用戶的所有關注者推送活動(發布的新照片)

  • 監控

Instagram 使用開源 Django 應用程序 Sentry 來實時監控 Python 錯誤

Munin 用于繪制系統范圍的指標并發出異常警報。Instagram 有一堆自定義的 Munin 插件來跟蹤應用程序級別的指標,例如每秒發布的照片

Pingdom 用于外部服務監控,PagerDuty 用于處理事件和通知

責任編輯:武曉燕 來源: 咸魚運維雜談
相關推薦

2023-12-14 12:55:41

Pythondel語句

2024-02-19 08:40:22

2023-06-26 07:32:43

Kubernetes容器

2023-05-09 09:00:20

版本Canary框架

2023-11-27 00:48:46

displayvisibility

2025-02-17 08:18:27

C#TypeScriptJavaScript

2024-01-03 08:08:51

Pulsar版本數據

2023-09-27 16:29:55

開發團隊信息

2024-03-20 08:31:40

KotlinExtension計算

2023-10-12 16:39:00

2022-10-24 08:45:23

數據庫應用場景區塊鏈

2012-05-11 14:10:21

Instagram技術

2022-07-18 09:41:29

屬性類型安全Spring

2023-10-26 07:09:30

Golangrune字符

2023-05-15 08:16:33

Google I/OWeb平臺

2010-08-29 21:09:57

DHCP協議

2023-09-27 07:35:27

2024-03-15 08:23:26

異步編程函數

2022-05-05 21:06:33

人工智能計算機視覺自然語言處理

2022-05-06 16:31:27

人工智能自然語言生物特征識別
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚州春色 | 天堂一区 | 国产精品久久久久久久久久免费看 | 亚洲精品乱码久久久久久蜜桃 | 一级大黄 | 欧美成人一区二区 | 国产精品18久久久 | 精品九九在线 | 日日夜精品视频 | 国产伦一区二区三区四区 | 久久av资源网 | 精品久久久久久久久久久久久久久久久 | 成人午夜免费福利视频 | 中文字幕1区2区3区 日韩在线视频免费观看 | 无码日韩精品一区二区免费 | 国产精品美女久久久久久免费 | 久久久观看 | 国产免费一区二区 | 久久精品久久久久久 | 国产激情视频在线观看 | 中文字幕日韩欧美一区二区三区 | 中文一区 | 毛片免费看 | 国精产品一区一区三区免费完 | 成人精品在线视频 | 欧美亚洲视频 | 精品国产1区2区3区 在线国产视频 | 亚洲va国产日韩欧美精品色婷婷 | 日本一区二区在线视频 | 一级特黄视频 | av 一区二区三区 | 国产一级一级 | 亚洲国产高清高潮精品美女 | 国产在线一区二区 | 久久国产精品精品国产色婷婷 | 丁香婷婷久久久综合精品国产 | 黄色片网此 | 91精品国产综合久久香蕉922 | 久草视频在线播放 | 国产精品99精品久久免费 | 日韩在线视频免费观看 |