- Overview
- Architecture
- Project Structure
- Core Services
- Infrastructure
- Observability
- Getting Started
- Documentation
A highly scalable, distributed notification system built with microservices architecture. This system handles multi-channel notifications (email, push, SMS) with high throughput, reliability, and observability.
- π High Performance - Handles thousands of notifications per second
- π Multi-Channel Support - Email, Push notifications, and more
- π‘οΈ Resilience - Built-in circuit breakers, retries, and idempotency
- π Full Observability - Metrics, logs, and distributed tracing
- π Event-Driven - RabbitMQ-based message streaming
- π³ Container-Ready - Fully dockerized for easy deployment
This system follows a microservices architecture pattern with event-driven communication, leveraging RabbitMQ for reliable message streaming and Redis for caching and session management.
notification-system/
β
βββ π api_gateway/ # API Gateway & routing layer
β
βββ βοΈ services/
β βββ user_service/ # User management & authentication
β βββ template_service/ # Notification template management
β βββ email_service/ # Email notification handler
β βββ push_service/ # Push notification handler
β
βββ π’ infra/
β βββ rabbitmq/ # Message broker configuration
β βββ redis/ # Caching & session store
β βββ postgres/ # Primary database
β βββ nginx/ # Load balancer & reverse proxy
β
βββ π§ shared/
β βββ libs/
β βββ circuit_breaker/ # Circuit breaker pattern
β βββ idempotency/ # Idempotency handling
β βββ retry/ # Retry logic & backoff
β βββ logging/ # Centralized logging utilities
β
βββ π observability/
β βββ prometheus/ # Metrics collection
β βββ grafana/ # Metrics visualization
β βββ loki/ # Log aggregation
β βββ jaeger/ # Distributed tracing
β βββ alerting/ # Alert management
β
βββ π deployments/
β βββ docker/ # Docker compose configurations
β βββ staging/ # Staging environment configs
β βββ production/ # Production environment configs
β
βββ π .github/
β βββ workflows/ # CI/CD pipelines
β
βββ π docs/
βββ architecture_diagram/ # System architecture diagrams
βββ openapi_specs/ # API specifications
βββ readmes/ # Additional documentation
| Service | Description | Port |
|---|---|---|
| API Gateway | Entry point for all client requests, handles routing and authentication | 8000 |
| User Service | Manages user accounts, preferences, and authentication | 8001 |
| Template Service | Handles notification templates and personalization | 8002 |
| Email Service | Processes and sends email notifications | 8003 |
| Push Service | Handles push notifications to mobile devices | 8004 |
- RabbitMQ - Reliable message broker for asynchronous communication
- PostgreSQL - Primary relational database
- Redis - High-performance caching and session management
- Nginx - Reverse proxy and load balancer
| Tool | Purpose |
|---|---|
| Prometheus | Metrics collection and alerting |
| Grafana | Metrics visualization and dashboards |
| Loki | Log aggregation and querying |
| Jaeger | Distributed request tracing |
- Request throughput and latency
- Service health and uptime
- Queue depths and processing rates
- Error rates and types
- Resource utilization (CPU, memory, disk)
- Docker & Docker Compose
- Node.js (v18+) or Python (v3.10+)
- RabbitMQ
- PostgreSQL
- Redis
# Clone the repository
git clone https://github.com/brainox/hng-group55-distributed-notification-system.git
cd hng-group55-distributed-notification-system
# Start infrastructure services
docker-compose -f deployments/docker/docker-compose.yml up -d
# Start individual services (example)
cd services/email_service
npm install && npm startEach service requires its own environment configuration. Copy the example env files:
cp .env.example .envUpdate the .env files with your specific configuration values.
Contributions are welcome! Please read our contributing guidelines before submitting pull requests.
This project is licensed under the MIT License - see the LICENSE file for details.
HNG Group 55 - Building scalable notification systems
Made with β€οΈ by HNG Group 55