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 by Foo Service, needs to get data from numerous services including Bar Service and Baz 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

Top Tech Deals 💰 $20 Monster Earbuds, TCL TVs, Anker Power Station, and More

Wednesday, November 6, 2024

Pre-Black Friday deals you won't want to miss. How-To Geek Logo November 6, 2024 Top Tech Deals: $20 Monster Earbuds, TCL TVs, Anker Power Station, and More Pre-Black Friday deals you won't

Zuzalu is Dead. Long Live Zuzalu! - Metamorphosis Commenced v3

Wednesday, November 6, 2024

Top Tech Content sent at Noon! NODES 2024, a Dev Conference on AI, Knowledge Graphs & Apps Read this email in your browser How are you, @newsletterest1? 🪐 What's happening in tech today,

The best open-source AI models

Wednesday, November 6, 2024

Drone flight goggles; Kindle Paperwhite hands-on; Best laptop deals -- ZDNET ZDNET Tech Today - US November 6, 2024 ai concept The best open-source AI models: All your free-to-use options explained

Bolster Your Cyber Defenses with CIS Controls v8.1

Wednesday, November 6, 2024

Key changes to help you mature your cybersecurity posture... ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌

INTERPOL Disrupts Over 22,000 Malicious Servers in Global Crackdown on Cybercrime

Wednesday, November 6, 2024

THN Daily Updates Newsletter cover Introduction to Algorithms: A Comprehensive Guide for Beginners: Unlocking Computational Thinking ($34.99 Value) FREE for a Limited Time Begin your journey into the

Post from Syncfusion Blogs on 11/06/2024

Wednesday, November 6, 2024

New blogs from Syncfusion Visualize US Gulf Coast Kerosene-Type Jet Fuel Prices with .NET MAUI Fast Line Chart By Arul Jenith Berkmans This blog explains how to visualize US Gulf Coast jet fuel prices

⚙️ Anthropic price hike

Wednesday, November 6, 2024

Plus: A different kind of legal AI ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌

The Power of Modern Knowledge Management for Business Professionals

Wednesday, November 6, 2024

Unlock your business potential with cutting-edge knowledge management strategies for enhanced productivity and decision-making Sébastien Dubois DeveloPassion's Newsletter The Power of Modern

You’re invited: Mastering Production-Ready AI with Elastic & Google Cloud

Wednesday, November 6, 2024

Unlock the potential of production-ready AI with Elastic and Google Cloudㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ Mastering Production-Ready AI with Elastic & Google