平臺突然涌入幾億外國人,架構要怎么改造?
我去面試一個架構師崗位。
面試官:我們平臺突然涌入幾億外國人,架構要怎么改造?
我:你們平臺現在是什么架構?
面試官:單機房架構。
我:單機房架構,它最大的特點就是“全連接”分層架構。
首先,系統架構是分層的:
- 站點層;
- 服務層;
- 數據庫與緩存層。
其次,層與層之間的連接池是全連接的。
如上圖所示:
- 站點層集群全連接服務層集群;
- 服務層集群全連接數據庫集群;
- 如果有緩存,它們還全連接緩存集群;
面試官:“全連接”分層架構能直接擴展到多機房多活嗎,我們老板有計劃在北美搞一個機房?
我:不行。
如果直接將單機房“全連接”分層架構復制到多機房多活,就會有非常多的跨機房的連接:
- 站點層連接服務層,一半的請求跨機房;
- 服務層連數據庫,一半的請求跨機房;
- 站點和服務連緩存,一半的請求跨機房;
面試官:一半的請求跨機房連接,有問題嗎?
我:當然有問題。
同機房連接,內網的性能損耗幾乎可以忽略不計。一旦涉及到跨機房的訪問,即使機房和機房之間有專線,訪問的時延可能增加到秒級,如果機房在北美,跨機房請求可能要幾十秒。
如果一個業務請求要訪問10個服務,一半請求跨機房,光花在網絡上的請求都達到幾十秒,用戶體驗不能接受。
面試官:那怎么辦呢?
我:如果業務具備地域特性的聚集效應,可以使用單元化架構。
面試官:什么叫業務具備地域特性的聚集效應?什么叫做單元化架構?
我:舉個例子吧,DD打車。
- 下單用戶在一個城市;
- 接單司機在一個城市;
- 交易訂單在一個城市;
只需要按照地域,部署多個機房,機房內部站點層,服務層,緩存層,數據層都只連接同一個機房。數據層跨機房同步,即使有1分鐘的延時,對業務也不會影響。這類業務,就具備地域特性。
這種只訪問自己機房的多機房多活架構,就叫做單元化架構。具體到你們的場景:
- 在東大機房部署一套,東大用戶訪問這一套。
- 在北美機房部署一套,北美用戶訪問那一套。
就能夠快速解決。
面試官:不行呀,TT就是玩這種架構,崩盤了。潑天的富貴這不才過來的嗎?
我:我建議,你們又不是交易類型的業務,只需要:
- 發布文章,評論文章;
- 發布視頻,評論視頻;
UP主和粉絲,即使有個十幾秒數據延時,不影響。只要不直播,用戶無感知。
因此直接在東大擴容機房,就能夠搞定。
我:簡單總結,單元化架構是一種能夠快速擴容的多機房多活方案。但前提是,業務必須滿足地域性聚集效應。
知其然,知其所以然。
思路比結論更重要。