Skip to content
advanced Phase · Backend Case Studies

Chat Backend

Design real-time messaging with WebSockets and message persistence.

2h
0 problems
Topic Progress 0%

Requirements & Scope

Scale

  • p99 < 100ms message latency
  • 1M concurrent connections
  • 100K messages/sec
  • 1 year message retention

Core Requirements

  • 1:1 and group messaging with up to 500 members
  • Read receipts, typing indicators, and online presence
  • Message types: text, image, file, and system notifications
  • End-to-end encryption for private conversations
  • Offline message queue and delivery on reconnect
  • Search across message history with full-text indexing

Key Points

  • Understanding Chat Backend is essential for production systems
  • Always consider scalability and maintainability
  • Test thoroughly before deploying to production
  • Monitor performance and set up alerting

Common Patterns

  1. Validation: Always validate input at the boundary
  2. Error Handling: Use structured error responses
  3. Logging: Log key events for debugging
  4. Testing: Unit, integration, and load tests
  5. Documentation: Keep docs updated with code changes

Architecture & WebSocket

Connection Management

  • OnOpen: store connection, set online, send pending messages
  • OnMessage: persist to DB, route to recipient
  • OnClose: remove connection, set offline

Presence

Redis SET for online users + heartbeat (30s interval, offline after 60s)

Message Delivery

At-least-once: persist -> push -> ACK -> retry -> pending queue -> deliver on reconnect

Key Points

  • Understanding Chat Backend is essential for production systems
  • Always consider scalability and maintainability
  • Test thoroughly before deploying to production
  • Monitor performance and set up alerting

Common Patterns

  1. Validation: Always validate input at the boundary
  2. Error Handling: Use structured error responses
  3. Logging: Log key events for debugging
  4. Testing: Unit, integration, and load tests
  5. Documentation: Keep docs updated with code changes

Message Persistence

Tables

  • messages(id, conversation_id, sender_id, content, message_type, created_at, read_at)
  • conversations(id, type, name, created_at)
  • conversation_members(conversation_id, user_id, last_read_at)

Key Points

  • Understanding Chat Backend is essential for production systems
  • Always consider scalability and maintainability
  • Test thoroughly before deploying to production
  • Monitor performance and set up alerting

Common Patterns

  1. Validation: Always validate input at the boundary
  2. Error Handling: Use structured error responses
  3. Logging: Log key events for debugging
  4. Testing: Unit, integration, and load tests
  5. Documentation: Keep docs updated with code changes

Practice Problems

0 / 3 solved
Implement Chat Backend

Design and implement a solution for Chat Backend in a backend system. Consider scalability, error handling, and production readiness.

Solution
// Chat Backend implementation
// Key aspects: validation, error handling, logging, testing

public class ChatBackend {
    // Production-ready implementation
}
Chat Backend Edge Cases

Identify and handle edge cases for Chat Backend. What happens under high load, with invalid input, or during failures?

Solution
// Edge case handling:
// 1. Null/empty input -> validation
// 2. High load -> rate limiting, queuing
// 3. Failures -> retries, circuit breaker
// 4. Concurrent access -> locks, idempotency
Chat Backend Testing Strategy

Write a testing strategy for Chat Backend. Include unit tests, integration tests, and performance tests.

Solution
// Test plan:
// - Unit: 80% coverage target
// - Integration: API contracts
// - Performance: latency, throughput
// - Chaos: failure injection

Quiz

1. User goes offline during delivery?

Question 1 options

2. Why WebSocket over HTTP polling?

Question 2 options

3. What is a common mistake when implementing Chat Backend?

Question 3 options

Flashcards

Question

How to ensure message delivery?

Answer

At-least-once: persist -> push -> ACK -> retry

Question

How is presence tracked?

Answer

WebSocket connection + Redis SET + heartbeat

Question

Chat Backend best practices

Answer

Follow SOLID principles, write clean code, test thoroughly, document decisions, and monitor in production.

Revision Notes

Key Takeaways

  • 1. WebSocket for real-time bidirectional
  • 2. Persist before pushing for reliability
  • 3. Redis tracks presence with heartbeat
  • 4. At-least-once with pending queue

Interview Tips

  • Explain WebSocket lifecycle
  • Discuss delivery guarantees

Cheat Sheet

Chat Backend

  • Protocol: WebSocket (real-time, bidirectional)
  • Presence: Redis SET + heartbeat
  • Delivery: At-least-once (persist -> push -> ACK)
  • Pending: Queue for offline users