為了服務20億用戶的即時需求,Facebook做了什麼事讓自己跑得更快、更流暢?
03

為了服務20億用戶的即時需求,Facebook做了什麼事讓自己跑得更快、更流暢?

Facebook在用戶數高速成長之際,需要解決的問題之一便是速度。除了龐大的儲存空間及伺服器基礎建設,其強大的數據庫技術與暫存技術也讓用戶大幅提升載入與存取效率,讓「滑Facebook」這個動作流暢無比。

本文摘自:《成為臉書》,三采文化出版

有了這麼多硬體之後,還需要軟體才能讓這些機器活過來。

大部分的軟體程式都在Facebook的伺服器中,最重要、最鼎鼎大名的數據庫技術如MySQL與memcache,是Facebook自己建造的關聯及物件管理系統TAO(The Associations and Objects),用來追蹤數以兆計的資訊(包括人、東西與評論)與關係(例如張三是李四的朋友,李四剛剛在雪梨歌劇院打卡,張三在李四的Facebook上按讚),以應付每一秒鐘的數十億個請求;另外還有特別製作並貼切地稱為「稻草堆」(Haystack)的系統,要隨時要存取數百億筆照片和影片資料。

如果每一次都要到特定的數據中心找特定的伺服器,才能找出你想看的那張照片,就連稻草堆系統也招架不住,所以Facebook用了一種叫做「暫存」(caching)的軟體技術,把最常用的資訊存在網路各地:第一次要求存取照片時(比如朋友的度假照片),並不會暫存到各處,而是必須從Facebook數據中心的原始伺服器中取出,但是當它透過網際網路傳給你時,就會在那個數據中心的數位入口做第一次暫存;然後再透過全球數千個網際網路交流道,找到最靠近用戶網路位置的地方,存入周邊暫存器(edge cache),然後再送到你的手機或電腦。下一次你要看這張照片時,直接從你的設備上取用就可以。如果你有個朋友也和你在同一個網路空間中,也想看這張照片,系統就會去這個周邊暫存器取用,即使是在世界另外一個角落有人想看這張照片,也不需要回到最初的伺服器找照片,在數據中心的數位入口就有原始的暫存版了。

這種方式在Facebook運作地特別好,理由有二:

  1. 人們想從Facebook取得內容(讀取資料,暫存的功能可以應付)的比例,是想撰寫內容(寫入資料)的500倍(寫入資料就得一路回到Facebook數據中心,在只存一個真實資料的資料庫操作)。

  2. Facebook最受歡迎資料的取用規模遠比其他服務大得多:根據Facebook隨機抽取260萬張被瀏覽的照片研究,75%的用戶只想看其中3.73%的照片。

因此,暫存機制對Facebook很重要,也大幅改善了用戶取用照片的效率。下圖說明了,在每一層的暫存網路中,取用一張照片要經過的過程。

取用數據時,臉書各個暫存階段的負荷比例.JPG
圖/ 成為臉書

這說明了為什麼暫存機制如此重要:每次用戶提出取用數據的請求,原始伺服器只要處理9.9%,如果沒有暫存機制,伺服器的負擔就要放大十倍。

但這還不是伺服器與數據庫的全部工作。薛朗佛團隊的重要工作還包括打造與優化使用者經驗。這幾年最複雜的工作是要考慮數萬種型號的手機,其中大部分都是Google發展出來的安卓系統,還要考慮全球各地各式各樣的網路條件。

Facebook從2007年推出第一個經過優化的手機網站,2008年發布第一個蘋果iOS版本,2009年發布安卓版本,到2011年改寫蘋果手機版本,然後2022年又全面改寫,將服務效能提升了一倍,並大幅改善可靠性,直到2015年,針對新興市場又推出了全新的Facebook輕量版,這個團隊以100毫秒為單位,斤斤計較,從你打開程式、連接網路、取用數據、評估動態消息的新螢幕、或收發訊息時,都希望你有最好的體驗。這個團隊還創造了一個自動化系統,可以模擬各種不同的設備與網路環境,以自動測試各種變化。

這些軟硬體整合工作看起來好像都有點神祕難解,所以讓我們來看看幾個具體的專案,Facebook用戶應該會覺得比較熟悉。

Facebook數位工廠的偉大科技成就

兩年增加4億8千5百萬名用戶。記得在2009年底,Facebook一年增加的用戶就比先前五年半都多嗎?為了成就這個大業,Facebook成立了第一個量身打造的數據中心,還針對一種網路上最通用的開發語言推出自己的高效率優化系統(優化對象包括前端的PHP和虛擬機器),還把伺服器效能提升了六倍以上,等於是買了六倍以上的伺服器。Facebook不只大幅擴充基礎建設,同時也大幅提升效能。

這些努力的結果如何?這個團隊完美地服務了在2010年到2011年新增的4億8千5百萬名用戶,這是Facebook歷史上最瘋狂成長的二十四個月,前所未有,也是唯一僅見。

