《內行人才知道的系統設計面試指南 System Design Interview - An insider's guide || Alex Xu》

 


當初翻開這本書的目錄,第一個念頭是:「就是他了!」

我是後端工程師,現在正在從 0 到 1 開發一項類似 FB、IG 的社群/社交 App。
想當然爾,這顆 App 就會用到會員註冊/登入服務、貼文服務、通知服務等。
當時我是負責最簡單的會員註冊/登入,串接 Firebase 的 Single sign-on (從第三方用同個帳號登入,例如你可以用 Apple, Google, FB 帳號登入我們的 App)。同事負責設計通知中心的架構,當時連架構都不懂的我,看著同事畫的架構圖,什麼 Queue、Kafka 的,我完全一頭霧水。重點是,主管還特別叮嚀同事說,在設計通知中心時,一定要解釋給我聽,跟我說裡頭的 know how。

呼應我面試這間公司時,主管告訴我的:
「身為後端工程師,如果要精進,未來的職涯規劃要朝架構師去走。」

我想同事設計通知中心的能力,就是資深後端該具備的能力,也太強大了。

回到翻開這本書的目錄的那一刻,「Chapter 10 設計通知系統」幾個大字閃閃發亮,想說有這本書,我也可以嘗試設計通知系統了耶!興奮的我立馬翻到那一章節,看完後,公司開會時提到的「外推播、內推播」、「多裝置登入時要儲存 user device ID 」、「通知訊息要先塞到 Queue 裡再從 Workers 拉出來處理」,原本聽不懂的對話,或不知道怎麼實作的部分,全都豁然開朗,也理解同事的架構圖為什麼要那樣設計了。

小小一章,就解了我很多的「為什麼?」

其實剩下的章節,光看目錄名稱,沒辦法勾起我太大的興趣,直到有一天,主管又發問了。

我們的 App 架構是 Micro-services 外面有一層 Gateway,後來有個新需求是 Web 也要可以用,由於 Web 有可能出現流量太高,把後端打爆的情況,為了不讓 Web 的體驗影響到 App,同事在想要不要把 Web 跟 App 拆成兩個 Gateway。

主管就問:「我們 gateway 有 rate limit (或預期有) 的功能嗎?或是 rate limit 被規劃做在哪個地方?」

我立馬想起這本書的「Chapter 4 設計網路限速器 rate limiter」,想說這也太讚了吧!翻完後就能理解主管在說什麼了。通常微服務 + Gateway 的架構,會把 rate limiter 做在 Gateway。此外還知道 rate limiter 怎麼用、可以怎麼設計、會用到哪些演算法等等,雖然我們最後是使用 AWS Ingress 的限速服務,但能理解主管跟同事的對話著實令人開心。

如獲至寶的我就決定從頭詳閱其他章節,越看越開心。因為越看越發現,裡頭的架構我們的 App 都用得上。像是我們在存 user ID,貼文 ID 等資料時,這些資料都需要一個唯一值當 ID,雖然我們是用 ZooKeeper 提供的 ID Generator -- Snow Flake ID,而不是自己做,但看完「Chapter 7 設計可用於分散式系統的唯一 ID 生成器」我就了解,會需要用到 ID Generator ,是因為一台機器產 ID,不重複很簡單,但多台機器一起產 ID,要怎麼做到彼此溝通而不重複,是有技術在的。像是A 機器產了 1, 2, 3,B 機器就要從 4 開始產,會有這樣的技術在,也就是說我們要克服在分散式系統下,如何保證每次每台機器產的 ID 都是唯一值的困難點。

再來是 App 內分享貼文或分享他人的 profile 會需要產生 share link,也有用到類似「Chapter 8 設計短網址生成器」的概念;App 也有追蹤者的動態牆,對應到「Chapter 11 設計動態訊息系統」;用戶之間可以一對一傳訊息,也可以群聊,對應到「Chapter 12 設計聊天系統」;全站搜尋系統以及建立文章時, hashtag 的 auto complete 對應到「Chapter 13 設計搜尋文字自動補全系統」;存 cache 到 Redis 使用到的「Chapter 6 設計鍵值儲存系統」概念;就連我覺得看起來無關的章節「Chapter 14 設計 YouTube」,裡頭在講用戶上傳影音到 S3,要切成 multi-part,拿到 blob 的 presign url ,取得權限才能上傳等等,我們也有用到,因為就像 FB 一樣,我們的 App 也可以發圖影音。

真的是收穫滿滿的一本書,如果是菜鳥後端工程師,完全不懂架構是什麼,那你一定要看,看完以後你就會知道你們公司服務系統的雛形,以及為什麼要這樣設計。

如果是正在開發可以上傳圖文影音、有動態牆服務、可以聊天、發送通知的產品,那你更不能錯過這本寶藏!

Comments

Popular posts from this blog

紅石抱石技巧 V3 - V4 訓練班 - 整體上課心得

紅石抱石技巧 V3 - V4 訓練班 - D1 路線判讀與動作矯正