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

Instagram 僅 3 名工程師,如何做到 1400 萬用戶?

原創 精選
移動開發 iOS
Instagram發布的19個月,后活躍用戶數量超過5000萬,活躍用戶數量達到1億,2012年6月份達到1.3億。同年10月25日,當時的Facebook以總值7.15億美元收購Instagram,創始人Kevin從中獲得了4億美元的回報。

整理 | 云昭

策劃 | 言征 

出品 | 51CTO技術棧(微信號:blog51cto)

2010 年 10 月 6 日,舊金山。當人們還沉浸在擁有更強大攝像頭的 iPhone 4 的激動心情時,一款名為“ Instagram ” 的 iOS 照片分享應用出現在應用商店中。

當天就收獲了 2.5 萬首批用戶,一周之后,下載量攀升到 10 萬,從 2010 年 10 月到 2011 年 12 月,Instagram在短短一年多的時間里,用戶數量從 0 增長到 1400 萬。

而他的創始人, Kevin Systrom 這期間用了 3 名工程師就做到了這一點。這就讓我們回到那個奇幻的時刻,從工程師的角度思考,一探他們是如何做到的。

簡單來說,他們通過如下遵循 3 個關鍵指導原則并擁有可靠的技術堆棧來做到這一點:讓事情變得非常簡單、不要重新發明輪子、盡可能使用經過驗證的可靠技術。

一、早期基礎配置

早期 Instagram 的基礎設施,是在 AWS 上運行的,使用 EC2 和 Ubuntu Linux。作為參考,EC2 是亞馬遜的服務,允許開發人員租用虛擬計算機。

為了讓事情變得簡單,并且由于我喜歡從工程師的角度思考用戶,所以讓我們回顧一下用戶場景會話的生命周期。

二、前端

場景回顧:用戶打開界面。

Instagram 最初于 2010 年作為 iOS 應用程序推出。由于 Swift 于 2014 年發布,我們可以假設 Instagram 是使用Objective-C 和 UIKit 等其他東西的組合編寫的。

圖片圖片

三、負載均衡

場景回顧:打開應用程序后,獲取主訂閱源照片的請求會發送到后端,并在那里到達Instagram的負載均衡器。

Instagram 使用亞馬遜的彈性負載均衡器。他們有 3 個 NGINX 實例,根據它們是否健康來換入和換出。

每個請求首先到達負載均衡器,然后再路由到實際的應用程序服務器。

圖片圖片

四、后端

場景回顧:負載均衡器將請求發送到應用程序服務器,應用程序服務器保存正確處理請求的邏輯。

Instagram 的應用服務器使用Django ,用 Python 編寫,Gunicorn作為他們的 WSGI 服務器。

回顧一下,WSGI(Web 服務器網關接口)將請求從 Web 服務器轉發到 Web 應用程序。

Instagram 使用Fabric同時在多個實例上并行運行命令。這允許在幾秒鐘內部署代碼。

它們運行在超過 25 臺 Amazon High-CPU 超大型機器上。由于服務器本身是無狀態的,當他們需要處理更多請求時,他們可以添加更多機器。

圖片圖片

五、通用數據存儲

場景回顧:應用服務器發現請求需要主提要的數據。為此,我們假設它需要:

  • 最新的相關照片ID 
  • 與這些照片ID匹配的實際照片
  • 這些照片的用戶數據。

1.數據庫:Postgres

場景回顧: 應用服務器從Postgres獲取最新的相關照片ID。

應用程序服務器將從PostgreSQL中提取數據,PostgreSQL 存儲了 Instagram 的大部分數據,例如用戶和照片元數據。

Postgres 和 Django 之間的連接使用Pgbouncer進行池化。

Instagram由于收到的數據量很大(每秒超過 25 張照片和 90 個贊)而對他們的數據進行了分片。他們使用代碼將數千個“邏輯”分片映射到幾個物理分片。

Instagram 面臨并解決的一個有趣的挑戰是生成可以按時間排序的 ID。他們生成的可按時間排序的 ID 如下所示:

  • 41 位時間(以毫秒為單位)(提供了 41 年的 ID 和自定義紀元)
  • 13位代表邏輯分片ID
  • 10 位表示自動遞增序列,模數 1024。這意味著我們可以為每個分片、每毫秒生成 1024 個 ID

場景回顧:由于Postgres中的可按時間排序的ID,應用服務器已成功接收到最新的相關照片ID。

2.照片存儲:S3 和 Cloudfront

場景回顧: 然后,應用服務器通過快速CDN鏈接獲取與這些照片ID匹配的實際照片,以便為用戶快速加載。

Amazon S3中存儲了數 TB 的照片。這些照片已使用 Amazon CloudFront快速提供給用戶。

3.緩存:Redis 和 Memcached

場景思考:為了從Postgres獲取用戶數據,應用服務器(Django)使用Redis將照片ID與用戶ID進行匹配。

Instagram 使用 Redis 將大約 3 億張照片存儲到創建它們的用戶 ID 的映射,以便知道在獲取主提要、活動提要等照片時要查詢哪個分片。所有 Redis 都存儲在內存中減少延遲,并且它被分片到多臺機器上。

通過一些巧妙的哈希處理,Instagram 能夠在不到 5 GB 的空間中存儲 3 億個鍵映射。為了知道要查詢哪個 Postgres 分片,需要此 photoID 到用戶 ID 鍵值映射。

