Skip to main content

Architecture Guide

Application Architecture Guide

  • Architecture Styles
    • Big compute
    • Big data

Big Data and Big Compute are specialized architecture styles for workloads that fit certain specific profiles. Big data divides a very large dataset into chunks, performing parallel processing across the entire set, for analysis and reporting. Big compute, also called high-performance computing (HPC), makes parallel computations across a large number (thousands) of cores. Domains include simulations, modeling, and 3-D rendering.

  • Event-driven architecture
  • Microservices
  • N-tier application
  • Web-queue-worker

For a purely PaaS solution, consider a Web-Queue-Worker architecture. In this style, the application has a web front end that handles HTTP requests and a back-end worker that performs CPU-intensive tasks or long-running operations. The front end communicates to the worker through an asynchronous message queue.

Web-queue-worker is suitable for relatively simple domains with some resource-intensive tasks. Like N-tier, the architecture is easy to understand. The use of managed services simplifies deployment and operations. But with complex domains, it can be hard to manage dependencies. The front end and the worker can easily become large, monolithic components that are hard to maintain and update. As with N-tier, this can reduce the frequency of updates and limit innovation.

Architecture styleDependency managementDomain type
N-tierHorizontal tiers divided by subnetTraditional business domain. Frequency of updates is low.
Web-Queue-WorkerFront and backend jobs, decoupled by async messaging.Relatively simple domain with some resource intensive tasks.
MicroservicesVertically (functionally) decomposed services that call each other through APIs.Complicated domain. Frequent updates.
Event-driven architectureProducer/consumer. Independent view per sub-system.IoT and real-time systems
Big dataDivide a huge dataset into small chunks. Parallel processing on local datasets.Batch and real-time data analysis. Predictive analysis using ML.
Big computeData allocation to thousands of cores.Compute intensive domains such as simulation.

Design Principles

  • Design for self-healing
  • Make all things redundant
  • Minimize coordination
  • Design to scale out
  • Partition around limits
  • Design for operations
  • Use managed services
  • Use the best data store for the job
  • Design for evolution
  • Build for the needs of business

Best Practices

  • API Design
  • API Implementation
  • Autoscaling
  • Background jobs
  • Caching
  • Content Delivery Network
  • Data Partitioning
  • Data Partitioning strategies (by service)
  • Monitoring and diagnostics
  • Naming Conventions
  • Retry Guidance for Specific services
  • Transient fault handling

Performance Tuning

  • Scenario 1 - Distributed Transactions
  • Scenario 2 - Multiple backend services
  • Scenario 3 - Event Streaming

Performance Antipatterns

The Bulkhead pattern is a type of application design that is tolerant of failure. In a bulkhead architecture, elements of an application are isolated into pools so that if one fails, the others will continue to function. It's named after the sectioned partitions (bulkheads) of a ship's hull. If the hull of a ship is compromised, only the damaged section fills with water, which prevents the ship from sinking.

https://www.youtube.com/watch?v=R2FT5edyKOg

Pillars of Software Quality

  • Reliability
  • Resiliency
  • Security
  • Scalability

Technologies

  • AI and machine learning
  • Blockchain
  • Data architectures
  • DevOps
  • Enterprise integration
  • High performance computing (HPC)
  • Identity
  • Internet of Things (IoT)
  • Microservices
  • Networking
  • Serverless applications
  • VM workloads
  • Web apps

Cloud Adoption Framework

Others