從 0 開始設計 Twitter 系統架構

Twitter 是全球最大的社交網絡之一,如果讓我們從 0 開始設計 Twitter 的系統架構,該怎麼做呢?有哪些服務是必須的?有哪些點需要提前考慮?這篇文章簡單介紹了設計類 Twitter 系統的思路並在最後給出了參考設計。原文鏈接:https://medium.com/interviewnoodle/twitter-system-architecture-8dafce16aec4

Twitter 是全球領先的在線社交網絡服務,用戶可以在這裏發佈和閱讀被稱爲 “推文(tweets)” 的短消息。在系統架構設計面試過程中,當被問及如何設計 Twitter 時,大多數候選人都會將其設計爲單體服務。然而,將 Twitter 這樣的大型服務設計爲單體,表明候選人缺乏設計分佈式系統的經驗。從微服務甚至 lambda(或函數)的角度來設計分佈式系統在今天是很正常的選擇。目前的趨勢是,沒有人會將新服務設計爲單體,公司正逐漸將其龐大的單體服務轉換爲一組微服務。因此,候選人應該以微服務的方式設計 Twitter。

功能需求

  1. 用戶可以發佈或分享新的推文(tweet)

  2. 每條推文最多不超過 140 個字符

  3. 用戶可以刪除推文,但不能更新 / 編輯發佈的推文(寫操作)

  4. 用戶可以標記喜歡的推文(寫操作)

  5. 用戶可以關注或取消關注另一個用戶(寫操作),關注一個用戶意味着用戶可以看到其他用戶在他的時間線上的推文

  6. 可以生成兩種類型的時間線(讀操作),用戶時間線由他最後 N 個推文組成,主頁時間線由他正在關注的用戶的熱門推文按照時間降序生成

  7. 用戶可以根據關鍵字搜索推文(讀操作)

  8. 用戶需要有一個帳戶來發布或讀取推文(暫時使用外部身份服務)

  9. 用戶可以註冊和刪除帳戶

  10. Twitter 支持包含文字和圖片 / 視頻的推文,但在我們當前的設計中,將只支持文本

  11. 分析 / 監視服務,以確定其負載、運行狀況和功能

  12. 分析還可爲用戶提供關於關注誰、推文通知、熱門話題、推送通知和分享推文的意見或建議

非功能需求

  1. 服務的高可用是最重要的需求,這意味着用戶可以在自己的主頁時間線上閱讀推文,而感受不到任何停頓

  2. 生成時間線的時間最長不得超過半秒

  3. 不需要強一致性,只需要最終一致性,可以使用關鍵詞數據庫用於搜索基於關鍵詞的推文

  4. 隨着用戶和推文的增加,系統負載也在增加,因此係統應該具有可伸縮性

  5. 持久化用戶數據

現在我們來做一些計算:

Twitter 服務的概要設計

由於系統的複雜性,可以將其劃分爲若干個服務,其中包括若干個微服務。

  1. 推文服務(Tweet service)

  2. 用戶時間線服務(User timeline service)

  3. 扇出服務(Fanout Service)

  4. 主頁時間線服務(Home timeline service)

  5. 社交網絡服務(Social graph service)

  6. 搜索服務(Search service)

下面是 Twitter 服務中不同邏輯組件或微服務架構。

Twitter 服務的詳細設計

所有微服務都可以被稱爲模塊。

推文服務(Tweet service)

然後我們看一下 Tweet 服務的數據庫表結構。

用戶(Users)表包含用戶的所有信息,推文(Tweet)表存儲所有推文,Favorite_tweet 表存儲了喜歡的推文記錄,也就是說,每當用戶喜歡一條推文時,就會在 Favorite_tweet 表中插入一條記錄。

生成唯一的推文 ID

當用戶調用 postTweet() 時,調用會發送給應用服務器。應用服務器爲該推文生成一個唯一的 id,同樣的機制也可以用來爲推文生成短 URL。另一個方式是基於應用服務器的 UUID(Universally unique identifier)。推文 ID 生成後,應用服務器將該推文插入分佈式緩存和數據庫的 tweet 表中。由於需要在執行推文的創建 / 更新 / 刪除操作的同時更新緩存和數據庫,所以我們使用緩存透寫機制。

可擴展性設計

我們可以將分佈式緩存和數據庫劃分爲多個分區和副本。

社交網絡服務(Social graph service)

Following API:

用戶時間線服務(User timeline service)

扇出服務(Fanout Service)

主頁時間線服務(Home timeline service)

搜索服務(Search service)

照片和視頻

Twitter 的網絡

Twitter 的最終詳細設計

系統設計:

數據架構:

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/16d_aamO9FFRPtwrxcb1HA