2008 年 1 月,美國加利福尼亞州。一位名為 Jan Koum 的雅虎工程師,在申請 Facebook 職位時被拒了。
這當然不是故事的終點——他第二年入手了一部 iPhone,并立即認識到新 App Store 的巨大潛力。因此,他決定與雅虎的一些前同事一起開發一款即時通訊工具,并將其命名為 WhatsApp,據稱這個名字是他在朋友家的廚房討論了幾個小時就確定的。WhatsApp 背后的愿景是取代昂貴的短信。
WhatsApp 每天有 100 萬人注冊,其增長速度簡直令人難以置信。但更為人難以想象的是:WhatsApp 每天需要支持來自 4.5 億日活躍用戶的500 億條消息,他們卻只用了32 名工程師就做到了。
盡管產品爆炸性增長是一個好現象,但 Jan Koum 和 WhatsApp 團隊必須采用最佳工程實踐來克服挑戰。
WhatsApp 滿足極端可擴展性的工程實踐的 8 點原則如下。
他們只將產品的重點放在核心功能上——消息傳遞,并且沒有費心建立廣告網絡或社交媒體平臺。
單一責任原則
他們還不惜一切代價消除了功能蔓延。當你向產品添加過多的功能時,就會發生功能蠕變。并使其難以使用。此外,他們更注重 WhatsApp 的可靠性。
他們使用 Erlang 構建 WhatsApp 服務器的核心功能。因為它:
線程是 Erlang 的原生特性。但在Java或C++中,線程屬于操作系統。所以Erlang中沒有必要保存整個CPU狀態。這使得上下文切換更便宜。
熱加載可以更輕松地部署代碼更改,而無需重新啟動服務器;或者流量重定向。簡而言之,熱加載提供了高可用性。
不要重新發明輪子- 要么使用開源,要么購買商業解決方案。
不要重新發明輪子
Ejabberd 是一個用 Erlang 編寫的開源實時消息服務器。
他們在 ejabberd 之上構建了 WhatsApp 。他們還重寫了一些 ejabberd 核心組件來滿足他們的需求。此外,WhatsApp 利用 Google Push 等第三方服務來提供推送通知。
他們非常重視跨領域的關注,以提高產品質量。橫切關注點是影響產品許多部分的事情。并且很難分開。例如,監視和警報服務的運行狀況。
跨領域關注點
他們通過持續集成和持續交付改進了軟件開發流程;持續集成是將代碼更改定期合并到中央存儲庫的過程;持續交付是將代碼部署到測試或生產環境的過程。
WhatsApp使用對角縮放來降低成本和操作復雜性;水平擴展是增加資源池中機器數量的過程;垂直擴展是增加現有機器容量(例如 CPU 或內存)的過程;對角線縮放是水平和垂直縮放的混合。計算資源可以垂直和水平添加。
可擴展性
他們在 FreeBSD 操作系統上運行 WhatsApp 服務器。因為他們之前在 Yahoo 工作時就有過使用 FreeBSD 的經驗。此外,FreeBSD 還提供了可靠的網絡堆棧。
他們還對 FreeBSD 進行了微調,以容納每臺服務器超過 200 萬個連接。并修改了文件、套接字等內核參數。
他們過度配置服務器來處理突發的流量峰值并為故障留出空間。例如,網絡分區或硬件故障等故障。
他們測量了 CPU、上下文切換和系統調用等指標。然后找出并消除瓶頸。_ 他們定期這樣做。持續的反饋周期極大地提高了 WhatsApp 的性能。
持續反饋循環
WhatsApp 團隊使用負載測試來識別單點故障。負載測試是測量系統在預期負載下性能的過程。
負載測試
他們使用人工生產流量和 DNS 配置更改來進行負載測試。
隨著團隊規模的擴大,工程師之間的溝通路徑呈二次方增長。這是生產力下降的一個原因。
工程師之間的溝通路徑
因此他們保持了較小的團隊規?!?2名工程師。
WhatsApp 是市場上最成功的即時通訊工具之一。2014 年 2 月,拒絕給 Jan Koum 發放 Offer 的 Facebook ,最終以高達 190 億美元的價格收購了 WhatsApp。
據福布斯報道,到 2023 年,Jan Koum 的凈資產將達到 140 億美元。
原文鏈接:https://newsletter.systemdesign.one/p/whatsapp-engineering?actinotallow=share
本文鏈接:http://www.tebozhan.com/showinfo-26-13296-0.htmlWhatsApp 僅用 32 名工程師就能支持每天 500 億條消息的八個原因
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com
上一篇: 面試薪水被壓?那是你還不懂多線程和高并發
下一篇: 硬核 JVM 壓縮指針詳解