場景回顧:由于使用Memcached的高效緩存,從Postgres獲取用戶數據很快,因為最近的響應被緩存了。

對于一般緩存,Instagram 使用Memcached 。他們當時有 6 個 Memcached 實例。Memcached 在 Django 上分層相對簡單。

有趣的是:兩年后,即 2013 年,Facebook 發布了一篇具有里程碑意義的論文,介紹了他們如何擴展 Memcached 以幫助他們每秒處理數十億個請求。

用戶現在可以看到主頁,里面有他關注的人的最新照片。

圖片圖片

4.主副本設置

Postgres 和 Redis 都在主副本設置中運行,并使用 Amazon EBS(彈性塊存儲)快照來頻繁備份系統。

六、推送通知和異步任務

場景回顧:現在,假設用戶關閉了應用程序,但隨后收到朋友發布照片的推送通知。

此推送通知是使用pyapns發送的,與 Instagram 已經發送的其他十億多條推送通知一起。Pyapns 是一個開源、通用的 Apple 推送通知服務 (APNS) 提供商。

場景回顧:用戶非常喜歡這張照片!所以他決定在Twitter上分享。

在后端,任務被推送到Gearman中,這是一個任務隊列,它將工作外包給更適合的機器。Instagram 有大約 200 個 Python 工作線程使用 Gearman 任務隊列。

Gearman 用于執行多個異步任務,例如向所有用戶的關注者推送活動(例如發布的新照片)(這稱為扇出)。

圖片圖片

七、監控

場景回顧:Instagram應用程序因服務器出現錯誤而崩潰,并發送了錯誤響應。Instagram的三名工程師立即得到了提醒。

Instagram 使用Sentry (一款開源 Django 應用程序)來實時監控 Python 錯誤。

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

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

八、最終架構一覽

圖片圖片

——后記——

Instagram發布的19個月,后活躍用戶數量超過5000萬,活躍用戶數量達到1億,2012年6月份達到1.3億。同年10月25日,當時的Facebook以總值7.15億美元收購Instagram,創始人Kevin從中獲得了4億美元的回報。

值得一提的是,于編程而言,Kevin是自學成才。管理學科出身的他,剛畢業時可謂是一張白紙,在社交旅游網站Nextstop營銷部門工作時,凱文開始每晚抽時間自學編程。

Instagram 的成功帶來的不僅僅創造了當代硅谷最偉大的成功故事之一,Kevin的自學成才的歷程成為了激烈開發者們對于編程的熱情。

參考鏈接:

https://instagram-engineering.com/what-powers-instagram-hundreds-of-instances-dozens-of-technologies-adf2e22da2ad

https://instagram-engineering.com/storing-hundreds-of-millions-of-simple-key-value-pairs-in-redis-1091ae80f74c

https://instagram-engineering.tumblr.com/post/10853187575/sharding-ids-at-instagram


責任編輯:武曉燕 來源: 51CTO技術棧
相關推薦

2009-04-01 09:23:29

IT工程師職場

2017-11-30 09:32:36

2011-11-09 15:49:52

API

2012-05-02 13:57:36

Instagram

2022-09-05 11:25:22

惡意瀏覽器Chrome惡意擴展

2011-12-26 15:31:33

2021-01-18 09:00:00

人工智能機器學習工程師

2021-05-10 17:22:49

工程師代碼技術

2009-11-20 11:37:11

Oracle完全卸載

2011-05-25 16:59:20

前端工程師

2020-03-23 08:34:50

百度工程師判刑

2013-03-07 10:22:12

PaaSGoogleSongPop

2011-11-02 10:57:24

Instagram移動應用照片分享

2013-01-06 10:57:03

2018-09-13 09:39:03

騰訊運維IT

2009-02-01 21:11:13

Facebook存儲數據中心

2015-02-09 10:14:33

2021-04-02 11:09:35

MobiKwik 移動支付數據泄露

2010-05-04 22:32:37

手機木馬網絡安全360手機衛士

2021-04-15 07:53:15

ParkMobile數據泄露網絡犯罪
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩中文一区 | 日韩成人在线网站 | 亚洲欧美在线观看 | 特黄色一级毛片 | 免费在线观看91 | 国产福利在线视频 | 9191av | 久久久久久久一区 | 麻豆视频国产在线观看 | 91麻豆精品国产91久久久更新资源速度超快 | 狠狠干美女| 亚洲成人国产 | 国产一区视频在线 | 日本精品一区二区三区在线观看视频 | 一区二区视频在线 | 国产在线一区观看 | 国产免费让你躁在线视频 | 成人小视频在线 | 91一区二区 | 亚洲在线一区 | 国产精品日日摸夜夜添夜夜av | 日韩精品免费视频 | 亚洲精品一区二区在线观看 | 日韩资源 | 精品国产黄色片 | 日本不卡一区 | 91国语清晰打电话对白 | 一区二区欧美在线 | 国产精品久久久久久久久久久久 | 日韩精品中文字幕一区二区三区 | 国产免费看 | 天天躁日日躁性色aⅴ电影 免费在线观看成年人视频 国产欧美精品 | 99久久婷婷国产综合精品电影 | 国产在线观看网站 | 久久性av| 最新国产精品精品视频 | 天天躁人人躁人人躁狂躁 | 国产在线精品一区二区 | 国产精品精品久久久 | 青青草视频网站 | 先锋影音资源网站 |