integration patterns and anti-patterns for microservices architectures
TRANSCRIPT
![Page 1: Integration Patterns and Anti-Patterns for Microservices Architectures](https://reader031.vdocuments.us/reader031/viewer/2022021815/586f92441a28ab54768b7f59/html5/thumbnails/1.jpg)
Integration Patterns forMicroservices Architectures
David WilliamsCo-Founder & Partner
@DavWilliams
![Page 2: Integration Patterns and Anti-Patterns for Microservices Architectures](https://reader031.vdocuments.us/reader031/viewer/2022021815/586f92441a28ab54768b7f59/html5/thumbnails/2.jpg)
… in the Multi-Cloud Enterprise Integration Patterns for Microservices Architectures
…in the Multi-Cloud Enterprise
![Page 3: Integration Patterns and Anti-Patterns for Microservices Architectures](https://reader031.vdocuments.us/reader031/viewer/2022021815/586f92441a28ab54768b7f59/html5/thumbnails/3.jpg)
… in the Multi-Cloud Enterprise Integration Patterns for Microservices Architectures
“New-stack” consultants based in Atlanta, GA.
Leveraging the ecosystem of modern application technologies to accelerate and improve the development, deployment, and operability of enterprise applications.
![Page 4: Integration Patterns and Anti-Patterns for Microservices Architectures](https://reader031.vdocuments.us/reader031/viewer/2022021815/586f92441a28ab54768b7f59/html5/thumbnails/4.jpg)
… in the Multi-Cloud Enterprise Integration Patterns for Microservices Architectures
My background:sysadmin, architect, devops, product dev
My 20+ years in the industry:application infrastructure aka middleware aka platforms
My passion:traditional enterprise it -> disruptive technologies
![Page 5: Integration Patterns and Anti-Patterns for Microservices Architectures](https://reader031.vdocuments.us/reader031/viewer/2022021815/586f92441a28ab54768b7f59/html5/thumbnails/5.jpg)
… in the Multi-Cloud Enterprise Integration Patterns for Microservices Architectures
what’s this NATS thing?Introduced to NATS through…
Reintroduced to NATS through…
![Page 6: Integration Patterns and Anti-Patterns for Microservices Architectures](https://reader031.vdocuments.us/reader031/viewer/2022021815/586f92441a28ab54768b7f59/html5/thumbnails/6.jpg)
… in the Multi-Cloud Enterprise Integration Patterns for Microservices Architectures
a common use-caseBackbone of interservice/intercomponent comms
• All communication between components is via NATS • Announcement and notifications handled via NATS • Interaction with controller (“brain”) is via NATS
![Page 7: Integration Patterns and Anti-Patterns for Microservices Architectures](https://reader031.vdocuments.us/reader031/viewer/2022021815/586f92441a28ab54768b7f59/html5/thumbnails/7.jpg)
… in the Multi-Cloud Enterprise Integration Patterns for Microservices Architectures
…NATS literally is their nervous system!
![Page 8: Integration Patterns and Anti-Patterns for Microservices Architectures](https://reader031.vdocuments.us/reader031/viewer/2022021815/586f92441a28ab54768b7f59/html5/thumbnails/8.jpg)
… in the Multi-Cloud Enterprise Integration Patterns for Microservices Architectures
NATS == lightweightCurrent Docker footprint
Even smaller when compressed…~2MB
![Page 9: Integration Patterns and Anti-Patterns for Microservices Architectures](https://reader031.vdocuments.us/reader031/viewer/2022021815/586f92441a28ab54768b7f59/html5/thumbnails/9.jpg)
… in the Multi-Cloud Enterprise Integration Patterns for Microservices Architectures
NATS != slow
Source: http://bravenewgeek.com/dissecting-message-queues/
![Page 10: Integration Patterns and Anti-Patterns for Microservices Architectures](https://reader031.vdocuments.us/reader031/viewer/2022021815/586f92441a28ab54768b7f59/html5/thumbnails/10.jpg)
… in the Multi-Cloud Enterprise Integration Patterns for Microservices Architectures
what’s a “microservice”• A unit of execution containing everything from the OS,
framework, runtime and dependencies • Independent, autonomous process with no
dependency on other microservices • Communicate with each other through language and
platform-agnostic APIs, each having a exactly one well-known entry point
![Page 11: Integration Patterns and Anti-Patterns for Microservices Architectures](https://reader031.vdocuments.us/reader031/viewer/2022021815/586f92441a28ab54768b7f59/html5/thumbnails/11.jpg)
… in the Multi-Cloud Enterprise Integration Patterns for Microservices Architectures
microservice entry pointsThe microservice community favors two protocols that are most commonly used:
1. HTTP request-response with resource APIs 2. Lightweight messaging
What’s the difference? Speed and scale?
![Page 12: Integration Patterns and Anti-Patterns for Microservices Architectures](https://reader031.vdocuments.us/reader031/viewer/2022021815/586f92441a28ab54768b7f59/html5/thumbnails/12.jpg)
… in the Multi-Cloud Enterprise Integration Patterns for Microservices Architectures
A pattern catalog describing 65 integration patterns
Source: http://www.enterpriseintegrationpatterns.com/patterns/messaging/
![Page 13: Integration Patterns and Anti-Patterns for Microservices Architectures](https://reader031.vdocuments.us/reader031/viewer/2022021815/586f92441a28ab54768b7f59/html5/thumbnails/13.jpg)
… in the Multi-Cloud Enterprise Integration Patterns for Microservices Architectures
• Applications were tightly-coupled
• Applications were large monoliths
• Enterprise applications were written in a single language, the majority in Java
• Messaging systems were big and complex (and expensive!)
These patterns were “harvested” and documented in a time when …
![Page 14: Integration Patterns and Anti-Patterns for Microservices Architectures](https://reader031.vdocuments.us/reader031/viewer/2022021815/586f92441a28ab54768b7f59/html5/thumbnails/14.jpg)
… in the Multi-Cloud Enterprise Integration Patterns for Microservices Architectures
anti-patternsproblem -> bad solution
![Page 15: Integration Patterns and Anti-Patterns for Microservices Architectures](https://reader031.vdocuments.us/reader031/viewer/2022021815/586f92441a28ab54768b7f59/html5/thumbnails/15.jpg)
… in the Multi-Cloud Enterprise Integration Patterns for Microservices Architectures
the most common anti-patternin microservices architectures
StovepipeWhen existing software systems are migrated to a distributed infrastructure. Arises when converting the existing software interfaces to distributed interfaces.
![Page 16: Integration Patterns and Anti-Patterns for Microservices Architectures](https://reader031.vdocuments.us/reader031/viewer/2022021815/586f92441a28ab54768b7f59/html5/thumbnails/16.jpg)
… in the Multi-Cloud Enterprise Integration Patterns for Microservices Architectures
Example of likely anti-patterns for microservices architectures
Any patterns that is transactional in nature:Transactional Client, Competing Consumers, Message Expiration
Any pattern that requires the messaging system to persist messages:Durable Subscriber, *Guaranteed Delivery, Claim Check
Any pattern where the messaging system inspects or modifies messages, selectively routes message, or transforms message content:Message Filter, Content Enricher, Content-Based Routing, Recipient List, Routing Slip and Process Manager
* http://bravenewgeek.com/you-cannot-have-exactly-once-delivery/
![Page 17: Integration Patterns and Anti-Patterns for Microservices Architectures](https://reader031.vdocuments.us/reader031/viewer/2022021815/586f92441a28ab54768b7f59/html5/thumbnails/17.jpg)
… in the Multi-Cloud Enterprise Integration Patterns for Microservices Architectures
* For a opinion of the fallacy of “Guaranteed Delivery”, visit: http://bravenewgeek.com/what-you-want-is-what-you-dont-understanding-trade-offs-in-distributed-messaging/
“On systems that do claim some form of guarantee, it’s best to look at what level that guarantee really runs out. Especially around persistence, exactly once delivery semantics, etc. I spent much of my career designing and building messaging systems that have those guarantees, and in turn developed many systems utilizing some of those features. For me, I found that depending on these guarantees was a bad pattern in distributed system design…”
Derek Collison
![Page 18: Integration Patterns and Anti-Patterns for Microservices Architectures](https://reader031.vdocuments.us/reader031/viewer/2022021815/586f92441a28ab54768b7f59/html5/thumbnails/18.jpg)
… in the Multi-Cloud Enterprise Integration Patterns for Microservices Architectures
so what are “good patterns”
for micromessaging (messaging with microservices)?
![Page 19: Integration Patterns and Anti-Patterns for Microservices Architectures](https://reader031.vdocuments.us/reader031/viewer/2022021815/586f92441a28ab54768b7f59/html5/thumbnails/19.jpg)
… in the Multi-Cloud Enterprise Integration Patterns for Microservices Architectures
Basic design patterns you’re already familiar with…
Publish / Subscribe
Queueing
Request / ReplySource: http://www.slideshare.net/derekcollison/nats-a-new-nervous-system-for-distributed-cloud-platforms
![Page 20: Integration Patterns and Anti-Patterns for Microservices Architectures](https://reader031.vdocuments.us/reader031/viewer/2022021815/586f92441a28ab54768b7f59/html5/thumbnails/20.jpg)
… in the Multi-Cloud Enterprise Integration Patterns for Microservices Architectures
putting those patternsto usewith NATS
![Page 21: Integration Patterns and Anti-Patterns for Microservices Architectures](https://reader031.vdocuments.us/reader031/viewer/2022021815/586f92441a28ab54768b7f59/html5/thumbnails/21.jpg)
… in the Multi-Cloud Enterprise Integration Patterns for Microservices Architectures
Design Pattern: Interservice Communication
Microservices communicate with each other via NATS messages. All business and routing logic in the service, not the messaging system.
![Page 22: Integration Patterns and Anti-Patterns for Microservices Architectures](https://reader031.vdocuments.us/reader031/viewer/2022021815/586f92441a28ab54768b7f59/html5/thumbnails/22.jpg)
… in the Multi-Cloud Enterprise Integration Patterns for Microservices Architectures
Design Pattern: Control Plane
Service state changes triggered by receipt of messages from “controller” service.
![Page 23: Integration Patterns and Anti-Patterns for Microservices Architectures](https://reader031.vdocuments.us/reader031/viewer/2022021815/586f92441a28ab54768b7f59/html5/thumbnails/23.jpg)
… in the Multi-Cloud Enterprise Integration Patterns for Microservices Architectures
Design Pattern: Heartbeat
Each microservice publishes heartbeat (health) information via NATS.
![Page 24: Integration Patterns and Anti-Patterns for Microservices Architectures](https://reader031.vdocuments.us/reader031/viewer/2022021815/586f92441a28ab54768b7f59/html5/thumbnails/24.jpg)
… in the Multi-Cloud Enterprise Integration Patterns for Microservices Architectures
Design Pattern: Real-Time Stream Processing
Ingest through NATS into stream processor. Output processed stream via NATS to a SSE microservice.
![Page 25: Integration Patterns and Anti-Patterns for Microservices Architectures](https://reader031.vdocuments.us/reader031/viewer/2022021815/586f92441a28ab54768b7f59/html5/thumbnails/25.jpg)
… in the Multi-Cloud Enterprise Integration Patterns for Microservices Architectures
Design Pattern: Event Store
Data written to, updated, or deleted from data store. Notification message of event change sent via NATS.
![Page 26: Integration Patterns and Anti-Patterns for Microservices Architectures](https://reader031.vdocuments.us/reader031/viewer/2022021815/586f92441a28ab54768b7f59/html5/thumbnails/26.jpg)
… in the Multi-Cloud Enterprise Integration Patterns for Microservices Architectures
Design Pattern: Data Pump
Universal “database driver” using microservices as data writers/readers
![Page 27: Integration Patterns and Anti-Patterns for Microservices Architectures](https://reader031.vdocuments.us/reader031/viewer/2022021815/586f92441a28ab54768b7f59/html5/thumbnails/27.jpg)
… in the Multi-Cloud Enterprise Integration Patterns for Microservices Architectures
let’s go global
![Page 28: Integration Patterns and Anti-Patterns for Microservices Architectures](https://reader031.vdocuments.us/reader031/viewer/2022021815/586f92441a28ab54768b7f59/html5/thumbnails/28.jpg)
… in the Multi-Cloud Enterprise Integration Patterns for Microservices Architectures
Design Pattern: Bridgehead
Information exchange between different sites/regions via NATS
![Page 29: Integration Patterns and Anti-Patterns for Microservices Architectures](https://reader031.vdocuments.us/reader031/viewer/2022021815/586f92441a28ab54768b7f59/html5/thumbnails/29.jpg)
… in the Multi-Cloud Enterprise Integration Patterns for Microservices Architectures
why should developershave all the fun?
![Page 30: Integration Patterns and Anti-Patterns for Microservices Architectures](https://reader031.vdocuments.us/reader031/viewer/2022021815/586f92441a28ab54768b7f59/html5/thumbnails/30.jpg)
… in the Multi-Cloud Enterprise Integration Patterns for Microservices Architectures
Design Pattern: DevOps Gone Wild
Messaging as part of the infrastructure engineering & the DevOps toolchain
![Page 31: Integration Patterns and Anti-Patterns for Microservices Architectures](https://reader031.vdocuments.us/reader031/viewer/2022021815/586f92441a28ab54768b7f59/html5/thumbnails/31.jpg)
… in the Multi-Cloud Enterprise Integration Patterns for Microservices Architectures
Design Pattern: Global Domination
All services, everywhere, communicating via NATS
![Page 32: Integration Patterns and Anti-Patterns for Microservices Architectures](https://reader031.vdocuments.us/reader031/viewer/2022021815/586f92441a28ab54768b7f59/html5/thumbnails/32.jpg)
… in the Multi-Cloud Enterprise Integration Patterns for Microservices Architectures
don’t be like this guy
![Page 33: Integration Patterns and Anti-Patterns for Microservices Architectures](https://reader031.vdocuments.us/reader031/viewer/2022021815/586f92441a28ab54768b7f59/html5/thumbnails/33.jpg)
… in the Multi-Cloud Enterprise Integration Patterns for Microservices Architectures
in summaryMicroservices architectures provide an
opportunity to re-evaluate the way we think about communication in the composable enterprise.
![Page 34: Integration Patterns and Anti-Patterns for Microservices Architectures](https://reader031.vdocuments.us/reader031/viewer/2022021815/586f92441a28ab54768b7f59/html5/thumbnails/34.jpg)
… in the Multi-Cloud Enterprise Integration Patterns for Microservices Architectures
resourcesProject site:http://nats.io/
Referenced in deck:http://bravenewgeek.com/what-you-want-is-what-you-dont-understanding-trade-offs-in-distributed-messaging/ http://slideshare.net/derekcollison/nats-a-new-nervous-system-for-distributed-cloud-platforms http://bravenewgeek.com/dissecting-message-queues/
Get it here:http://nats.io/download/ https://hub.docker.com/_/nats/ https://github.com/nats-io/gnatsd
![Page 35: Integration Patterns and Anti-Patterns for Microservices Architectures](https://reader031.vdocuments.us/reader031/viewer/2022021815/586f92441a28ab54768b7f59/html5/thumbnails/35.jpg)
… in the Multi-Cloud Enterprise Integration Patterns for Microservices Architectures
questions?