標籤:

矽谷之路58: 如何設計WhatsAPP(一)

今天講一講如何設計WhatsAPP,這是一款非常流行的聊天軟體,也是一個非常通用的架構。

從數據結構開始,我們需要什麼表呢?首先肯定是user表,有用戶id和一些參數;然後有friend表,是用戶id 的互相關聯;還有channel表,即群關係,要有群id;還有message表,就是用戶發送的消息。

有了這些表,我們如何選擇合適的資料庫呢?一般有SQL和NoSQL兩種選擇。SQL是關係型資料庫,便於修改,能保證數據一致性,適用於組合狀態。NoSQL有很多種,處理大規模數據性能更好,比較適合append操作,但是可能有數據不一致的情況,適用於序列化的數據。所以user,friend和channel表選用SQL資料庫,因為數據互相關聯,可能會經常更新。而message表一般只需要append操作就可以了,而且數據量大,選用NoSQL更合適

然後再聊聊架構。User manager負責用戶服務相關的管理,Channel manager負責頻道(群)服務相關的管理;聊天服務往往要維護與用戶的連接,所以用獨立伺服器開放多個socket監聽請求;中間通過router轉發請求。

t有了基本架構,我們來談一個很有趣的話題:如何支持百萬群聊?

首先計算一下需求,假設有一百萬用戶同時在線,但是用戶發消息的頻率一般來說並不高,大概十分鐘一條,每條30B。所以每秒有50GB的數據量,是一個很大的值,有沒有辦法縮減呢?

一個基本的方法就是將消息打包,之前每條信息都有一個頭一個尾,有很多流量耗費在了協議上。所以我們可以多個消息一起發送,共用頭和尾,這樣就將流量縮減到了30GB/s。

還可以將消息進行壓縮,能縮減到15GB/s,這樣就比最初減少了75%的流量,是不是棒棒的。

本文整理作者:Mengying Tian,查看完整視頻:http://www.bittiger.io/classes

更多內容,請訪問:BitTiger.io, 掃描下面二維碼,關注微信公眾賬號「論碼農的自我修養」

推薦閱讀:

矽谷之路27:如何設計用戶系統(一)
矽谷之路28:如何設計用戶系統(二)
什麼是 Design System
矽谷之路37:如何設計TinyURL

TAG:系统设计 |