Introduction
https://docs.microsoft.com/en-us/azure/architecture/guide/
Architecture styles
- N-tier application
- Microservices
- Event-driven architecture
- Web-queue-worker
- Big compute
- Big data
Application design principles
Follow these design principles to make your application more scalable, resilient, and manageable.
- Design for self healing. In a distributed system, failures happen. Design your application to be self healing when failures occur.
- Make all things redundant. Build redundancy into your application, to avoid having single points of failure.
- Minimize coordination. Minimize coordination between application services to achieve scalability.
- Design to scale out. Design your application so that it can scale horizontally, adding or removing new instances as demand requires.
- Partition around limits. Use partitioning to work around database, network, and compute limits.
- Design for operations. Design your application so that the operations team has the tools they need.
- Use managed services. When possible, use platform as a service (PaaS) rather than infrastructure as a service (IaaS).
- Use the best data store for the job. Pick the storage technology that is the best fit for your data and how it will be used.
- Design for evolution. All successful applications change over time. An evolutionary design is key for continuous innovation.
- Build for the needs of business. Every design decision must be justified by a business requirement.
Five pillars of software quality
- Cost. Managing costs to maximize the value delivered.
- DevOps. Operations processes that keep a system running in production.
- Resiliency. The ability of a system to recover from failures and continue to function.
- Scalability. The ability of a system to adapt to changes in load.
- Security. Protecting applications and data from threats.
Cloud Design Patterns
Caterogies
- Availability
- Data management
- Design and implementation
- Management and monitoring
- Messaging
- Performance and scalability
- Resiliency
- Security
Patterns
- Ambassador
- Anti-corruption Layer
- Asynchronous Request-Reply
- Backends for Frontends
- Bulkhead
- Cache-Aside
- Choreography
- Circuit Breaker
- Claim Check
- Command and Query Responsibility Segregation (CQRS)
- Compensating Transaction
- Competing Consumers
- Compute Resource Consolidation
- Event Sourcing
- External Configuration Store
- Federated Identity
- Gatekeeper
- Gateway Aggregation
- Gateway Offloading
- Gateway Routing
- Health Endpoint Monitoring
- Index Table
- Leader Election
- Materialized View
- Pipes and Filters
- Priority Queue
- Publisher/Subscriber
- Queue-Based Load Leveling
- Retry
- Scheduler Agent Supervisor
- Sequential Convoy
- Sharding
- Sidecar
- Static Content Hosting
- Strangler
- Throttling
- Valet Key
Best practices for Cloud application
- API design
- API implementation
- Autoscaling
- Background jobs
- Caching
- Content Delivery Network
- Data partitioning
- Data partitioning strategies (by service)
- Deployment stamp
- Monitoring and diagnostics
- Retry guidance for specific services
- Transient fault handling
One thought on “[Azure] Architecting Cloud Applications”