2005-2011年臉書每月新增用戶(百萬人).jpg
圖/ 成為臉書

你也許會想,Facebook大概會把所有的技術藏起來,就像可口可樂把配方藏得如此嚴密一般。但並非如此,Facebook把所有結果就捐出來了,例如將HipHop和HHVM分享到開放原始碼社群,而且在2011年4月宣布開放運算計畫(Open Compute Project,海林格的研發成果),這是硬體產業中第一次有人將所有的數據中心設計細節,從伺服器到儲存設計、網路架構,甚至到建築物的規劃,完全分享給產業中的其他人,包括蘋果公司、微軟及Google。

這些技術對Facebook很重要,但不如更大的技術社群也能擁有這些技術重要,因為更重要的是,進一步讓所有人的效能同時提升。

為了更大社群的利益把技術分享出來,Facebook因此加入了喬納斯.索爾克(Jonas Salk)及特斯拉的行列,索爾克並未申請小兒麻痹症疫苗的專利,而特斯拉也把所有的電動車專利和大家分享。

整合 :還記得Instagram在2013年進行了一次基礎建設大改造,當時已經有2億名用戶和超過200億張照片?其實我也不記得。那是因為,這個為期一年的計畫,是要將Instagram的基礎建設從亞馬遜雲端服務(AWS,這是一種賣給沒有自己團隊的公司的雲端服務)搬到Facebook的基礎建設上,整個轉移過程進行得非常順利。

Instagram
圖/ shutterstock

Instagram的基礎建設團隊和Facebook團隊聯手,完成這個非常複雜的轉換過程,並已經成為一個教科書案例。他們必須讓服務在上線的狀態下,完成兩個步驟的轉移工作,而且在過程中,還得增加規模、速度與可靠性的優勢,以避免Instagram在2012年時,因為東岸暴風雪導致網站停擺。到了2016年12月,用戶已經超過6億人,照片也高達4千萬張。

實況影片 :我們都知道Facebook創造了革命性的照片分享機制,以及背後需要的龐大儲存空間以及伺服器基礎建設。現在繼續想像一下,如果現在還要再加上每天超過800億次的影片瀏覽,並以人工智慧自動分析與壓縮上傳影片的不同部分,還要用能產出最高品質與最小尺寸的編碼技術,會對原有的基礎建設帶來多大的衝擊與複雜度?或者再想想,要如何找到更創新的方式來壓縮、儲存及播放影片相關的自適性串流技術(adaptive bit rate streaming),例如速度要求三倍以上,或檔案更大的虛擬實境全角度影片?

根據思科公司的說法,到了2019年,八成以上的網路流量都會是影片,複雜程度無需多說。但再怎麼複雜,可能都敵不過要如何幫知名動作演員馮迪索(Vin Diesel)用他的手機,直播自己正在讀的最新電影腳本的感想,同時讓而他的1億Facebook粉絲中有100萬人正順利收看。

Vin Diesel.JPG
圖/ Facebook Fanpage-Vin Diesel

對於直播,Facebook系統不再有相對的餘暇,可以慢慢應付用戶上傳影片、再小心解碼,然後儲存起來,等有人想看時再播放。

直播必須在兩、三秒內完成這些工作,從馮迪索開口說話,粉絲立刻聽到與評論,然後馮迪索馬上回應之間,都不能出現延遲現象。可惜,由於馮迪索和Facebook上的其他名人與公眾人物大受歡迎,因為粉絲可以在自己的動態消息中直接收看,他們的粉絲愛死了實況轉播,這為Facebook的工程團隊帶來了可愛的「狂奔羊群」(thundering herd)問題,因為粉絲一來就像潮水一樣淹沒了實況轉播的流媒體伺服器(streaming server)。所以工程團隊必須回到暫存架構並建立系統,讓這些粉絲的影片請求轉送到各個粉絲所在地的周邊暫存器,並讓流媒體伺服器把影片送到各個周邊暫存器讓粉絲存取,每個暫存伺服器大約要同時應付20萬個收視用戶,同時要確保周邊暫存器能應付每一個後來的粉絲要求,這樣就能降低流媒體伺服器98%的工作負荷,並確保在馮迪索與粉絲之間沒有任何障礙。

登入數位時代會員

開啟專屬自己的主題內容,

每日推播重點文章

閱讀會員專屬文章

請先登入數位時代會員

看更多獨享內容

請先登入數位時代會員

開啟收藏文章功能,

請先登入數位時代會員

開啟訂閱文章分類功能,

請先登入數位時代會員

我還不是會員, 註冊去!
追蹤我們
蘋果能再次偉大?
© 2025 Business Next Media Corp. All Rights Reserved. 本網站內容未經允許,不得轉載。
106 台北市大安區光復南路102號9樓