深夜美女视频一区二区_91sao在线看片水片_亚洲日韩国语_精品中文字幕久久边人妻_高潮喷水香蕉视频色_白洁国产剧情Av手机在线_国产精品情侣呻吟_天空影院播放免费完整版视频_少妇高潮惨叫喷水在线观看_公交车大龟廷进我身体里

Hi,您好,歡迎來(lái)到西安盛圖軟件科技有限公司!

耗時(shí)一年用戶從 0 增長(zhǎng)至 1400 萬(wàn),背后僅三名工程師,這家社交巨頭背后的技術(shù)棧是如何搭建的?

發(fā)布時(shí)間:2023-09-21 15:29:06

值得注意的是,這個(gè)曾經(jīng)估值近千億美元的 Instagram 在技術(shù)運(yùn)作上一直遵循著三個(gè)指導(dǎo)原則:讓事情變得更簡(jiǎn)單、絕不重新發(fā)明輪子、盡可能使用經(jīng)過(guò)驗(yàn)證的可靠技術(shù)。

 

在當(dāng)今這個(gè)各領(lǐng)域巨頭們都在過(guò)度堆砌豪華技術(shù)棧以求建立技術(shù)霸權(quán)的時(shí)代,Instagram 的成功也不禁讓人思考,是否最終 99%的公司都可以使用由三、四個(gè)人管理的經(jīng)典 LAMPish 堆棧?

Instagram 發(fā)展史

2009 年,27 歲剛剛從斯坦福大學(xué)畢業(yè)的 Kevin Systrom 任職于 Nextstop——一家旅行推薦初創(chuàng)公司。Systrom 之前曾在谷歌擔(dān)任過(guò)企業(yè)開(kāi)發(fā)助理,并在 Odeo 公司實(shí)習(xí)(該公司后來(lái)發(fā)展成了 Twitter,也就是如今的 X)。

 

雖然 Systrom 并沒(méi)有接受過(guò)計(jì)算機(jī)科學(xué)方面的正式訓(xùn)練,但還是憑借著才智和毅力在 Nextstop 任職時(shí)利用業(yè)余時(shí)間學(xué)會(huì)了編程。他最終開(kāi)發(fā)出一款名叫 Burbn 的 Web 應(yīng)用原型,其設(shè)計(jì)靈感來(lái)自他個(gè)人對(duì)威士忌和波本酒的深深喜愛(ài)。Burbn 應(yīng)用允許用戶簽到、發(fā)布邀約和分享照片。盡管當(dāng)時(shí)基于位置的簽到類應(yīng)用非常流行,但 Burbn 的照片共享功能仍在同類市場(chǎng)中顯得獨(dú)樹(shù)一幟。

 

2010 年 3 月,關(guān)鍵的轉(zhuǎn)折點(diǎn)不期而至。當(dāng)時(shí) Systrom 參加了硅谷初創(chuàng)公司 Hunch 的一場(chǎng)聚會(huì),并在會(huì)上遇見(jiàn)了來(lái)自 Baseline Ventures 和 Andreessen Horowitz 的兩位風(fēng)險(xiǎn)投資家。在向他們展示了 Burbn 應(yīng)用的原型之后,大家決定有機(jī)會(huì)喝杯咖啡再做進(jìn)一步討論。首次會(huì)面之后,Systrom 決定辭掉工作、專心打磨 Burbn。短短兩周之內(nèi),他就從 Baseline Ventures 和 Andreessen Horowitz 籌集到 50 萬(wàn)美元的種子資金,用以進(jìn)一步拓展自己的創(chuàng)業(yè)公司。

 

有了種子資金的加持,Systrom 得以組建一支維系業(yè)務(wù)運(yùn)轉(zhuǎn)的團(tuán)隊(duì):第一位加入的成員是 25 歲的 Mike Krieger。Krieger 同樣來(lái)自斯坦福大學(xué),此前曾在社交媒體平臺(tái) Meebo 擔(dān)任工程師兼用戶體驗(yàn)設(shè)計(jì)師,而且兩人在校期間就認(rèn)識(shí)對(duì)方。

 

