Assume 1B daily active user
Read QPS: 1B / 100k = 10k
Peak read QPS: 2 * 10k = 20k
Assume 1% user send 10 message per day
Write QPS: 1B * 1% * 10 / 10k = 1k
Peak write QPS: 2 * 1k = 2k
Storage estimation:
The messages are stored client side. We only need to store user information, user friends information and group chat information. Also need to store unsent messages temporary.
Assume each user need to store 100kb information for un-sent user info, text message, images and videos temporary.
The storage estimation:
1B * 100kb = 100TB.
Each data will need 2 replicas. So in total the storage need is
100TB * 3 = 300TB.
GET getAllMessages(userId)
WebSocket message:
From client to server:
sendMessage(messageType, fromId, toId, messageContent)
receiveMessage(messageType, fromId, toId, messageContent)