Bird
Raised Fist0
HLDsystem_design~7 mins

Notification system design in HLD - System Design Guide

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Problem Statement
When a system needs to inform users about events or updates, sending notifications directly from the main application can cause delays and failures under high load. Without a dedicated notification system, messages may be lost, delayed, or overwhelm the service, leading to poor user experience and unreliable communication.
Solution
A notification system decouples message creation from delivery by using queues and workers. It collects notification requests, processes them asynchronously, and sends them via multiple channels like email, SMS, or push notifications. This design ensures reliable delivery, scalability, and the ability to handle retries and failures without blocking the main application.
Architecture
Application
Service
Notification
Email Server

This diagram shows how the application sends notification requests to a queue, which are then processed by workers that deliver messages through various delivery services like email servers or push gateways.

Trade-offs
✓ Pros
Improves system reliability by decoupling notification sending from main application flow.
Enables handling of high notification volumes through asynchronous processing.
Supports multiple notification channels with flexible delivery logic.
Allows retry mechanisms and failure handling without blocking user requests.
✗ Cons
Adds architectural complexity with additional components like queues and workers.
Introduces eventual consistency; notifications may be delayed under heavy load.
Requires monitoring and maintenance of extra infrastructure components.
Use when the system needs to send notifications to many users or via multiple channels, especially if notification volume exceeds hundreds per second or when delivery reliability and retries are important.
Avoid if the system sends very few notifications (less than 10 per minute) or if immediate synchronous notification is critical and volume is low, as added complexity may not justify benefits.
Real World Examples
Uber
Uber uses a notification system to asynchronously send ride status updates and promotions via SMS and push notifications, ensuring timely delivery without slowing down core ride matching services.
Amazon
Amazon employs notification queues and workers to send order confirmations and shipping updates via email and SMS, handling massive spikes during sales events without losing messages.
LinkedIn
LinkedIn uses a notification system to deliver connection requests, messages, and job alerts through multiple channels, managing retries and user preferences efficiently.
Alternatives
Synchronous notification sending
Notifications are sent directly during user request processing without queues or workers.
Use when: Choose when notification volume is very low and immediate delivery is required without added infrastructure.
Third-party notification services
Outsource notification delivery to external platforms instead of building internal queues and workers.
Use when: Choose when you want to reduce operational overhead and rely on specialized providers for delivery and scaling.
Summary
Notification systems prevent main application slowdowns by handling message delivery asynchronously.
They use queues and workers to process notifications reliably across multiple channels.
This design improves scalability and user experience by managing retries and failures gracefully.

Practice

(1/5)
1. Which component in a notification system is primarily responsible for storing user preferences about how they want to receive notifications?
easy
A. User Management Service
B. Notification Delivery Service
C. Notification Queue
D. Notification Generator

Solution

  1. Step 1: Understand user preferences role

    User preferences define how users want to receive notifications (email, SMS, push).
  2. Step 2: Identify responsible component

    The User Management Service stores and manages user data including preferences.
  3. Final Answer:

    User Management Service -> Option A
  4. Quick Check:

    User preferences stored in User Management Service [OK]
Hint: User preferences belong to user data, so User Management Service [OK]
Common Mistakes:
  • Confusing Notification Queue as storage for preferences
  • Thinking Notification Delivery Service stores preferences
  • Assuming Notification Generator manages user data
2. Which of the following is the correct sequence of components involved in sending a notification from creation to delivery?
easy
A. User Management Service -> Notification Delivery Service -> Notification Generator
B. Notification Delivery Service -> Notification Queue -> Notification Generator
C. Notification Queue -> Notification Generator -> Notification Delivery Service
D. Notification Generator -> Notification Queue -> Notification Delivery Service

Solution

  1. Step 1: Understand notification flow

    Notifications are created, queued, then delivered.
  2. Step 2: Match correct order

    Notification Generator creates, Notification Queue holds, Delivery Service sends.
  3. Final Answer:

    Notification Generator -> Notification Queue -> Notification Delivery Service -> Option D
  4. Quick Check:

    Creation, queue, delivery order = A [OK]
Hint: Notifications flow: create, queue, then deliver [OK]
Common Mistakes:
  • Mixing delivery before queuing
  • Starting with delivery service instead of generator
  • Ignoring the queue component
3. Consider this simplified flow: A notification is created and placed in a queue. The delivery service fetches notifications from the queue and sends them. If the delivery service crashes after fetching but before sending, what happens to the notification?
medium
A. Notification is lost and never sent
B. Notification is duplicated and sent twice
C. Notification remains in the queue for retry
D. Notification is sent immediately by the generator

Solution

  1. Step 1: Analyze delivery service crash timing

    Crash occurs after fetching from queue but before sending notification.
  2. Step 2: Understand queue behavior with acknowledgment

    Without acknowledgment, message stays or returns to queue for retry.
  3. Final Answer:

    Notification remains in the queue for retry -> Option C
  4. Quick Check:

    Unacknowledged messages stay in queue [OK]
Hint: Unsent messages stay in queue until confirmed sent [OK]
Common Mistakes:
  • Assuming notification is lost without retry
  • Thinking notification is duplicated automatically
  • Believing generator sends notification directly
4. A notification system is experiencing delays because the delivery service processes notifications sequentially. Which change will best improve throughput without losing message order?
medium
A. Store notifications only in the database without queue
B. Add multiple delivery service instances with partitioned queues
C. Use a single-threaded delivery service with longer timeouts
D. Remove the queue and send notifications directly

Solution

  1. Step 1: Identify bottleneck cause

    Sequential processing limits throughput.
  2. Step 2: Apply partitioned queues with multiple instances

    Partitioning allows parallel processing while preserving order per partition.
  3. Final Answer:

    Add multiple delivery service instances with partitioned queues -> Option B
  4. Quick Check:

    Parallelism with partitioning improves throughput [OK]
Hint: Partition queues to parallelize delivery without breaking order [OK]
Common Mistakes:
  • Removing queue loses reliability and order
  • Single-threaded service slows throughput
  • Storing only in DB delays delivery
5. You need to design a notification system that supports millions of users with different notification preferences and guarantees delivery within seconds. Which architectural approach best meets these requirements?
hard
A. Implement microservices with separate components for user preferences, notification generation, queuing, and delivery with horizontal scaling
B. Use a monolithic service handling all notifications synchronously
C. Store all notifications in a single database table and poll it every minute for delivery
D. Send notifications directly from the user management service without queues

Solution

  1. Step 1: Analyze scalability and latency needs

    Millions of users and seconds-level delivery require scalable, decoupled design.
  2. Step 2: Choose microservices with separate components and horizontal scaling

    This approach allows independent scaling, fault isolation, and faster processing.
  3. Final Answer:

    Implement microservices with separate components for user preferences, notification generation, queuing, and delivery with horizontal scaling -> Option A
  4. Quick Check:

    Microservices + scaling = scalable, fast delivery [OK]
Hint: Decouple components and scale horizontally for millions of users [OK]
Common Mistakes:
  • Using monolith limits scalability and speed
  • Polling DB every minute causes delays
  • Skipping queues reduces reliability