Search for Well Architected Advice
Build services focused on specific business domains and functionality
Designing services with a focus on specific business domains is crucial for building reliable workloads. By aligning services to distinct business functions, teams are better positioned to manage their reliability requirements independently, enabling improved failover and recovery strategies that cater to the unique demands of each domain.
Best Practices
Establish Bounded Contexts
Use Domain Models
Questions to ask your team
- How do you define the boundaries of your services based on business domains?
- What processes are in place to ensure that service functionality aligns with business needs?
- How do you isolate services to handle failures independently without affecting other services?
- Can you provide examples where bounded contexts have helped in managing service boundaries?
- How do you ensure your teams understand the reliability requirements for each service they develop?
- What metrics do you track to measure the reliability of your services focused on specific business domains?
Who should be doing this?
Solution Architect
- Design the overall architecture for the service-oriented or microservices architecture.
- Ensure services are aligned with business domains and functionality.
- Define service boundaries based on domain models and bounded contexts.
- Collaborate with various teams to identify and integrate reliability requirements.
DevOps Engineer
- Implement CI/CD pipelines for seamless service deployment.
- Monitor service performance and reliability in production.
- Set up automated recovery strategies for service failures.
- Work on infrastructure as code to ensure consistent environment setups.
Software Developer
- Develop individual services according to defined business functions.
- Implement error handling and retry mechanisms in service logic.
- Participate in coding standards and best practices to enhance service reliability.
- Document service interfaces and dependencies clearly.
Quality Assurance Engineer
- Design and execute tests focused on reliability and performance of services.
- Identify and report potential failure points in the architecture.
- Collaborate with developers to ensure the reliability requirements are met.
- Perform load and stress testing to evaluate service performance under various conditions.
Product Owner
- Define the business needs that services should address.
- Prioritize features and reliability requirements based on business value.
- Facilitate communication between stakeholders and the development team regarding service functionality.
- Gather feedback from users to continually enhance service quality.
What evidence shows this is happening in your organization?
- Service Design Guidelines: A comprehensive document that outlines principles for designing services focused on specific business domains, including examples of bounded contexts and domain models.
- Microservices Architecture Diagram: A visual representation of the microservices architecture illustrating service boundaries aligned with business domains and their interactions, demonstrating how services are isolated for reliability.
- Reliability Requirements Checklist: A checklist to ensure that each service is designed with its own reliability requirements based on business functions, helping teams assess the failure handling mechanisms.
- Failure Handling Playbook: A guide that provides procedures and strategies for managing service failures within specific domains, allowing teams to respond effectively to incidents.
- Service Performance Dashboard: A dashboard that tracks the performance and reliability metrics of services within their business domains, enabling teams to monitor service health and take corrective actions as necessary.
Cloud Services
AWS
- Amazon ECS: Amazon ECS allows you to run and manage Docker containers, which can fit into a microservices architecture by deploying individual services based on business domains.
- AWS Lambda: AWS Lambda lets you run code without provisioning or managing servers, supporting microservices based on specific functions and quick iterations.
- Amazon API Gateway: Amazon API Gateway helps create, publish, maintain, monitor, and secure APIs at scale, facilitating communication between different microservices.
- Amazon RDS: Amazon RDS simplifies the management of relational databases, providing reliability and scalability for data used across services.
Azure
- Azure Kubernetes Service (AKS): AKS simplifies the deployment and management of containerized applications, enabling a microservices approach with scalable workloads.
- Azure Functions: Azure Functions allows the execution of event-driven code without explicitly managing infrastructure, supporting microservices by isolating specific functionalities.
- Azure API Management: Azure API Management helps you transform and publish APIs, facilitating service communication and ensuring reliability.
- Azure SQL Database: Azure SQL Database offers a managed relational database service that enables reliable data management for multiple services.
Google Cloud Platform
- Google Kubernetes Engine (GKE): GKE provides a managed Kubernetes environment to deploy, manage, and scale containerized applications, supporting microservices architecture.
- Cloud Functions: Cloud Functions allows you to run code in response to events, perfect for building microservices that execute specific functions on demand.
- Apigee API Management: Apigee enables full lifecycle API management, allowing services to communicate efficiently and reliably through a well-defined interface.
- Cloud SQL: Cloud SQL offers fully managed SQL database services, ensuring reliability and scalability for data shared across microservices.
Question: How do you design your workload service architecture?
Pillar: Reliability (Code: REL)