短視頻內容平臺(如 TikTok、Instagram Reel、YouTube Shorts)的系統設計

現在,短視頻內容已成爲新趨勢,每個人都在從 TikTok、Instagram、YouTube 等平臺上消費這些內容。讓我們看看如何爲 TikTok 創建一個系統。

這樣的應用程序看起來很小,但在後臺有很多事情正在進行。以下是相關的挑戰:

• 由於該應用程序在全球範圍內使用,將會有大量的請求發送到服務器。這最終會增加服務器的負載。• 將視頻上傳到後臺將是一個巨大的任務,這將增加服務器的負載並阻塞。• 流暢地播放視頻,無緩衝。• 一個基於用戶興趣推薦視頻的推薦系統。

讓我們逐一瞭解每個部分。我將其分爲三個部分:

• 與用戶相關的服務 • 與視頻發佈相關的服務 • 與點贊和評論相關的服務 • 推薦服務

與用戶相關的服務

這是一個包含與用戶相關服務的服務,如下所示:

註冊: 用戶將在應用程序中註冊。• 登錄: 它將對憑證進行身份驗證,並嚮應用程序發送響應。• 登出: 用戶將從應用程序中註銷。• 關注: 如果用戶想要關注或取消關注其他用戶,則可以通過此服務完成。

爲了存儲與用戶相關的數據,我們將使用基於 SQL 的數據庫,如 MYSQLPostgreSQL,因爲與用戶相關的數據(例如追蹤關注者)將會是關聯數據,所以這是一個適當的選擇。

爲了優化數據庫性能,我們將使用主從架構。主數據庫用於執行寫操作,從數據庫用於執行讀操作。要了解有關此內容的更多信息,可以閱讀文章如何優化數據庫性能並擴展它?[3]

 

現在讓我們討論用戶服務的流程。應用程序將發出 API 調用,API Gateway 將管理這些 API。它將爲用戶服務路由請求。

請求將通過負載均衡器進行,負載均衡器下將有多個用戶服務實例。根據負載,它將決定哪個實例將處理請求。一旦請求被處理,負載均衡器將將響應發送回 API 網關,然後再發送回應用程序。

與視頻發佈相關的服務

這是一個包含與視頻發佈相關服務的服務,如下所示:

上傳視頻: 將視頻上傳到後臺服務器。• 發佈: 如果用戶想要創建、編輯或刪除帖子,則可以通過此服務完成。

爲了存儲與帖子相關的數據,我們將使用基於 NoSQL 的數據庫,如 MongoDB。對於每個用戶,可能會有成千上萬的帖子,這將導致大量數據。

爲了實現最佳性能,擴展數據庫可能會很困難。NoSQL 數據庫支持水平分片,這有助於我們在不影響性能的情況下擴展數據庫。要了解有關數據庫分片的更多信息,可以閱讀文章關於數據庫分片的一切 | 擴展數據庫 [4]

 

現在讓我們討論視頻服務的流程。應用程序將發出 API 調用,API Gateway 將管理這些 API。它將爲視頻服務路由請求。

請求將通過負載均衡器進行,負載均衡器下將有多個視頻服務實例。根據負載,它將決定哪個實例將處理請求。一旦請求被處理,負載均衡器將將響應發送回 API 網關,然後再發送回應用程序。

如何使文件在全球範圍內可訪問而不增加下載時間?

視頻文件將上傳到單獨的雲存儲服務,如 Amazon S3 Bucket。現在,如果我們想在世界範圍內任何地方訪問文件而沒有任何延遲,那麼該文件將發送到內容分發網絡 (CDN),它將將媒體文件更新到世界各地的不同數據雲存儲中。

我們能進一步優化以減少下載時間嗎?

還有一個挑戰需要解決,即原始視頻的大小可能較大,因此如果將大文件發送回客戶端,則下載時間會更長,這會影響用戶體驗。

文件一旦上傳到雲存儲,您可以在數據庫中存儲文件路徑。然後將帖子 / 視頻詳細信息發送到消息隊列系統,如 KafkaRabbitMQ

爲了使用戶體驗流暢,我們需要壓縮視頻併爲不同設備創建不同分辨率的視頻。視頻處理工作者將從消息隊列系統接收視頻詳細信息,然後從

雲存儲中提取文件並進行處理。處理完成後,這些新的視頻文件將發送到 CDN

如何訪問壓縮的視頻文件?

現在您可能會想,應用程序如何知道上述討論中壓縮的視頻的文件路徑?由於壓縮文件將存儲在分類文件夾中,因此可以根據分辨率和文件名輕鬆查找文件。

視頻發佈 API 只會返回文件名,而要訪問文件,應用程序將在 URL 本身中添加分辨率細節,例如 /media//

當訪問此 URL 時,它將經過 API 網關,並從 URL 中提取分辨率和文件名詳細信息。然後它將在緩存系統(Redis)中檢查,如果文件不可用,則將訪問 CDN 並通過它獲取文件。然後將其添加到緩存中,以便如果再次請求相同文件,則不必從 CDN 獲取。

點贊和評論相關的服務

這是一個包含與視頻點贊和評論相關服務的服務。正如名稱所示,通過此服務,我們可以爲特定帖子更新點贊和評論。與上面討論的其他流程相同。

 

推薦服務

通過此服務,基於用戶偏好推薦一系列帖子。幕後有很多其他事情正在進行。讓我們看看幕後運行的流程。

 

然後,創建一個帖子後,它將被髮送到消息隊列系統,然後消費者將提取數據並將數據更新到**大數據(Hadoop)**中。

將爲機器學習服務(如 PyTorchTensorflow)設置單獨的服務器,在這裏它將從大數據中提取數據並訓練模型。推薦服務將使用此 AI 模型爲給定用戶推薦帖子。

結論

這是類似於 TikTok 的應用程序的基本級別的系統設計,根據需求可以添加許多其他內容,如跟蹤用戶行爲(用戶參與的帖子,用戶關注的帖子)。基於此,可以改進 AI 模型,爲用戶推薦帖子。

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