在 Krieger 加入之后,二人重新評(píng)估了 Burbn 的業(yè)務(wù)空間,并決定將注意力集中在單一核心之上:分享由移動(dòng)設(shè)備拍攝的照片。他們仔細(xì)研究了當(dāng)時(shí)攝影領(lǐng)域的其他領(lǐng)先應(yīng)用。在他們二人看來(lái),Hipstamatic 應(yīng)用的表現(xiàn)最出色,當(dāng)時(shí)也頗受市場(chǎng)歡迎。其最大亮點(diǎn)就是提供豐富的功能選項(xiàng),比如照片濾鏡。然而,由于該軟件缺乏社交媒體分享功能,Systrom 和 Krieger 從 Hipstamatic 和 Facebook 等社交平臺(tái)的夾縫當(dāng)中看到了巨大潛力。

 

于是他們退后一步,將 Burbn 精簡(jiǎn)成了照片加評(píng)論加“點(diǎn)贊”的功能綜合體。以此為基礎(chǔ),他們將應(yīng)用重新命名為 Instagram,結(jié)合的是 Instant(即時(shí))與 telegram(電報(bào))兩個(gè)單詞。他們還專注于改善照片共享體驗(yàn),想要把 Instagram 打造成一款極簡(jiǎn)化、盡可能減少用戶操作需求的產(chǎn)品。經(jīng)過(guò)八周的應(yīng)用調(diào)整之后,他們帶著 beta 版本給朋友們體驗(yàn),嘗試進(jìn)行初步性能評(píng)估。在解決了軟件中的一些錯(cuò)誤之后,Instagram 首度與全世界用戶見(jiàn)面。

 

2010 年 10 月 6 日 Instagram 的 iOS 版本正式亮相,并在一天之內(nèi)就吸引到 2.5 萬(wàn)名用戶。在第一周結(jié)束時(shí),Instagram 的下載量已達(dá) 10 萬(wàn)次。到 12 月中旬,其用戶數(shù)量達(dá)到 100 萬(wàn)。必須承認(rèn),Instagram 的成功有著很強(qiáng)的運(yùn)氣因素,因?yàn)榫驮趲讉€(gè)月前(2010 年 6 月)搭載更強(qiáng)攝像頭的 iPhone 4 剛剛驚艷出爐。

 

隨著 Instagram 用戶基礎(chǔ)的迅速擴(kuò)張,更多投資者對(duì)這家年輕的公司表現(xiàn)出興趣。2011 年 2 月,Instagram 在 A 輪融資中籌得 700 萬(wàn)美元。作為其投資方之一,Benchmark Capital 為 Instagram 開(kāi)出了 2500 萬(wàn)美元的市場(chǎng)估值。除了機(jī)構(gòu)投資者之外,Instagram 還吸引到社交媒體技術(shù)行業(yè)眾多領(lǐng)先廠商的關(guān)注,其中就包括 Twitter 和 Facebook。

 

盡管新一輪融資讓 Systrom 和 Krieger 擁有了擴(kuò)大人員規(guī)模的底氣,但兩位創(chuàng)始人還是決定控制自身體量,將班底繼續(xù)保持在十幾人的水平。

 

Systrom 在 Odeo 實(shí)習(xí)時(shí)結(jié)識(shí)了 Twitter 聯(lián)合創(chuàng)始人 Jack Dorsey。Dorsey 也對(duì) Instagram 表現(xiàn)出深厚的興趣,并提出出手收購(gòu)的想法。據(jù)報(bào)道,Twitter 最終提出了價(jià)值約 5 億平均的股票收購(gòu)方案,但被 Systrom 予以回絕。

用戶從 0 增長(zhǎng)到 1400 萬(wàn),背后僅靠 3 名工程師支撐

 

從 2010 年 10 月到 2011 年 12 月,Instagram 在短短一年多時(shí)間里將用戶數(shù)量從 0 擴(kuò)展至 1400 萬(wàn)。而這一切的實(shí)現(xiàn),背后僅有 3 名工程師的參與。

 

