Methodology for FB Messenger/Whatsapp
1. 5 Step Process
1.1. Use cases, assumptions, constraints
1.2. Back of envelope calculations
1.3. Design core components
1.4. High level design
1.5. Scale the design
Facebook Messenger/Whatsapp
Step 1a: Use Cases
● Functional requirements (use cases)
○ Users sends a message
○ Users receives messages
○ Users can search chat history
● Nonfunctional requirements
○ High availability
○ High reliability
Facebook Messenger/Whatsapp
Step 1b: Assumptions, Constraints
● Uneven traffic
● 1 billion users
● 1 million chat writes/sec
● 1 million chat reads/sec
○ 1:1 read-write (even)
Facebook Messenger/Whatsapp
Step 2a: Back of envelope calculations
● Database design
○ Users table
■ Id
■ Name
■ Created_at
■ Active_chat_ID
○ Chat table
■ Id
■ Chat Name
■ Created_at
■ Particpants_progress (object with users_id and timestamps)
○ Message table
■ Id
■ Chat_ID
■ Sender_ID
■ Content
■ Created_at
Facebook Messenger/Whatsapp
Step 2b: Back of envelope calculations
● Daily Traffic Estimates
○ 1 million chat writes/sec and reads/sec
■ 1:1 read-write (even)
● Storage Estimates
○ Sizes of users (~50 b), chats (~50 b), messages (~100 b)
tables (~200 bytes total)
■ 200 MB/s
● 200 bytes * 1 million/sec
Facebook Messenger/Whatsapp
Step 3: Design core components
● Use case #1: User sends a message
○ Server, write API, database
● Use case #2: User reads a message
○ Server, read API, database
● Use case #3: User searches a chat
○ Search service
Facebook Messenger/Whatsapp
Step 4: High level design
Facebook Messenger/Whatsapp
Step 5: Scale design
● High reliability and high availability
○ Add load balancers, DB shards, caches

Facebook Messenger/Whatsapp System Design

  • 1.
    Methodology for FBMessenger/Whatsapp 1. 5 Step Process 1.1. Use cases, assumptions, constraints 1.2. Back of envelope calculations 1.3. Design core components 1.4. High level design 1.5. Scale the design
  • 2.
    Facebook Messenger/Whatsapp Step 1a:Use Cases ● Functional requirements (use cases) ○ Users sends a message ○ Users receives messages ○ Users can search chat history ● Nonfunctional requirements ○ High availability ○ High reliability
  • 3.
    Facebook Messenger/Whatsapp Step 1b:Assumptions, Constraints ● Uneven traffic ● 1 billion users ● 1 million chat writes/sec ● 1 million chat reads/sec ○ 1:1 read-write (even)
  • 4.
    Facebook Messenger/Whatsapp Step 2a:Back of envelope calculations ● Database design ○ Users table ■ Id ■ Name ■ Created_at ■ Active_chat_ID ○ Chat table ■ Id ■ Chat Name ■ Created_at ■ Particpants_progress (object with users_id and timestamps) ○ Message table ■ Id ■ Chat_ID ■ Sender_ID ■ Content ■ Created_at
  • 5.
    Facebook Messenger/Whatsapp Step 2b:Back of envelope calculations ● Daily Traffic Estimates ○ 1 million chat writes/sec and reads/sec ■ 1:1 read-write (even) ● Storage Estimates ○ Sizes of users (~50 b), chats (~50 b), messages (~100 b) tables (~200 bytes total) ■ 200 MB/s ● 200 bytes * 1 million/sec
  • 6.
    Facebook Messenger/Whatsapp Step 3:Design core components ● Use case #1: User sends a message ○ Server, write API, database ● Use case #2: User reads a message ○ Server, read API, database ● Use case #3: User searches a chat ○ Search service
  • 7.
  • 8.
    Facebook Messenger/Whatsapp Step 5:Scale design ● High reliability and high availability ○ Add load balancers, DB shards, caches