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 style | Dependency management | Domain type |
---|---|---|
N-tier | Horizontal tiers divided by subnet | Traditional business domain. Frequency of updates is low. |
Web-Queue-Worker | Front and backend jobs, decoupled by async messaging. | Relatively simple domain with some resource intensive tasks. |
Microservices | Vertically (functionally) decomposed services that call each other through APIs. | Complicated domain. Frequent updates. |
Event-driven architecture | Producer/consumer. Independent view per sub-system. | IoT and real-time systems |
Big data | Divide a huge dataset into small chunks. Parallel processing on local datasets. | Batch and real-time data analysis. Predictive analysis using ML. |
Big compute | Data 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
- Busy Database
- Busy Front End
- Chatty I/O
- Extraneous Fetching
- Improper Instantiation
- Monolithic Persistence
- No Caching
- Synchronous I/O2. Design Patterns
- Ambassador
- Anti-corruption Layer
- Availability
- Backends for Frontends
- Bulkhead
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
- Cache-Aside
- Choreography
- Circuit Breaker
- Claim Check
- Command and Query Responsibility Segregation (CQRS)
- Compensating Transaction
- Competing Consumers
- Compute Resource Consolidation
- Data management
- Design and implementation
- Event Sourcing
- External Configuration Store
- Federated Identity
- Gatekeeper
- Gateway Aggregation
- Gateway Offloading
- Gateway Routing
- Health Endpoint Monitoring
- Index Table
- Leader Election
- Management and monitoring
- Materialized View
- Messaging
- Performance and scalability
- Pipes and Filters
- Priority Queue
- Publisher/Subscriber
- Queue-Based Load Leveling
- Resiliency
- Retry
- Scheduler Agent Supervisor
- Security
- Sharding
- Sidecar
- Static Content Hosting
- Strangler
- Throttling
- Valet Key
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
- https://docs.microsoft.com/en-us/azure/architecture/guide
- https://github.com/MicrosoftDocs/architecture-center
- https://thenewstack.io/primer-understanding-software-and-system-architecture
- https://www.freecodecamp.org/news/systems-design-for-interviews
- Cloud Architecture Guidance and Topologies | Cloud Architecture Center | Google Cloud