這個(gè)驚人目標(biāo)源自三大基本原則,外加穩(wěn)定可靠的技術(shù)棧,以下是 Instagram 的指導(dǎo)原則與技術(shù)棧構(gòu)成分析。

 

一直以來(lái),Instagram 的技術(shù)運(yùn)作都遵循著三個(gè)指導(dǎo)原則:

簡(jiǎn)要介紹技術(shù)棧

Instagram 的早期基礎(chǔ)設(shè)施運(yùn)行在 AWS 之上,使用 EC2 配合 Ubuntu Linux,EC2 是亞馬遜提供的服務(wù),允許開(kāi)發(fā)人員租用虛擬計(jì)算機(jī)承載自家工作負(fù)載。

 

為了保證一切盡可能簡(jiǎn)單,這里用純粹的工程師思維展開(kāi)討論,延著用戶會(huì)話的生命周期捋順整個(gè)流程:

前端

會(huì)話:用戶打開(kāi) Instagram 應(yīng)用。

 

Instagram 最初于 2010 年發(fā)布 iOS 版應(yīng)用。由于 Swift 語(yǔ)言要到 2014 年才亮相,所以合理的猜測(cè)是 Instagram 是使用 Objective-C 和 UIKit 等方案組合編寫而成。


負(fù)載均衡

會(huì)話:在應(yīng)用開(kāi)啟之后,向后端發(fā)送一條獲取主提要圖像的請(qǐng)求,此請(qǐng)求隨后抵達(dá) Instagram 負(fù)載均衡器。

 

Instagram 采用亞馬遜的 Elastic Load Balancer 服務(wù)。工程師們租用了 3 個(gè) NGINX 實(shí)例,并根據(jù)其運(yùn)行情況來(lái)決定何時(shí)切入和切出。

 

每條請(qǐng)求會(huì)首先抵達(dá)負(fù)載均衡器,而后再被路由至實(shí)際應(yīng)用服務(wù)器。


后端

會(huì)話:負(fù)載均衡器將請(qǐng)求發(fā)送至應(yīng)用服務(wù)器,而應(yīng)用服務(wù)器負(fù)責(zé)保存正確處理請(qǐng)求所必需的邏輯。

 

Instagram 的應(yīng)用服務(wù)器使用 Django、由 Python 編寫,并選擇 Gunicorn 作為其 WSGI 服務(wù)器。

這里解釋一下,WSGI(Web 服務(wù)器網(wǎng)關(guān)接口)負(fù)責(zé)將請(qǐng)求從 Web 服務(wù)器轉(zhuǎn)發(fā)至 Web 應(yīng)用程序。

Instagram 使用 Fabric 同時(shí)在多個(gè)實(shí)例上并行運(yùn)行命令,從而在幾秒鐘之內(nèi)完成代碼部署。

 

這一切共同運(yùn)行在 25 臺(tái)以上的亞馬遜 High-CPU Extra-Large 超大設(shè)備之上。由于服務(wù)器本身保持無(wú)狀態(tài),所以在需要處理更多請(qǐng)求時(shí),可以靈活添加更多計(jì)算資源。

 

通用數(shù)據(jù)存儲(chǔ)

會(huì)話:應(yīng)用服務(wù)器須識(shí)別出請(qǐng)求所需要的主提要數(shù)據(jù),這里猜測(cè)它需要完成以下流程:

  1. 獲取相關(guān)圖像的最新 ID;

  2. 獲取與這些 ID 相匹配的實(shí)際圖像;

  3. 為這些圖像獲取用戶數(shù)據(jù)。

數(shù)據(jù)庫(kù):Postgres

會(huì)話:應(yīng)用服務(wù)器從 Postgres 處獲取相關(guān)圖像的最新 ID。

 

應(yīng)用服務(wù)器將從 PostgreSQL 處提取數(shù)據(jù),PostgreSQL 存儲(chǔ)有 Instagram 的大部分?jǐn)?shù)據(jù),包括用戶和照片元數(shù)據(jù)。

 

