Design Exercise: Notification System
Requirements
- Push notifications (iOS/Android), SMS, Email
- 100M notifications/day
- User preferences (opt-in/out per channel)
- Template-based messages
- Rate limiting (don't spam users)
Architecture
Trigger Sources ──► Notification Service ──► Priority Queue
(other services) │ │
┌────┴────┐ ┌────────┼────────┐
│ User │ ▼ ▼ ▼
│ Prefs DB│ Push Worker Email Worker SMS Worker
└─────────┘ │ │ │
▼ ▼ ▼
APNs SendGrid Twilio
FCM
Key Decisions
- Decouple: message queue between service and delivery workers
- Idempotency: deduplicate by notification_id (don't send twice)
- Rate limiting: max N notifications per user per hour
- Priority: security alerts > transactional > marketing
- Retry: exponential backoff for failed deliveries
- Analytics: track sent/delivered/opened/clicked