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