Problem Statement
Modern e-commerce platforms must handle millions of transactions, provide real-time inventory updates, process payments reliably, and scale horizontally during peak demand. Traditional monolithic architectures struggle with these requirements.
Challenges:
- High Availability: 99.99% uptime requirement
- Scalability: Handle 10,000+ requests per second
- Consistency: Distributed transactions across services
- Observability: Track requests across multiple services
- Resilience: Graceful degradation when services fail
- Performance: Sub-100ms response times for critical paths
This project implements a production-ready microservices platform using all the patterns covered in this section.
Requirements
Functional Requirements
-
Product Management
- Browse product catalog with pagination
- Search products by name, category, price range
- View product details with real-time inventory
- Cache frequently accessed products
-
Order Processing
- Create orders with multiple items
- Validate inventory availability
- Process payments with retry logic
- Implement distributed transactions
- Send order confirmation notifications
-
Payment Processing
- Integrate with payment gateway
- Handle idempotent payment requests
- Implement circuit breaker for external calls
- Support payment retry with exponential backoff
-
Notifications
- Async event-driven notifications
- Email/SMS notifications
- Delivery guarantees with Kafka
Non-Functional Requirements
-
Performance
- API response time: < 100ms
- Product search: < 50ms
- Order processing: < 500ms end-to-end
-
Scalability
- Horizontal scaling for all services
- Auto-scaling based on CPU/memory
- Handle 10,000+ concurrent connections
-
Reliability
- 99.99% uptime SLA
- Zero message loss
- Automatic failover and recovery
-
Observability
- Distributed tracing across all services
- Metrics collection
- Centralized logging
- Real-time dashboards
Constraints
- Use Go 1.21+
- gRPC for inter-service communication
- REST API for external clients
- Kafka for event streaming
- Redis for caching
- PostgreSQL for persistence
- Kubernetes for orchestration
Design Considerations
System Architecture Overview
The platform consists of five core microservices orchestrated through an API Gateway:
API Gateway: Single entry point providing REST APIs, authentication, rate limiting, and request routing to backend services.
Product Service: Manages product catalog, inventory, and search functionality with Redis caching for frequently accessed products.
Order Service: Orchestrates order creation using the Saga pattern to coordinate distributed transactions across Product and Payment services.
Payment Service: Processes payments through external gateway with circuit breaker pattern for resilience and idempotency for reliability.
Notification Service: Consumes Kafka events and sends order confirmations via email/SMS.
Key Design Patterns
- Microservices Architecture: Services decomposed by business capability for independent scaling and deployment
- Saga Pattern: Orchestration-based distributed transactions with compensating actions for rollback
- Circuit Breaker: Prevents cascading failures when external services are unavailable
- API Gateway: Aggregates backend services and handles cross-cutting concerns
- Event-Driven Architecture: Asynchronous communication via Kafka for loose coupling
- CQRS Lite: Read-heavy operations use caching while writes go to primary database
Technology Stack Rationale
- gRPC: High-performance inter-service communication with strong typing
- Kafka: Reliable event streaming with at-least-once delivery guarantees
- Redis: In-memory caching for sub-millisecond read latency
- PostgreSQL: ACID transactions for critical business data
- Prometheus + Jaeger + Grafana: Complete observability stack for metrics, tracing, and visualization
Acceptance Criteria
Your implementation is complete when it demonstrates:
Core Functionality:
- All five services deploy successfully and pass health checks
- REST API accepts product searches and returns results < 50ms
- Complete order flow executes end-to-end
- Saga rollback works when payment fails
- Circuit breaker opens after consecutive payment gateway failures
- Rate limiter blocks requests exceeding configured limits
Observability:
- Distributed traces visible in Jaeger showing complete request flow across services
- Prometheus metrics exposed on all services with custom business metrics
- Grafana dashboards display service health, request rates, latencies, and error rates
- Logs structured and include trace IDs for correlation
Reliability & Performance:
- Services auto-scale based on CPU/memory using Horizontal Pod Autoscaler
- System handles 10,000 requests/second in load tests
- P95 latency < 100ms for order creation
- Zero message loss in Kafka event delivery
- Idempotent payment processing
Testing:
- Unit tests with >70% code coverage
- Integration tests verify service-to-service communication
- End-to-end test creates order and verifies notification delivery
- Load tests with k6 demonstrate performance requirements
Deployment:
- Docker Compose starts all infrastructure and services locally
- Kubernetes manifests deploy to local cluster
- All ConfigMaps and Secrets properly configured
- Services discoverable via Kubernetes DNS
Usage Examples
1. Start Local Development Environment
1# Start all infrastructure services
2docker-compose up -d postgres redis kafka jaeger prometheus grafana
3
4# Run database migrations
5make migrate-up
6
7# Seed test data
8make seed
9
10# Start all services
11make run-all
2. Create a Product
1# REST API
2curl -X POST http://localhost:8080/api/v1/products \
3 -H "Content-Type: application/json" \
4 -H "Authorization: Bearer ${TOKEN}" \
5 -d '{
6 "name": "Wireless Mouse",
7 "description": "Ergonomic wireless mouse with 3200 DPI",
8 "price": 29.99,
9 "sku": "MOUSE-001",
10 "inventory": 100,
11 "category": "Electronics"
12 }'
13
14# Response
15{
16 "id": "prod_1a2b3c4d",
17 "name": "Wireless Mouse",
18 "price": 29.99,
19 "sku": "MOUSE-001",
20 "inventory": 100,
21 "created_at": "2025-10-21T10:30:00Z"
22}
3. Search Products
1# Search with filters
2curl "http://localhost:8080/api/v1/products/search?q=mouse&category=Electronics&min_price=20&max_price=50&limit=10"
3
4# Response
5{
6 "products": [
7 {
8 "id": "prod_1a2b3c4d",
9 "name": "Wireless Mouse",
10 "price": 29.99,
11 "inventory": 100
12 }
13 ],
14 "total": 1,
15 "page": 1,
16 "cache_hit": true
17}
4. Create an Order
1# Create order with multiple items
2curl -X POST http://localhost:8080/api/v1/orders \
3 -H "Content-Type: application/json" \
4 -H "Authorization: Bearer ${TOKEN}" \
5 -d '{
6 "user_id": "user_123",
7 "items": [
8 {
9 "product_id": "prod_1a2b3c4d",
10 "quantity": 2
11 },
12 {
13 "product_id": "prod_5e6f7g8h",
14 "quantity": 1
15 }
16 ],
17 "shipping_address": {
18 "street": "123 Main St",
19 "city": "San Francisco",
20 "state": "CA",
21 "zip": "94102"
22 },
23 "payment_method": "credit_card",
24 "idempotency_key": "order_2025_abc123"
25 }'
26
27# Response
28{
29 "order_id": "ord_xyz789",
30 "status": "pending",
31 "total_amount": 89.97,
32 "created_at": "2025-10-21T10:35:00Z",
33 "saga_id": "saga_123"
34}
35
36# Behind the scenes:
37# 1. Validate inventory
38# 2. Reserve inventory
39# 3. Process payment
40# 4. Confirm order
41# 5. Publish order.created event
42# 6. Send notification
5. Check Order Status
1curl http://localhost:8080/api/v1/orders/ord_xyz789 \
2 -H "Authorization: Bearer ${TOKEN}"
3
4# Response
5{
6 "order_id": "ord_xyz789",
7 "status": "confirmed",
8 "user_id": "user_123",
9 "items": [...],
10 "total_amount": 89.97,
11 "payment_status": "completed",
12 "payment_id": "pay_456",
13 "tracking_number": "TRK789012",
14 "created_at": "2025-10-21T10:35:00Z",
15 "confirmed_at": "2025-10-21T10:35:02Z"
16}
6. Monitor System Health
1# Prometheus metrics
2curl http://localhost:9091/metrics | grep -E "(request_duration|request_total|grpc_)"
3
4# Example metrics:
5# http_request_duration_seconds_bucket{method="POST",endpoint="/orders",le="0.1"} 450
6# http_request_total{method="POST",endpoint="/orders",status="200"} 1000
7# grpc_server_handled_total{service="product.v1.ProductService",method="GetProduct",code="OK"} 5000
8# redis_cache_hits_total{service="product"} 3500
9# redis_cache_misses_total{service="product"} 500
7. View Distributed Traces
Access Jaeger UI at http://localhost:16686:
Trace ID: 1a2b3c4d5e6f7g8h
Duration: 145ms
Spans:
├─ gateway: POST /api/v1/orders
│ ├─ order-service: CreateOrder gRPC
│ │ ├─ product-service: CheckInventory gRPC
│ │ ├─ product-service: ReserveInventory gRPC
│ │ ├─ payment-service: ProcessPayment gRPC
│ │ │ └─ payment-gateway: HTTP POST
│ │ ├─ postgres: INSERT order
│ │ └─ kafka: Publish event
│ └─ response serialization
8. Grafana Dashboards
Access Grafana at http://localhost:3000:
Overview Dashboard:
- Total requests per second
- Average response time
- Error rate percentage
- Active connections
- CPU and memory usage
Service Dashboard:
- Per-service request rates
- gRPC method latencies
- Cache hit rates
- Database query times
- Kafka lag
Business Dashboard:
- Orders created per hour
- Revenue per hour
- Top selling products
- Average order value
- Payment success rate
9. Load Testing
1# Run k6 load test
2k6 run tests/load/k6/orders.js
3
4# Example output:
5# scenarios: 1 scenario, 1000 max VUs, 5m30s max duration
6# ✓ status was 200
7# ✓ order created successfully
8#
9# checks.........................: 100.00% ✓ 120000 ✗ 0
10# http_req_duration..............: avg=45ms min=10ms med=40ms max=250ms p(95)=85ms p(99)=150ms
11# http_reqs......................: 120000 2000/s
12# iteration_duration.............: avg=500ms min=450ms med=495ms max=750ms
10. Kubernetes Deployment
1# Deploy to Kubernetes
2kubectl apply -f deployments/kubernetes/namespace.yaml
3kubectl apply -f deployments/kubernetes/configmaps/
4kubectl apply -f deployments/kubernetes/secrets/
5kubectl apply -f deployments/kubernetes/deployments/
6kubectl apply -f deployments/kubernetes/services/
7kubectl apply -f deployments/kubernetes/hpa/
8kubectl apply -f deployments/kubernetes/ingress/
9
10# Check deployments
11kubectl get pods -n ecommerce
12# NAME READY STATUS RESTARTS AGE
13# gateway-7d8f9c5b4-abc12 1/1 Running 0 2m
14# gateway-7d8f9c5b4-def34 1/1 Running 0 2m
15# product-6c7d8e9f0-ghi56 1/1 Running 0 2m
16# product-6c7d8e9f0-jkl78 1/1 Running 0 2m
17# order-5b6c7d8e9-mno90 1/1 Running 0 2m
18# payment-4a5b6c7d8-pqr12 1/1 Running 0 2m
19# notification-3z4y5x6w7-stu34 1/1 Running 0 2m
20
21# Check HPA status
22kubectl get hpa -n ecommerce
23# NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS
24# gateway Deployment/gateway 45%/70% 2 10 2
25# product Deployment/product 30%/70% 2 10 2
26# order Deployment/order 55%/70% 2 10 3
Key Takeaways
Architecture Patterns
-
Microservices Architecture
- Service decomposition by business capability
- Independent deployment and scaling
- Technology diversity where beneficial
-
Saga Pattern for Distributed Transactions
- Orchestration-based saga implementation
- Compensating transactions for rollback
- Idempotency for reliability
-
Circuit Breaker for Resilience
- Prevent cascading failures
- Automatic recovery detection
- Graceful degradation
-
API Gateway Pattern
- Single entry point for clients
- Request aggregation and transformation
- Cross-cutting concerns
Production Engineering Practices
-
Observability
- Distributed tracing with Jaeger
- Metrics collection with Prometheus
- Visualization with Grafana
- Structured logging
-
Scalability
- Horizontal pod autoscaling
- Stateless service design
- Caching for performance
- Async processing with Kafka
-
Reliability
- Health checks and readiness probes
- Graceful shutdown
- Circuit breakers
- Retry mechanisms
-
Security
- JWT authentication
- Rate limiting
- Secrets management
- Network policies
Cloud-Native Principles
-
Container-First Design
- Docker for packaging
- Multi-stage builds for optimization
- Non-root users for security
-
Kubernetes Orchestration
- Declarative deployments
- Service discovery
- ConfigMaps and Secrets
- Ingress for routing
-
DevOps Integration
- Infrastructure as Code
- Automated testing
- CI/CD ready
- Monitoring and alerting
Next Steps
After completing this project, you have hands-on experience with:
- Microservices architecture
- gRPC and REST APIs
- Event-driven systems with Kafka
- Distributed transactions
- Circuit breakers and resilience
- Kubernetes deployment
- Observability stack
Recommended Learning Path
-
Enhance Observability
- Add OpenTelemetry for vendor-neutral tracing
- Implement distributed logging with ELK stack
- Create custom SLIs and SLOs
-
Improve Resilience
- Add bulkhead pattern for resource isolation
- Implement retry with exponential backoff
- Add chaos engineering tests
-
Scale Further
- Implement CQRS pattern
- Add event sourcing
- Deploy to cloud
-
Advanced Topics
- Service mesh
- GitOps with ArgoCD
- Advanced Kubernetes patterns
Move to Capstone Projects
Ready for expert-level challenges? Explore the Capstone Projects section:
- Cloud Native Application Platform: Build a complete PaaS
- Distributed Database System: Implement Raft consensus
- Real-Time Analytics Engine: Stream processing at scale
These projects build on everything you've learned and push you to expert-level distributed systems engineering.
Download Complete Solution
Download the complete implementation with full source code, tests, and deployment configurations:
Package Contents:
- All 5 microservices with complete implementations
- Protobuf definitions and generated gRPC code
- Kubernetes manifests for production deployment
- Docker Compose for local development
- Database migrations and seed data
- Monitoring dashboards
- Load tests
- Comprehensive README with detailed setup instructions and implementation guide
- ~5,500 lines of production-ready Go code
The README in the download package contains:
- Detailed architecture diagrams and explanations
- Complete project structure breakdown
- Step-by-step implementation guide
- Development and deployment instructions
- Testing strategies and examples
- Troubleshooting guide
Congratulations! You've completed the Production Engineering section by building a production-ready cloud-native e-commerce platform. You now have the skills to architect, build, and deploy enterprise-grade microservices systems.