General info
Theory to practice ratio: 95% practice
Duration: 3 days
Goal
Splitting a system into multiple applications poses multiple new challenges. This training aims to:
- Acquaint attendees with distributed systems design patterns
- Show good practices and how to integrate them into the application on an architectural level
- Highlight what, when, and how will go wrong. Also how to detect that it did.
- Build awareness of how to use infrastructure solutions for mitigating problems.
Program
- Introduction
- Synchronus patterns This part of the training is done using Docker Compose and Kubernetes.
- Retry (normal, exponential retry, jitter)
- Timeout (external and internal)
- Fallback
- Caching
- Circuit breaker
- Multi-server circuit breaker
- Service discovery using
- Health checks vs. liveness checks
- API gateway
- Role of API Gateway
- Request aggregation
- Security
- Authentication
- Internal security
- Role of an API gateway
- JWT tokens
- Symmetric keys
- Asymmetric keys
- Token validation
- Hardening security
- Key/secret management
- Risks and issues
- Token encryption
- Asynsynchronus patterns This part of the training is done using Rabbit MQ and Azure Service Bus.
- Request/response with messages
- Publish/subscribe
- Command vs. event vs. message
- Role of time and message scheduling
- Sagas
- Orchestration
- Choreography
- Routing Slip
- Problems with message architecture and ways to mitigate it
- Message deduplication
- Dead letter queue
- More than one delivery
- Message order
- Lack of transactionality
- Zombie messages
- Message versioning
- Data change between message send and message delivery
- Performance
- Large messages
- Parallel message processing
- No guarantee of delivery
- Message denial(non-technical failure)
- Evaluating system consistency
- Operations
- Tracing
- Over Http calls
- Over Messages
- Logging
- Deployment
- Tracing
Materials
After the training all attendees get a before and after zip package with all excercises done during the workshop.