2010年,在我們發(fā)布Instagram第一個(gè)版本的前一晚,我與聯(lián)合創(chuàng)始人Kevin打賭第一天大概會(huì)有多少人下載這款app。Kevin猜有2500人,我當(dāng)時(shí)特別樂觀,賭了把大的,押25000人。第二天,我簡(jiǎn)直不敢相信我的猜測(cè)分毫不差。
今天,在Instagram的五周歲之際,我們擁有來自世界各地的4億用戶,他們每天上傳8000萬份相片和視頻。回望過去,我們?cè)诔醮a(chǎn)品上就做到了在簡(jiǎn)潔和精巧中取得恰到好處的平衡,同時(shí)就在去年,我們回爐重造了「搜索&發(fā)現(xiàn)」(Search & Explore)功能,發(fā)布了全新的私密分享功能「Instagram Direct」,如「Layout」這樣的創(chuàng)意拼圖工具也應(yīng)運(yùn)而生。
過去5年,我們的團(tuán)隊(duì)一直在(謝天謝地)成長(zhǎng)和進(jìn)步,我們堅(jiān)持恪守我們的信條:簡(jiǎn)單的事情先做,它也是下一個(gè)五年計(jì)劃的核心。在這里我將回顧從搭建Instagram起過去的五年時(shí)間里,其中一些最重大的里程碑事件——有好的,有壞的,還有出乎意料的。我希望這里的一些經(jīng)驗(yàn)教訓(xùn)能幫你們打造自己的團(tuán)隊(duì)和公司,使其茁壯成長(zhǎng)。
里程碑 #1:頭三個(gè)月解鎖1百萬用戶成就 歸檔:最大的挑戰(zhàn)上線第一個(gè)月的慘狀不忍直視——經(jīng)常凌晨3點(diǎn)睡眼惺忪打開屏幕,上面的服務(wù)器警信息接踵而至。自第一天爆炸性地吸引了25000名用戶后,數(shù)量就持續(xù)高速增長(zhǎng)直至解鎖1百萬成就。
請(qǐng)腦補(bǔ)一下這個(gè)場(chǎng)面:爭(zhēng)先恐后的人們迫切想要使用你的產(chǎn)品!世上沒有任何號(hào)角能比這更能激勵(lì)士氣的了,所以我們開啟996模式以確保我們可以承受住與日俱增的訪問請(qǐng)求。我們起步的時(shí)候只用了一臺(tái)位于洛杉磯的服務(wù)器,其性能還不如一臺(tái)Macbook Pro。當(dāng)我打電話給主機(jī)服務(wù)商,要求根據(jù)我們第一天的增長(zhǎng)情況再添置一臺(tái)服務(wù)器時(shí),他們回復(fù)說需要4天的周轉(zhuǎn)期,快馬加鞭的話也得要48個(gè)小時(shí)。鑒于我們的增長(zhǎng)態(tài)勢(shì)看起來深不可測(cè),我們決定轉(zhuǎn)移到亞馬遜的AWS云服務(wù)器上面去。
由于我們兩個(gè)都缺乏系統(tǒng)底層架構(gòu)的經(jīng)驗(yàn),我們只能盡所能地狼吞虎咽相關(guān)的知識(shí)。在QCon和Velocity的上面有非常棒的會(huì)議視頻,還有來自 Facebook, Netflix, Twitter以及其他公司的文章。共享技術(shù)知識(shí)的開源文化是我們這一行最棒的事情之一了,它也是我們更新維護(hù)日志的主要推動(dòng)力。
干貨總結(jié):我們的信條,“簡(jiǎn)單的事情先做”脫胎于最初的歲月。因?yàn)橹挥形覀儍蓚€(gè)人并肩作戰(zhàn),所以每當(dāng)我們面臨新的挑戰(zhàn)時(shí),我們不得不采用最快的、最簡(jiǎn)單的解決辦法。假如我們以完美的態(tài)度要求每一件事情,那我們很有可能在無所作為中滅亡。通過找出最先需要解決的問題,以及選擇最簡(jiǎn)單的解決辦法,我們才有能力支撐起我們的指數(shù)型增長(zhǎng)。
里程碑 #2:發(fā)布安卓版Instagram 歸檔:最眾望所歸的發(fā)布在Instagram發(fā)布的頭幾年里,Kevin和我每一次在臺(tái)上都會(huì)被問到同一個(gè)問題,“安卓版的應(yīng)用到底什么時(shí)候才會(huì)出來?!”
我們從iOS版起家——僅僅是因?yàn)槲覀兿胍谖覀兊漠a(chǎn)品上做到快速迭代——畢竟我們只有兩個(gè)工程師。當(dāng)跨入2012年后,是時(shí)候擴(kuò)展到其他不同的平臺(tái)了。我們的安卓版app也是典型的Instagram風(fēng)格,以Philip領(lǐng)銜的三位工程師在三個(gè)月內(nèi)做出來了,其中兩位的安卓開發(fā)還是現(xiàn)學(xué)現(xiàn)賣的。Philip是在我們開發(fā)另一款軟件Gowalla的安卓版app時(shí)加入的,直到今天他依然領(lǐng)導(dǎo)著Instagram的移動(dòng)化。
因?yàn)槲覀兿胍诒M可能多的安卓手機(jī)上測(cè)試我們的app,甚至包括華為的一款冷門手機(jī)“M865 Ascend II 2 Touch”,所以有時(shí)候我化身為“eBay皇冠買家”。大多數(shù)時(shí)候,新手機(jī)的屁股還沒在辦公桌上坐熱,我們就立即拆掉快遞盒裝上我們的半成品app試運(yùn)行,然后為app的運(yùn)行效果贊不絕口。安卓設(shè)備的產(chǎn)品線之廣以至于我們面臨了一些挑戰(zhàn)——特別是當(dāng)我們開發(fā)Instagram的視頻功能時(shí)——但最終安卓版app做到了穩(wěn)定運(yùn)行在如此之多的手機(jī)上而不怎么需要針對(duì)某些機(jī)型做特殊修改,不得不說太給力了。
安卓版上線剛12個(gè)小時(shí),用戶量就突破了100萬——反響之熱切真是太不可思議了。也就在那個(gè)時(shí)候,我寫了幾篇關(guān)于系統(tǒng)底層架構(gòu)設(shè)計(jì)的文章。斗轉(zhuǎn)星移,Instagram的安卓版使用起來更像是原生軟件了,如今它也成為了流暢度、評(píng)分最高的安卓應(yīng)用之一。
干貨總結(jié):從單一平臺(tái)上起步允許我們沉下心來快速迭代,并且沒有兼容性的負(fù)擔(dān)(我們?cè)贗nstagram內(nèi)部經(jīng)常說“做事要少而精”)。當(dāng)擴(kuò)展到多個(gè)平臺(tái)的時(shí)候,我們成立了一只全新的、以擁有深厚安卓開發(fā)功力的天才工程師為首的小隊(duì)伍。斗轉(zhuǎn)參橫,羽翼漸豐的安卓開發(fā)團(tuán)隊(duì)將讓我們的應(yīng)用更接近原生。
里程碑 #3 2012維吉尼亞風(fēng)暴 歸檔:最嚴(yán)重的突發(fā)狀況2012年中的某個(gè)周末,我正在波蘭渡假,這時(shí)手機(jī)嗡嗡響起來:“http://Instagram.com宕機(jī)了。”我火速上網(wǎng)做了測(cè)試,發(fā)現(xiàn)不只是Instagram——Netflix以及其他網(wǎng)站都紛紛躺槍了。我趕回酒店打開筆記本,AWS云服務(wù)器狀態(tài)頁上一條可怕的消息赫然在目:“美國(guó)東部的電力供應(yīng)中斷了”。一場(chǎng)巨大的風(fēng)暴從維吉尼亞州呼嘯而過,并且卷走了我們大半服務(wù)器的電力。接下來的36個(gè)小時(shí)儼然成為一場(chǎng)重建幾乎整個(gè)底層系統(tǒng)的攻堅(jiān)戰(zhàn)。烏云背后唯一的幸福線就是這催生出一張病毒式傳播的圖片:
在那個(gè)時(shí)候,我們整個(gè)后端技術(shù)團(tuán)隊(duì)由我自己,我們第一個(gè)工程師Shayne以及Rick組成,Rick加入Instagram還不到一個(gè)月的時(shí)間。所幸沒有任何用戶數(shù)據(jù)丟失,但是這次意外暴露出我們?cè)谙到y(tǒng)底層架構(gòu)自動(dòng)化上還有許多坑亟待填補(bǔ)。
這次意外給我們臉上來了一記響亮的耳刮子,我們需要找到一種可以重復(fù)使用的服務(wù)器配置方法。次年,我們把不穩(wěn)定的shell腳本遷移到了全Chef系統(tǒng),這也大幅降低了新團(tuán)隊(duì)成員上手底層架構(gòu)的門檻。
與此同時(shí),我們不再依賴亞馬遜的持久性數(shù)據(jù)塊級(jí)存儲(chǔ)卷方案(Elastic Block Storage),取而代之的是WAL-E以及Postgres家的WAL shipping replication方案。我們也建造了一個(gè)可靠的交叉數(shù)據(jù)中心,這讓Instagram的數(shù)據(jù)得以分布式地存儲(chǔ)到不同的地理位置。
干貨總結(jié):架設(shè)自動(dòng)化腳本的底層架構(gòu)需要大量的前期工作,不過這可是一本萬利,新工程師將能很快融入項(xiàng)目本身,另外這樣做也能在突發(fā)狀況中立功。另外,我很高興我們雇傭了點(diǎn)對(duì)技能點(diǎn)的工程師——當(dāng)我們面前擺著這樣一個(gè)慘不忍睹的爛攤子時(shí),Shayne和Rick都擼起他們的袖子立馬開始收拾,遇到這種意外,堪比《火星救援》。
里程碑 #4:服務(wù)器遷移——Instagration 歸檔:最壯志凌云的工程2010年10月5日:0用戶
2010年10月6日:25000用戶
2010年11月:1百萬用戶
2012:3千萬用戶
2013:2億用戶
在2013年的時(shí)候我們擁有2億活躍用戶,超過200億張相片存儲(chǔ)在服務(wù)器上。整個(gè)團(tuán)隊(duì)雖然在擴(kuò)張,但規(guī)模仍然較小,所有人對(duì)于Instagram社區(qū)的持續(xù)成長(zhǎng)感到欣喜萬分。
與此同時(shí),我們想要跟Facebook已有的后臺(tái)系統(tǒng)進(jìn)行整合——舉個(gè)例子,他們的Site Integrity系統(tǒng)對(duì)幫助我們抵抗垃圾郵件的侵?jǐn)_至關(guān)重要。但在亞馬遜AWS云服務(wù)器上做這些整合會(huì)非常困難,而我們拖得越久,那遷移越來越龐大的底層系統(tǒng)將日益艱巨。
我們遷移去Facebook的后臺(tái)系統(tǒng)是板上釘釘?shù)氖铝耍覀兿朐诓恢袛噙\(yùn)營(yíng)的情況下遷移數(shù)以百萬計(jì)的用戶和數(shù)以億計(jì)的相片。所以我們開始了Instagration工程,或者我更喜歡將其描述為為給一輛時(shí)度100邁的汽車改頭換面。一支由8個(gè)來自Instagram和Facebook的工程師組成的小隊(duì)先建起一個(gè)共有網(wǎng)絡(luò),然后使用自家建造的叫Neti的工具把Instagram從EC2遷移到亞馬遜的虛擬私有云 (Virtual Private Cloud)上。接下來遷移我們的系統(tǒng)和工具,其中包括使用一個(gè)“ig”的命令行工具,以此在新的FB數(shù)據(jù)中心搭建類似AWS的開發(fā)環(huán)境。最終我們花了最小的代價(jià)完成了這次大規(guī)模遷移。
干貨總結(jié):不要重復(fù)造輪子。通過遷移到Facebook的服務(wù)器,我們的后臺(tái)系統(tǒng)運(yùn)行得更快、更有效率,同時(shí)也能利用Facebook其他比如反垃圾郵件這樣的工具。利用Facebook的資源和經(jīng)驗(yàn),我們的尖刀排不需要擴(kuò)招變得臃腫,從而使行動(dòng)更風(fēng)馳電掣。
里程碑 #5:Instagram的「趨勢(shì)」 歸檔:下一個(gè)大賭注今年早些時(shí)候,我們對(duì)「搜索&發(fā)現(xiàn)」(Search & Explore)這個(gè)功能進(jìn)行了完善,使得人們?cè)贗nstagram上能更方便找到世界上每個(gè)角落發(fā)生的有趣事情。我們引進(jìn)了「熱門標(biāo)簽和地點(diǎn)」,并且搭建了用于甄別以及排序篩選的全新的機(jī)制,來給用戶推薦Instagram上的精華。
我們第一次對(duì)「趨勢(shì)」的嘗試始于2010年發(fā)布Instagram,當(dāng)時(shí)采用的是「流行」(Popular)頁面。整個(gè)算法十分簡(jiǎn)單:計(jì)算每張相片的點(diǎn)贊數(shù),每4小時(shí)清零。當(dāng)我們的社區(qū)規(guī)模還是比較小的時(shí)候,這個(gè)算法非常好用。但隨著時(shí)間推移,我們意識(shí)到我們需要一個(gè)更細(xì)致入微的算法。
鑒于社區(qū)規(guī)模之龐大,我們?cè)?014年致力于將「發(fā)現(xiàn)帖子」(Explore )的功能個(gè)性化,其所展示的是針對(duì)每一個(gè)用戶興趣胃口生成的、可無限下拉查看的相片和視頻。與非量身定做的「發(fā)現(xiàn)帖子」相比,我們的用戶在短短數(shù)個(gè)月內(nèi)與內(nèi)容互動(dòng)的比例提高了5倍。今年,我們帶著最初做「流行」(Popular)頁面的理念重新登場(chǎng),并將其升級(jí)為「趨勢(shì)」(Trending)——其能快速一覽整個(gè)Instagram上面的內(nèi)容。隨著排序和機(jī)器學(xué)習(xí)專家的陸續(xù)加入,我們?cè)絹碓接心芰趶?fù)雜算法生成出更加個(gè)性化的「趨勢(shì)」。
干貨總結(jié):簡(jiǎn)單的事情先做并不意味著你的解決辦法能一勞永逸。我們已經(jīng)學(xué)會(huì)對(duì)產(chǎn)品的演化進(jìn)步保持開放的心態(tài),有針對(duì)性地建立隊(duì)伍——比如我們的數(shù)據(jù)科學(xué)隊(duì)伍,以此應(yīng)對(duì)快速擴(kuò)張的Instagram社區(qū)。
過去的五年對(duì)于我們中間很多人來說是一次激動(dòng)人心的狂野之旅。在Instagram 5周歲生日之際停下來回顧反思是極好的。我很確信我們的社區(qū)會(huì)持續(xù)成長(zhǎng),我們的產(chǎn)品也將更上一層樓,在Medium上從來就不缺“回顧我過去十年”這樣的文章。讓我們?yōu)橄乱粋€(gè)五年干杯!