Architecture, Cloud

[Azure] Architecting Cloud Applications


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


  • Availability
  • Data management
  • Design and implementation
  • Management and monitoring
  • Messaging
  • Performance and scalability
  • Resiliency
  • Security


  • 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
Architecture, Cloud, Methodology, Microservices

What Is Cloud Native, Anyway?

Sam Newman, author of Building Microservices, opened the day’s talks by tackling the question directly. He reviewed the different ways that people define cloud native and unpicked whether they were useful.

“It’s a buzz-worthy term that has no real, good, formal definition,” says Sam. “A lot of people conflate many things in the term cloud native. In my talk, I came back down to the sub-characteristics we commonly talk about for cloud-based applications: they’ve got to be built for scale, there must be some concepts of fault tolerance, and they need to have high degrees of automation”.

While there are attempts to build vendor-agnostic, cloud native application platforms, even they are tied to a PaaS or “underlying container orchestrator”. So to be cloud native means to build for the specifics of your chosen platform. Whether it’s AWS, GCE or a private Kubernetes cluster, each has its own peculiarities.

Cloud native comes down to three things:

  • Build microservices: before anything else, move to microservices, as they’ll have the biggest impact
  • Use existing services: don’t re-implement anything that is available as a cloud-based service
  • Automate everything: automated testing, continuous integration, continuous delivery

I think it’s probably an overloaded term,” says Nicki, “For me, cloud native is really about making sure that the way you approach building your applications makes first class citizens out of being able to efficiently utilize your platform to scale, distribute and manage your systems in an automated way. At the moment, that’s predominantly cloud based“. That’s Nicki Watt’s take


Architecture, Cloud

Cloud Native Application (CNA)

Cloud Native App là gì?

Cloud Native App (CNA) là một “buzz word”. CNA là một app “thuần” (từ này hơi sloppy :D) cloud. Dưới góc nhìn high level, nó là app được thiết kế để chạy trên môi trường cloud. Nhìn rộng ra thì nó có thể chạy được trên nhiều môi trường cloud, thậm chí có thể được triển khai theo kiến trúc phân tán (distributed) trên nhiều môi trường cloud để tận dụng tối đa các nguồn lực mà cloud mang lại.

Các bạn có thể tham khảo các thông tin về CNA theo website dưới đây:

Dưới đây là loạt bài viết về Cloud Native Application ở trang, các bạn có thể vào đó và đọc chi tiết 🙂