Overview
The article introduces the Domain-Oriented Microservice Architecture (DOMA) developed by Uber to address the complexities associated with traditional microservice architectures. It outlines the motivations for adopting DOMA, its core principles, implementation strategies, and the benefits observed in reducing overall system complexity while maintaining operational flexibility.
What You'll Learn
1
How to implement Domain-Oriented Microservice Architecture at scale
2
Why to consider layer design for managing service dependencies
3
When to adopt extensions for enhancing microservice functionality
Prerequisites & Requirements
- Understanding of microservices and service-oriented architecture
- Experience with distributed systems design(optional)
Key Questions Answered
What are the core principles of Domain-Oriented Microservice Architecture?
The core principles include organizing around collections of related microservices called domains, establishing layer design to manage dependencies, creating gateways for single entry points, and ensuring domains remain agnostic to each other while providing extension points for necessary interactions.
How does Uber manage complexity in their microservice architecture?
Uber manages complexity by implementing DOMA, which organizes microservices into domains and layers, allowing for clear ownership, reduced dependencies, and improved system reliability. This structured approach simplifies the developer experience and enhances operational efficiency.
What benefits has Uber observed from adopting DOMA?
Uber has seen improved developer experience, reduced system complexity, and increased flexibility in managing microservices. The architecture allows for faster feature integration, with some teams reducing integration time from three days to three hours.
What are the motivations behind adopting a microservice architecture at Uber?
Uber adopted microservices to overcome operational issues associated with monolithic architectures, such as availability risks, expensive deployments, and poor separation of concerns. This shift aimed to enhance flexibility and team autonomy as the organization scaled.
Key Statistics & Figures
Number of microservices at Uber
2200
Uber has categorized these microservices into 70 domains, with about 50% already implemented.
Reduction in feature integration time
From three days to three hours
This improvement was achieved by adopting an extension architecture that streamlined the code review and integration process.
Key Actionable Insights
1Consider implementing Domain-Oriented Microservice Architecture to streamline your microservices and reduce complexity.As organizations grow, managing numerous microservices can become cumbersome. DOMA provides a framework that helps in organizing services logically, making it easier to manage dependencies and ownership.
2Utilize layer design to define clear service dependencies and minimize the blast radius of failures.Layer design allows teams to understand which services can interact with others, thus preventing cascading failures and improving system reliability.
3Adopt extension architectures to enhance microservice functionality without altering core service implementations.Extensions allow teams to add custom logic or data to services without modifying the underlying code, promoting flexibility and maintainability.
Common Pitfalls
1
Organizations may prematurely adopt microservices without understanding the associated complexities.
This often leads to increased operational overhead and can hinder feature development. It’s crucial to evaluate whether the benefits of microservices outweigh the complexities for your specific organizational context.
Related Concepts
Microservices Architecture
Domain-driven Design
Service-oriented Architecture