硝煙往事:締造Instagram的這五年

【編者按】本文來自Instagram創始人之一Mike Krieger的博客,由 @陳鈞桐 翻譯,由 @覃超 整理。Instagram是一家照片分享服務公司,在2012年9月被Facebook以7.15億美元收購。


2010年,在我們發佈Instagram第一個版本的前一晚,我與聯合創始人Kevin打賭第一天大概會有多少人下載這款App。Kevin猜有2500人,我當時特別樂觀,賭了把大的,押25000人。第二天,我簡直不敢相信我的猜測分毫不差。

今天,在Instagram的五週歲之際,我們擁有來自世界各地的4億用户,他們每天上傳8000萬份相片和視頻。回望過去,我們在初代產品上就做到了在簡潔和精巧中取得恰到好處的平衡。同時就在去年,我們回爐重造了「搜索&發現」(Search & Explore)功能,發佈了全新的私密分享功能「Instagram Direct」,如「Layout」這樣的創意拼圖工具也應運而生。

過去5年,我們的團隊一直在(謝天謝地)成長和進步,我們堅持恪守我們的信條:簡單的事情先做,它也是下一個五年計劃的核心。在這裏我將回顧從搭建Instagram起過去的五年時間裏,其中一些最重大的里程碑事件——有好的,有壞的,還有出乎意料的。我希望這裏的一些經驗教訓能幫你們打造自己的團隊和公司,使其茁壯成長。

里程碑 1:頭三個月解鎖100萬用户成就

歸檔:最大的挑戰

上線第一個月的慘狀不忍直視——經常凌晨3點睡眼惺忪打開屏幕,上面的服務器警信息接踵而至。自第一天爆炸性地吸引了25000名用户後,數量就持續高速增長直至解鎖100萬的成就。

請腦補一下這個場面:爭先恐後的人們迫切想要使用你的產品!世上沒有任何號角能比這更能激勵士氣的了,所以我們開啟996模式以確保我們可以承受住與日俱增的訪問請求。我們起步的時候只用了一台位於洛杉磯的服務器,其性能還不如一台Macbook Pro。當我打電話給主機服務商,要求根據我們第一天的增長情況再添置一台服務器時,他們回覆説需要4天的週轉期,快馬加鞭的話也得要48個小時。鑑於我們的增長態勢看起來深不可測,我們決定轉移到亞馬遜的AWS雲服務器上面去。

由於我們兩個都缺乏系統底層架構的經驗,我們只能盡所能地狼吞虎嚥相關的知識。在QCon和Velocity的上面有非常棒的會議視頻,還有來自 Facebook,Netflix,Twitter以及其他公司的文章。共享技術知識的開源文化是我們這一行最棒的事情之一,它也是我們更新維護日誌的主要推動力。

引用乾貨總結:我們的信條,“簡單的事情先做”脱胎於最初的歲月。

因為只有我們兩個人並肩作戰,所以每當我們面臨新的挑戰時,我們不得不採用最快的、最簡單的解決辦法。假如我們以完美的態度要求每一件事情,那我們很有可能在無所作為中滅亡。通過找出最先需要解決的問題,以及選擇最簡單的解決辦法,我們才有能力支撐起我們的指數型增長。

里程碑 2:發佈Android版Instagram

歸檔:最眾望所歸的發佈

在Instagram發佈的頭幾年裏,Kevin和我每一次在台上都會被問到同一個問題,“Android版的應用到底什麼時候才會出來?!”

我們從iOS版起家——僅僅是因為我們想要在我們的產品上做到快速迭代——畢竟我們只有兩個工程師。當跨入2012年後,是時候擴展到其他不同的平台了。我們的Android版App也是典型的Instagram風格,以Philip領銜的三位工程師在三個月內做出來了,其中兩位的Android開發還是現學現賣的。Philip是在我們開發另一款軟件Gowalla的Android版App時加入的,直到今天他依然領導着Instagram的移動化。

因為我們想要在儘可能多的Android手機上測試我們的App,甚至包括華為的一款冷門手機“M865 Ascend II 2 Touch”,所以有時候我化身為“eBay皇冠買家”。大多數時候,新手機的屁股還沒在辦公桌上坐熱,我們就立即拆掉快遞盒裝上我們的半成品App試運行,然後為App的運行效果讚不絕口。Android設備的產品線之廣以至於我們面臨了一些挑戰——特別是當我們開發Instagram的視頻功能時——但最終Android版App做到了穩定運行在如此之多的手機上而不怎麼需要針對某些機型做特殊修改,不得不説太給力了。


Android版上線剛12個小時,用户量就突破了100萬——反響之熱切真是太不可思議了。也就在那個時候,我寫了幾篇關於系統底層架構設計的文章。斗轉星移,Instagram的Android版使用起來更像是原生軟件了,如今它也成為了流暢度、評分最高的Android應用之一。

引用乾貨總結:從單一平台上起步允許我們沉下心來快速迭代,並且沒有兼容性的負擔(我們在Instagram內部經常説“做事要少而精”)。當擴展到多個平台的時候,我們成立了一隻全新的、以擁有深厚Android開發功力的天才工程師為首的小隊伍。

斗轉參橫,羽翼漸豐的Android開發團隊將讓我們的應用更接近原生。


里程碑 3: 2012維吉尼亞風暴

歸檔:最嚴重的突發狀況

2012年中的某個週末,我正在波蘭渡假,這時手機嗡嗡地響起來:“http://Instagram.com宕機了。”我火速上網做了測試,發現不只是Instagram——Netflix以及其他網站都紛紛躺槍了。我趕回酒店打開筆記本,AWS雲服務器狀態頁上一條可怕的消息赫然在目:“美國東部的電力供應中斷了”。一場巨大的風暴從維吉尼亞州呼嘯而過,並且捲走了我們大半服務器的電力。接下來的36個小時儼然成為一場重建幾乎整個底層系統的攻堅戰。烏雲背後唯一的幸福線就是這催生出一張病毒式傳播的圖片:


“INSTAGRAM打不開了!你午飯吃了啥?就在電話裏跟我描述下吧!”

在那個時候,我們整個後端技術團隊由我自己,我們第一個工程師Shayne以及Rick組成,Rick加入Instagram還不到一個月的時間。所幸沒有任何用户數據丟失,但是這次意外暴露出我們在系統底層架構自動化上還有許多坑亟待填補。

引用次意外給我們臉上來了一記響亮的耳刮子,我們需要找到一種可以重複使用的服務器配置方法。

次年,我們把不穩定的shell腳本遷移到了全Chef系統,這也大幅降低了新團隊成員上手底層架構的門檻。

與此同時,我們不再依賴亞馬遜的持久性數據塊級存儲卷方案(Elastic Block Storage),取而代之的是WAL-E以及Postgres家的WAL shipping replication方案。我們也建造了一個可靠的交叉數據中心,這讓Instagram的數據得以分佈式地存儲到不同的地理位置。

引用乾貨總結:架設自動化腳本的底層架構需要大量的前期工作,不過這可是一本萬利,新工程師將能很快融入項目本身,另外這樣做也能在突發狀況中立功。

另外,我很高興我們僱傭了點對技能點的工程師——當我們面前擺着這樣一個慘不忍睹的爛攤子時,Shayne和Rick都擼起他們的袖子立馬開始收拾,遇到這種意外,堪比《火星救援》。

里程碑 4:服務器遷移——Instagration

歸檔:最壯志凌雲的工程

引用2010年10月5日:0用户

2010年10月6日:25000用户

2010年11月:1百萬用户

2012:3千萬用户

2013:2億用户

在2013年的時候我們擁有2億活躍用户,超過200億張相片存儲在服務器上。整個團隊雖然在擴張,但規模仍然較小,所有人對於Instagram社區的持續成長感到欣喜萬分。

與此同時,我們想要跟Facebook已有的後台系統進行整合——舉個例子,他們的Site Integrity系統對幫助我們抵抗垃圾郵件的侵擾至關重要。但在亞馬遜AWS雲服務器上做這些整合會非常困難,而我們拖得越久,那遷移越來越龐大的底層系統將日益艱鉅。

我們遷移去Facebook的後台系統是板上釘釘的事了,但我們想在不中斷運營的情況下遷移數以百萬計的用户和數以億計的相片。所以我們開始了Instagration工程,或者我更喜歡將其描述為為給一輛時度100邁的汽車改頭換面。一支由8個來自Instagram和Facebook的工程師組成的小隊先建起一個共有網絡,然後使用自家建造的叫Neti的工具把Instagram從EC2遷移到亞馬遜的虛擬私有云 (Virtual Private Cloud)上。接下來遷移我們的系統和工具,其中包括使用一個“ig”的命令行工具,以此在新的FB數據中心搭建類似AWS的開發環境。最終我們花了最小的代價完成了這次大規模遷移。

引用乾貨總結:不要重複造輪子。通過遷移到Facebook的服務器,我們的後台系統運行得更快、更有效率,同時也能利用Facebook其他比如反垃圾郵件這樣的工具。

利用Facebook的資源和經驗,我們的尖刀排不需要擴招變得臃腫,從而使行動更風馳電掣。

里程碑 5:Instagram的「趨勢」

歸檔:下一個大賭注

今年早些時候,我們對「搜索&發現」(Search & Explore)這個功能進行了完善,使得人們在Instagram上能更方便找到世界上每個角落發生的有趣事情。我們引進了「熱門標籤和地點」,並且搭建了用於甄別以及排序篩選的全新的機制,來給用户推薦Instagram上的精華。

我們第一次對「趨勢」的嘗試始於2010年發佈Instagram,當時採用的是「流行」(Popular)頁面。整個算法十分簡單:計算每張相片的點贊數,每4小時清零。當我們的社區規模還是比較小的時候,這個算法非常好用。但隨着時間推移,我們意識到我們需要一個更細緻入微的算法。

鑑於社區規模之龐大,我們在2014年致力於將「發現帖子」(Explore )的功能個性化,其所展示的是針對每一個用户興趣胃口生成的、可無限下拉查看的相片和視頻。與非量身定做的「發現帖子」相比,我們的用户在短短數個月內與內容互動的比例提高了5倍。今年,我們帶着最初做「流行」(Popular)頁面的理念重新登場,並將其升級為「趨勢」(Trending)——其能快速一覽整個Instagram上面的內容。隨着排序和機器學習專家的陸續加入,我們越來越有能力基於複雜算法生成出更加個性化的「趨勢」。

引用乾貨總結:簡單的事情先做並不意味着你的解決辦法能一勞永逸。我們已經學會對產品的演化進步保持開放的心態,有針對性地建立隊伍——比如我們的數據科學隊伍,以此應對快速擴張的Instagram社區。

過去的五年對於我們中間很多人來説是一次激動人心的狂野之旅。在Instagram 5週歲生日之際停下來回顧反思是極好的。我很確信我們的社區會持續成長,我們的產品也將更上一層樓,在Medium上從來就不缺“回顧我過去十年”這樣的文章。讓我們為下一個五年乾杯!
擴展閲讀:Instagram是怎麼創立的?來自Instargram另一位創始人Kevin Systrom的回答。


資料來源:雷鋒網
作者/編輯:覃超

如果喜歡我們的文章,請即分享到︰