偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

系統(tǒng)設(shè)計:設(shè)計類似 WhatsApp 的應(yīng)用

系統(tǒng)
在本文中,我們將對系統(tǒng)的架構(gòu)進行一個高層次的概述,然后可以根據(jù)需要深入探討具體的領(lǐng)域。

在這個系統(tǒng)設(shè)計場景中,我們被要求設(shè)計一個類似WhatsApp的消息應(yīng)用程序。

雖然在實際的討論中可能會重點討論該應(yīng)用程序的一個或多個功能,但在本文中,我們將對系統(tǒng)的架構(gòu)進行一個高層次的概述,然后可以根據(jù)需要深入探討具體的領(lǐng)域。

明確功能需求

通過向業(yè)務(wù)方提問來縮小范圍,因為在一個小時內(nèi)設(shè)計整個WhatsApp平臺是不現(xiàn)實的:

主要用例: 該應(yīng)用的主要目的是發(fā)送、檢查和接收消息,以及閱讀和標記消息為已讀。

群組: 我們將不涉及群組消息,只考慮一對一消息。?內(nèi)容類型: 我們只支持文本消息,不支持圖片或視頻。

明確非功能需求

規(guī)模: 首先,我們來談?wù)勔?guī)模,即系統(tǒng)的大小和消息的處理量。假設(shè)每天發(fā)送100億條消息,并且我們計劃在一年內(nèi)將其翻倍。

可用性: 在可用性方面,我們希望系統(tǒng)高度可用并始終運行。

延遲: 至于系統(tǒng)延遲,我們希望它幾乎是即時的,因此大多數(shù)API請求應(yīng)在100毫秒內(nèi)完成。

估算:數(shù)據(jù)計算

每天100億條消息,約為10B消息 / 86,400秒每天 = 115,740條消息每秒(MPS)。在一年內(nèi)翻倍意味著我們應(yīng)計劃為115,740 * 2 = 231,480 MPS。

假設(shè)每條消息200字節(jié),每日存儲量為10B消息 * 200字節(jié) = 2 TB。年存儲量及增長約為2TB * 365天 * 2 = 1.5 PB。

需要注意的是,我們計算的是平均值,但系統(tǒng)需要處理高峰流量,這可能比平均MPS高得多。我們可能需要根據(jù)高峰時間進行擴展。

接口API設(shè)計

我們可能會使用RESTful API風(fēng)格以獲得更廣泛的兼容性。以下是可能的端點細分:

  • 發(fā)送消息 (POST /messages): 請求體包括接收者的ID和消息內(nèi)容。成功響應(yīng)(200)返回唯一的消息標識符。錯誤代碼(400, 500)處理缺少參數(shù)或服務(wù)器問題。
  • 檢查新消息 (GET /messages): 響應(yīng)為包含未讀消息的數(shù)組(200)或如果沒有則返回204。
  • 獲取特定消息 (GET /messages/:messageId): 返回特定消息(200)或未找到則返回404。
  • 標記消息為已讀 (PUT或PATCH /messages/:messageId): 成功響應(yīng)(200)確認更改,而404表示未找到消息。

其他考慮: 我們將集成WebSockets以實現(xiàn)實時更新。API將處理認證和初始連接建立。并且分頁可能是‘檢查新消息’端點所需的。安全措施,如輸入驗證,也是必要的。

系統(tǒng)設(shè)計

移動應(yīng)用:用戶的主要界面將是移動應(yīng)用(iOS, Android)。此應(yīng)用程序處理發(fā)送和接收消息、聯(lián)系人管理和對話。

負載均衡器:為了有效處理傳入請求,我們將使用負載均衡器來分配流量到多個服務(wù)器。這樣可以提高應(yīng)用程序的可靠性。

API服務(wù)器:所有請求將進入API服務(wù)器,這些服務(wù)器處理我們之前概述的RESTful API,管理消息邏輯。API服務(wù)器本身可以是無狀態(tài)的,這樣我們可以水平擴展(添加更多服務(wù)器)以應(yīng)對流量增長。

WebSocket連接:類似WhatsApp的應(yīng)用程序嚴重依賴WebSockets進行實時通信。聊天服務(wù)器將與移動應(yīng)用程序保持持久的WebSocket連接。當(dāng)消息到達時,可以立即推送到接收者的設(shè)備。

消息分發(fā)器:接下來,我們將有一個消息分發(fā)器服務(wù),該服務(wù)的主要目的是將API服務(wù)器與直接數(shù)據(jù)庫寫入解耦,這對于處理高寫入量尤其重要。

