「Scaling things that don't scale」- Airbnb 由1擴展到10的旅程

Airbnb 在 VelocityConf NY 2014 中講到一個很有趣的題目,叫做:「Scaling Things That Don't Scale」

強行中譯的話,好像會變得很別扭,大意就是:擴展那些不能擴展的東西(?)

但如果要非得要翻譯出來的話,我會這樣講:「由零到一之後,怎樣由一到十」

YC 的 Startup 心法提過,做Startup就是首先要:「Do things that don't scale」。一開始千萬不要把心機放到 Scaling 之上,而是集中火力盡快把產品做出來。

一旦業務成功而要面對擴充需求,當然是一件值得慶賀的事,但代表接下來經營者要準備迎接更多複雜的問題。

然而其實這已經是一個Happy problem,因為當要考慮到「擴展」時,就代表產品在市場上已經找到合適的落腳點。就是我們常說的由「0」來到了「1」

MVP 一開始就不是為「Scale」(Often MVP doesn't scale)

一件MVP 本身就是為了趕上時機而建造的。做MVP的過程中著重的是能最快捷起好的架構、最簡單的解決方式。所以大多數時間,都是去考慮如何減功能、用最低技術資源去實行。

這些方向往往跟完善的「自動化」完全拉不上關係;反而通常是用無盡的勞力去補完。就算生意多麼成功,這類方案的重點是:很快、很有效,但是沒有擴展性。(It doesn't scale.)

Airbnb 剛成立時,他們需要大量的旅館照片和資料,令到網頁有一定數量的旅館存庫。

那時候,他們選擇了用最耗人手(但最有效)的方式-派人逐一去城市裏數百家旅館探訪和拍照。這「貼地」的做法,讓他們極速獲得第一手最齊全的資料,為開始業務做了最佳的準備。

當然,當業務成功後,Airbnb 開始擴展到世界各地的不同城市,後期已不能夠單靠無限添加人手,去應付搜集全球其他城市旅館資料的工作量。這就是「Something that doesn't scale」的好例子。

圖:第一個版本的Airbnb
圖:第一個版本的Airbnb

他們還分享了一則趣事:剛開始時,方便起見,網站上的熱線電話其實是創辦人Brian的手提電話號碼。直至現在,Brian 還是會在晚上間中接到幾個查詢電話。

某天,當簡單的事情開始變得不簡單

到甚麼時候,才會發現之前一直流水行雲的 「don't scale」 方針開始出現問題呢?

或者,可以從一句資料庫 Query 說起。

某天,Airbnb的 Founder 希望總結一下所有預約所涉及的金額,就這樣向資料庫發出了查詢 :

select SUM(amount) from reservation

然後很「合理」地,伺服器當了。

原來,這段日子下來已經積下了過千萬個預約,要計算一次 sum 已經變成要在資料庫動輒翻出過千萬個紀錄。做個看似簡單的指令,結果反映出,同一件事情在不同階段會有不一樣的複雜性。

就像鯉魚王成長成鯉魚龍變得不好應付了。(好啦,他們本來沒這樣比喻。)

To rewrite or not to rewrite? 砍還是不砍掉?

當規模變大了,由要處理1000 人的負荷要跳到1000萬人的層次,就會不期然開始考慮重煉的問題。
重寫還是不重寫?這跟「分手還是不分手」一樣是個萬分艱難的決定。

首先我們來看看變大了的是甚麼。

首先,是幾何級數變大的流量,伺服器每天要處理的 request 變得更多,也代表著處理能力要大大提升。

然後是資料量:顧客的資料、預約的內容、旅館的照片,所用到的容量都會隨著程式的使用量倍增。

接著你僱用更多的工程師、建立更複雜的架構。

再由更多的工程師欠下更多的 Technical Debt。

直至有一天認真看一看當天的那個 Code base。

簡直是「士別三日,刮目相看」,然後你晴天霹靂,淚流滿面。

可是,重頭寫一個 Airbnb 聽起來好像已經不大可能吧。或許這樣分析一下。

隨著規模變得更大,產品不能承受的就變得更多:

  • 面對激烈的競爭,已經沒有三個月時間去重寫產品本身的元件。
  • 世界上每一秒也有旅客在旅館進行登記,你不能承擔30分鐘 Down time 帶來的損失(可能是妨礙幾萬名旅客的車程)。
  • 不能只靠「添加公程師」去解決問題-十個孕婦也不能在一個月內產出一胎。
  • 當代碼數量積累更多,欠下的「Technical Debt」也隨著增加。

所以,要解決核心的問題,就要從「核心的內圍」著手。

Focus → Measure → Invest

從「1」到「10」,也許比「0」到「1」安心,但也是不簡單的任務,Airbnb 歸納出來一套解決流程。

就是三步曲「專注、測量、投資」

三步曲的部分當中,也有不少有趣的實戰例子。
但這篇到這裡已經頗長,請容我下集再續XD


當然,其實你可以自己去看原本的講座,再回來跟我分享:

comments powered by Disqus