Architecture, Cloud

[Azure] Architecting Cloud Applications

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