Designing and Building Applications that can leverage cloud environment flexibility, scalability and reliability. They function efficiently across distributed infrastructure allowing easy deployment, scaling and management in cloud environments.
How do we get there?
Consider using microservices
decouple components
separation of concerns
API first
API Gateway
GraphQL or Rest APIs
Use cloud native resources
Managed Databases
Managed Storage
Serverless computing: Azure function/AWS lambdas
Design for scalability and load management
Make application stateless (does not store user’s session information)
Design Application so it can be scaled horizontally (add more instances instead of adding more power to an instance)
Automate deployments using CI/CD Pipelines
Automate building, testing and deploying the application
Make use of IaC (Infrastructure as Code)
Implement Resilience and Fault Tolerance
Implement retries and circuit breakers
Use distributed tracing (trace the message from beginning to end)
Security and Compliance
Use of IAM (Identity Access Management) so only authorized users and services can access sensitive data.
Encrypt data at rest and in transit
Implement Logging, Monitoring and Alerting
Optimize for cost efficiency
Autoscaling: adjust resources based on demand
Use spot instances and reserved instances to save on costs
Best Practices
Design For Failure: assume components may fail and ensure application can recover gracefully using redundancy, failover mechanisms and retry strategies.
Use containers to ensure consistency across environments
Embrace Observability: use logging, monitoring and tracing tools to gain insights on the application performance, helping diagnose and resolve issues proactively.