Postgres 和 Django 之間的連接,由 Pgbouncer 負(fù)責(zé)匯總成池。

 

由于收取到的數(shù)據(jù)量很大(每秒超過(guò) 25 張圖像和 90 個(gè)贊),因此 Instagram 需要對(duì)數(shù)據(jù)進(jìn)行分片。Instagram 依靠代碼將數(shù)千個(gè)“邏輯”分片映射至數(shù)個(gè)物理分片。

 

Instagram 還面臨著另一個(gè)有趣挑戰(zhàn),即如何生成可以按時(shí)間排序的 ID。他們生成的可按時(shí)間排序 ID 如下所示:

借助 Postgres 中的可按時(shí)間排序 ID,應(yīng)用服務(wù)器能夠成功接收到相關(guān)圖像的最新 ID。

圖像存儲(chǔ):S3 與 CloudFront

會(huì)話:之后,應(yīng)用服務(wù)器會(huì)獲取與各圖像 ID 相匹配的實(shí)際圖像,并通過(guò)快速 CDN 鏈接為用戶提供順暢的加載體驗(yàn)。

 

Amazon S3 中存儲(chǔ)有數(shù)以 TB 的圖像。這些圖像可通過(guò) Amazon CloudFront 被快速交付給用戶。

緩存:Redis 與 Memcached

會(huì)話:為了從 Postgres 處獲取用戶數(shù)據(jù),應(yīng)用服務(wù)器(Django)使用 Redis 將圖像 ID 與用戶 ID 進(jìn)行匹配。

 

在 Redis 的支持下,Instagram 能夠?yàn)榧s 3 億張圖像存儲(chǔ)建立起指向創(chuàng)建者用戶 ID 的映射,借此引導(dǎo)在獲取主提要、活動(dòng)提要等圖像時(shí)具體應(yīng)查詢哪個(gè)分片。所有 Redis 都存儲(chǔ)在內(nèi)存內(nèi)以降低延遲,并將數(shù)據(jù)分片至多臺(tái)機(jī)器之上。

 

通過(guò)一系列巧妙的哈希處理,Instagram 得以在不到 5 GB 空間內(nèi)存儲(chǔ)這 3 億個(gè)鍵映射。

 

由此建立的圖像 ID 與用戶 ID 的鍵值映射,用于指示具體應(yīng)查詢哪個(gè) Postgres 分片。

 

會(huì)話:借助 Memcached 的高效緩存(最近響應(yīng)均被納入緩存),從 Postgres 處獲取用戶數(shù)據(jù)的速度很快。

 

對(duì)于常規(guī)緩存,Instagram 使用 Memcached。當(dāng)時(shí) Instagram 設(shè)置了 6 個(gè) Memcached 實(shí)例,可以在 Django 上以相對(duì)簡(jiǎn)單的方式進(jìn)行分層。

 

有趣的事實(shí):兩年之后的 2013 年,F(xiàn)acebook 發(fā)布了一篇具有里程碑意義的論文,介紹了他們?nèi)绾螖U(kuò)展 Memcached 以順利實(shí)現(xiàn)每秒數(shù)十億條請(qǐng)求的處理能力。

 

會(huì)話:用戶現(xiàn)在可以看到主頁(yè)內(nèi)容,其中展示的就是其所關(guān)注用戶的最新圖像。

 

主副本設(shè)置

Postgres 和 Redis 均在主副本設(shè)置中運(yùn)行,并使用 Amazon EBS(Elasti

上一篇:OpenAI 放大招“對(duì)打”谷歌 Gemini:全力籌備多模態(tài)大模型,并發(fā)布新指令語(yǔ)言模型
下一篇:最新資訊取代 Vue 和 React?25 年碼齡程序員不滿 Web 開(kāi)發(fā)現(xiàn)狀創(chuàng)建新框架 Nue JS,能減少 90% 代碼量!

歡迎登錄盛圖科技

歡迎注冊(cè)盛圖科技

已有賬號(hào),立即登錄