【編者按】本文來自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:發布安卓版Instagram
歸檔:最眾望所歸的發布
在Instagram發布的頭幾年里,Kevin和我每一次在臺上都會被問到同一個問題,“安卓版的應用到底什么時候才會出來?!”
我們從iOS版起家——僅僅是因為我們想要在我們的產品上做到快速迭代——畢竟我們只有兩個工程師。當跨入2012年后,是時候擴展到其他不同的平臺了。我們的安卓版App也是典型的Instagram風格,以Philip領銜的三位工程師在三個月內做出來了,其中兩位的安卓開發還是現學現賣的。Philip是在我們開發另一款軟件Gowalla的安卓版App時加入的,直到今天他依然領導著Instagram的移動化。
因為我們想要在盡可能多的安卓手機上測試我們的App,甚至包括華為的一款冷門手機“M865 Ascend II 2 Touch”,所以有時候我化身為“eBay皇冠買家”。大多數時候,新手機的屁股還沒在辦公桌上坐熱,我們就立即拆掉快遞盒裝上我們的半成品App試運行,然后為App的運行效果贊不絕口。安卓設備的產品線之廣以至于我們面臨了一些挑戰——特別是當我們開發Instagram的視頻功能時——但最終安卓版App做到了穩定運行在如此之多的手機上而不怎么需要針對某些機型做特殊修改,不得不說太給力了。
安卓版上線剛12個小時,用戶量就突破了100萬——反響之熱切真是太不可思議了。也就在那個時候,我寫了幾篇關于系統底層架構設計的文章。斗轉星移,Instagram的安卓版使用起來更像是原生軟件了,如今它也成為了流暢度、評分最高的安卓應用之一。
干貨總結:從單一平臺上起步允許我們沉下心來快速迭代,并且沒有兼容性的負擔(我們在Instagram內部經常說“做事要少而精”)。當擴展到多個平臺的時候,我們成立了一只全新的、以擁有深厚安卓開發功力的天才工程師為首的小隊伍。
斗轉參橫,羽翼漸豐的安卓開發團隊將讓我們的應用更接近原生。
里程碑 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的回答。