Reducing insider trading in a microservice architecture
You are receiving this email because you subscribed to microservices.io
In November, I'll be teaching public workshops in Berlin and Milan. I hope you will enroll.
My service collaboration patterns online bootcamp is available at a discount. Use coupon CCMHVSFB to sign up for $95 (valid until November 8th, 2024). There are deeper discounts for buying multiple seats.
Reducing insider trading in a microservice architecture
During a workshop I taught this week, we had an interesting discussion about a common microservice architecture design problem:
The
doSomething()
operation, which is implemented byFoo Service
, needs to get data from numerous services includingBar Service
andBaz Service
in order to respond to a request. Getting the data via their APIs seems lot of work. Why can’t it just query the databases directly?
Here’s my answer:
Read on to learn more.
Services must be loosely design-time coupled
A defining characteristic of the microservice architecture is that services are loosely design-time coupled. Consequently, services should not share their databases with other services since it results in type design-time coupling. Service must, instead, collaborate via their APIs.
APIs don’t guarantee loose design-time coupling
You might be tempted to think that as long as services communicate via their APIs, they are loosely design-time coupled.
Foo Service
could, for example, query each of the other services: ie. invoke getBarInfo()
, getBazInfo()
, etc.
Alternatively, it could use the CQRS pattern
The problem with both of these approaches is that they don’t guarantee loose design-time coupling.
A service API might simply expose its database schema through its API.
It’s insider trading
One service retrieving data from another service can sometimes resemble the Inside Trading code smell. The service behaves like a class (or modules) that accesses the internal data of another class (or module). And, just like Inside Trading between classes, it can lead to a tightly coupled design that is difficult to understand, maintain, and evolve.
Design services to look like icebergs
A service should resemble an iceberg.
Its API should encapsulate the implementation details.
We can increase encapsulation in the above example by refactoring the doSomething()
operation and moving the logic that uses some other service’s data from the Foo Service
into the other service.
The doSomething()
operation then invokes an operation on each of the services that executes the service-specific logic.
It would, for example, invoke doSomethingBar()
on the Bar Service
and doSomethingBaz()
on the Baz Service
.
Such an approach can significantly increase encapsulation and reduce design-time coupling.
Applying the idea to takeout burritos
In my QConPlus 2021: Takeout burritos and minimizing design-time coupling in a microservice architecture talk, I applied this idea to the Order Service
and Restaurant Service
example.
Originally, the Order Service
’s createOrder()
operation retrieving a restaurant’s menu to validate the line items and compute the Order
’s subtotal.
The drawback of this approach is that the Order Service
is tightly coupled to the Restaurant Service
: any change to the structure of MenuItem
in the Restaurant Service
would require a lockstep change in the Order Service
.
The solution was to reduce design-time coupling by moving responsibility for knowing the OrderLineItems
and computing the Order
’s subtotal into the Restaurant Service
.
The Restaurant Service
simply passed the Order
subtotal to the Order Service
.
Need help with accelerating software delivery?
I’m available to help your organization improve agility and competitiveness through better software architecture: training workshops, architecture reviews, etc.
Learn more about how I can help
Older messages
Reminder: The evolution of the Microservice Architecture pattern language
Thursday, October 31, 2024
You are receiving this email because you subscribed to microservices.io In November, I'll be teaching public workshops in Berlin and Milan. I hope you will enroll. My service collaboration patterns
The evolution of the Microservice Architecture pattern language
Tuesday, October 29, 2024
You are receiving this email because you subscribed to microservices.io In November, I'll be teaching public workshops in Berlin and Milan. I hope you will enroll. My service collaboration patterns
Reminder: Architectural patterns for modular monoliths that enable fast flow
Thursday, September 12, 2024
You are receiving this email because you subscribed to microservices.io This month, I'm teaching an online public workshop Architecting for fast, sustainable flow: enabling DevOps and Team
Architectural patterns for modular monoliths that enable fast flow
Tuesday, September 10, 2024
You are receiving this email because you subscribed to microservices.io This month, I'm teaching an online public workshop Architecting for fast, sustainable flow: enabling DevOps and Team
Reminder: Architecting microservices for fast, sustainable flow
Thursday, September 5, 2024
You are receiving this email because you subscribed to microservices.io This month, I'm teaching an online public workshop Architecting for fast, sustainable flow: enabling DevOps and Team
You Might Also Like
Daily Coding Problem: Problem #1647 [Medium]
Tuesday, December 24, 2024
Daily Coding Problem Good morning! Here's your coding interview problem for today. This problem was asked by Square. In front of you is a row of N coins, with values v 1 , v 1 , ..., v n . You are
Sentiment Analysis, Topological Sort, Web Security, and More
Tuesday, December 24, 2024
Exploring Modern Sentiment Analysis Approaches in Python #661 – DECEMBER 24, 2024 VIEW IN BROWSER The PyCoder's Weekly Logo Exploring Modern Sentiment Analysis Approaches in Python What are the
🤫 Do Not Disturb Mode Is My Secret to Sanity — 8 Gadgets I Want To See Nintendo Make
Tuesday, December 24, 2024
Also: The Best Christmas Movies to Watch on Netflix, and More! How-To Geek Logo December 24, 2024 Did You Know Their association with the Christmas season might make you think poinsettias hail from a
😱 AzureEdge.net DNS Retiring Jan. 2025, 🚀 Microsoft Phi-4 AI Outperforms, 🔒 Microsoft Secure Future Initiative
Tuesday, December 24, 2024
Blog | Advertise | View Online Your trusted source for Cloud, AI and DevOps guidance with industry expert Chris Pietschmann! Phi-4: Microsoft's New Small Language Model Outperforms Giants in AI
Mapped | The Top Health Insurance Companies by State 🏥
Tuesday, December 24, 2024
In 13 US states, a single company dominates the health insurance market, holding at least half of the total market share. View Online | Subscribe | Download Our App Presented by: Global X ETFs Power
The Stanford Grad Who Forgot How To Think
Tuesday, December 24, 2024
Top Tech Content sent at Noon! Boost Your Article on HackerNoon for $159.99! Read this email in your browser How are you, @newsletterest1? 🪐 What's happening in tech today, December 24, 2024? The
The next big HDMI leap is coming
Tuesday, December 24, 2024
Sora side hustles; Casio's tiny watch comes to the US -- ZDNET ZDNET Tech Today - US December 24, 2024 Ecovacs Deebot T30S Combo robot vacuum and mop The next big HDMI leap is coming next month -
⚙️ Robo-suits
Tuesday, December 24, 2024
Plus: The data center energy surge
Apache Tomcat Vulnerability CVE-2024-56337 Exposes Servers to RCE Attacks
Tuesday, December 24, 2024
THN Daily Updates Newsletter cover The Data Science Handbook, 2nd Edition ($60.00 Value) FREE for a Limited Time Practical, accessible guide to becoming a data scientist, updated to include the latest
Edge 459: Quantization Plus Distillation
Tuesday, December 24, 2024
Some insights into quantized distillation ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