消息隊列,如Kafka或RabbitMQ,是這里的理想選擇。其工作原理如下:

  • API服務(wù)器接收到“發(fā)送消息”的POST請求。
  • 它將消息放在隊列中,并迅速向客戶端返回成功/確認。
  • 獨立的工作進程異步從隊列中讀取并將消息寫入數(shù)據(jù)庫。

數(shù)據(jù)庫 (NoSQL): 我們同意最終一致性是可以接受的,這使得NoSQL成為高消息量的可擴展選擇。

以下是兩個強有力的選擇:

  • Cassandra: 以可擴展性、高可用性和寫性能而聞名的寬列存儲。特別適合我們預(yù)期的高寫入量和簡單讀取模式(主要通過ID獲取消息)。
  • DynamoDB: AWS提供的完全托管的鍵值和文檔數(shù)據(jù)庫。如果我們想要一個最小維護的數(shù)據(jù)庫解決方案且能輕松擴展,這非常有利。

分片和分區(qū): 由于沒有單一數(shù)據(jù)庫可以處理我們1.5 PB的存儲需求,因此分片(水平分區(qū))數(shù)據(jù)是至關(guān)重要的。

但是我們將如何分片和分區(qū)這些數(shù)據(jù),以及這些API服務(wù)器如何知道從哪里請求這些數(shù)據(jù)?

我們可以基于userId進行分區(qū)。所有涉及用戶的消息將駐留在同一個分片/分區(qū)中。而我們的API服務(wù)器有兩種可能的方法來定位數(shù)據(jù):

  • 一致性哈希環(huán): 數(shù)據(jù)位置可以基于分區(qū)鍵確定,允許API服務(wù)器直接路由請求到正確的數(shù)據(jù)庫分片。
  • 元數(shù)據(jù)服務(wù): 一個獨立的服務(wù)保持分區(qū)鍵到分片位置的映射。API服務(wù)器首先查詢此服務(wù),然后進行數(shù)據(jù)庫調(diào)用。

結(jié)論和當(dāng)前系統(tǒng)瓶頸

這概述了類似WhatsApp應(yīng)用程序的主要架構(gòu)?,F(xiàn)在,讓我們看看我們當(dāng)前系統(tǒng)中的潛在瓶頸和改進領(lǐng)域:

  • 數(shù)據(jù)庫寫入: 高寫入量是一個潛在的瓶頸。分片、消息隊列和優(yōu)化的數(shù)據(jù)庫選擇是關(guān)鍵。
  • 端到端加密: WhatsApp模型非常強調(diào)安全性。實現(xiàn)端到端加密將是一個關(guān)鍵討論點。
  • 群組聊天: 此功能為消息路由和存儲帶來了額外的復(fù)雜性。
  • 媒體處理: 我們可以實現(xiàn)一個處理圖像和視頻上傳的系統(tǒng),這里使用壓縮以及多種存儲大小的縮略圖。
責(zé)任編輯:趙寧寧 來源: 小技術(shù)君
相關(guān)推薦

2023-11-29 13:55:00

系統(tǒng)設(shè)計Web

2021-07-28 08:31:25

設(shè)計系統(tǒng)應(yīng)用

2024-02-26 10:44:29

2013-01-14 10:02:10

UI設(shè)計設(shè)計元素Metro

2013-04-17 09:50:36

用戶體驗設(shè)計UED手勢

2024-05-09 12:17:00

責(zé)任鏈設(shè)計模式

2009-08-23 21:52:37

智能化系統(tǒng)酒店節(jié)能綜合布線

2009-04-11 15:12:24

2023-10-26 23:35:02

SSH登錄部署

2012-01-18 09:22:59

Windows Pho設(shè)計過程

2013-03-28 13:08:15

Web緩存

2010-06-24 15:30:47

HART協(xié)議

2017-02-14 21:15:48

2012-07-31 10:07:07

架構(gòu)系統(tǒng)架構(gòu)架構(gòu)設(shè)計

2022-08-26 08:18:04

軟件開發(fā)高級系統(tǒng)設(shè)計低級系統(tǒng)設(shè)計

2024-09-05 08:39:21

2024-06-28 09:59:35

2010-08-10 10:10:28

系統(tǒng)架構(gòu)

2017-10-10 09:08:12

數(shù)據(jù) 系統(tǒng) 應(yīng)用

2023-11-24 12:27:46

點贊
收藏

51CTO技術(shù)棧公眾號