💁🏻♂️ Solution A → http://blog.gainlo.co/index.php/2016/04/19/design-facebook-chat-function/ (kinda sucks)
Solution B → https://eileen-code4fun.medium.com/design-facebook-messenger-438d76639985
1. Outline problem, use cases and constraints
Gather requirements and scope the problem.
Design a system very much like Facebook messenger.
- User can see who in contacts list is online/offline (if other users make that visible)
- User can send messages to any contact and recipient can get immediately notified
- messages displayed in chronological order
- User can receive messages from any contact in near real-time
- User can participate in group chats
Out of scope
- Searching through a chat history
- Read reciepts
- User sees ‘now typing’ notifications for other chat participants
- User deletes messages
- User sends image or video or GIFs
- User authentication/authorization
Constraints and assumptions
- Traffic is not evenly distributed. Some users are heavy users, and some are basically churned.
- Heavy users may send 5,000-10,000 messages a day. Light users 10 or fewer.
- 2,000,000,000 - 2 billion users
- Say 1,000,000,000 active users. 50%.
- Average messages sent per day 100