I like to design applications for more scale, resilience, and manageability. Here are some things to keep in mind:
- Make your applications self-healing as much as possible:
- Design for failures and handle them
- Log and monitor
- Build for scaling out:
- Offload resource intensive tasks
- Design for scale in
- Identify bottlenecks
- Partition around resource limits:
- Understand limits and use partitioning to get around them; you can find more information at the following link: https://docs.microsoft.com/en-us/azure/azure-subscription-service-limits
- Design with DevOps in mind:
- Monitoring
- Deploying
- Escalation
- Security/auditing
- Make all thing observable
- Treat configuration as code
- Design for evolution:
- Use loose coupling
- Use asynchronous development patterns whenever possible
- Use interfaces
- Design for testing
- Deploy services independently
There are a magnitude of design patterns to choose from. If you're finding it hard to decide which one to use, you can review them at https://docs.microsoft...