This content is outdated. This version of the Well-Architected Framework is now found at: https://docs.aws.amazon.com/en_us/wellarchitected/2022-03-31/framework/reliability.html

REL 3: How do you design your workload service architecture?

Build highly scalable and reliable workloads using a service-oriented architecture (SOA) or a microservices architecture. Service-oriented architecture (SOA) is the practice of making software components reusable via service interfaces. Microservices architecture goes further to make components smaller and simpler.

Resources

Amazon API Gateway: Configuring a REST API Using OpenAPI
Implementing Microservices on AWS
Microservices on AWS
Microservices - a definition of this new architectural term
Microservice Trade-Offs
Bounded Context (a central pattern in Domain-Driven Design)

Best Practices:

Improvement Plan

Choose how to segment your workload

  • Choose your architecture type based on how you will segment your workload: Choose a service-oriented architecture (SOA) or microservices architecture (or in some cases a monolithic architecture).
  • Build services focused on specific business domains and functionality

  • Design your workload based on your business domains and their respective functionality: Focusing on specific functionality enables you to differentiate the reliability requirements of different services, and target investments more specifically. A concise business problem and having a small team associated with each service also enables easier organizational scaling.
  • Decompose your services into smallest possible components: With microservices architecture you can separate your workload into components with the minimal functionality to enable organizational scaling and agility.
  • Provide service contracts per API

  • Provide service contracts per API: Service contracts are documented agreements between teams on service integration and include a machine-readable API definition, rate limits, and performance expectations.
    Amazon API Gateway: Configuring a REST API Using OpenAPI