One of the fundamental principals of microservices is the idea of lightweight, composable loosely coupled applications that can either talk through some type of service endpoint, through some protocol like HTTP or through pipes.
A lightweight messaging system such as NATS is a better way for microservices to talk to each other and integrate disparate systems outside the microservice or architecture.
You can learn more about NATS at http://www.nats.io
Integration Patterns for Microservices Architectures
1. Integration Patterns for
Microservices Architectures
NATS in the [Multi-Cloud] Enterprise
David Williams
Co-Founder & Partner
Williams & Garcia
@DavWilliams
2. NATS in the [Multi-Cloud] Enterprise Integration Patterns for Microservices ArchitecturesNATS in the [Multi-Cloud] Enterprise
Williams & Garcia
“Full-stack” consultants based in Atlanta, GA.
Leveraging the ecosystem of modern application
technologies to improve the development, deployment,
and operability of enterprise applications.
3. NATS in the [Multi-Cloud] Enterprise Integration Patterns for Microservices Architectures
My background:
sysadmin, architect <- consultant -> product dev
My 20+ years in the industry:
application infrastructure aka middleware aka platforms,
and the infrastructure they depend on.
My passion:
traditional enterprise it -> disruptive technologies
4. NATS in the [Multi-Cloud] Enterprise Integration Patterns for Microservices Architectures
what’s this NATS thing?
Introduced to NATS through Cloud Foundry
5. NATS in the [Multi-Cloud] Enterprise Integration Patterns for Microservices Architectures
pos·si·bil·i·ties
things that may be chosen or done
out of several possible alternatives.
6. NATS in the [Multi-Cloud] Enterprise Integration Patterns for Microservices Architectures
A pattern catalog describing 65 integration patterns
Source: http://www.enterpriseintegrationpatterns.com/patterns/messaging/
7. NATS 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
These patterns were “harvested” and documented in a time when …
8. NATS in the [Multi-Cloud] Enterprise Integration Patterns for Microservices Architectures
anti-patterns
problem -> bad solution
9. NATS in the [Multi-Cloud] Enterprise Integration Patterns for Microservices Architectures
the most common anti-pattern
in microservices architectures
Stovepipe
When existing software systems are migrated to a distributed
infrastructure. Arises when converting the existing software
interfaces to distributed interfaces.
10. NATS 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
11. NATS 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/
12. NATS in the [Multi-Cloud] Enterprise Integration Patterns for Microservices Architectures
so what are “good”
patterns for
micromessaging?
13. NATS in the [Multi-Cloud] Enterprise Integration Patterns for Microservices Architectures
Basic design patterns you’re already familiar with…
Publish / Subscribe
Queueing
Request / Reply
Source:
http://www.slideshare.net/derekcollison/nats-a-new-nervous-system-for-distributed-cloud-platforms
14. NATS in the [Multi-Cloud] Enterprise Integration Patterns for Microservices Architectures
putting those patterns
to use
with NATS
15. NATS 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.
16. NATS 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.
17. NATS in the [Multi-Cloud] Enterprise Integration Patterns for Microservices Architectures
Design Pattern: Heartbeat
Each microservice publishes heartbeat (health) information via NATS.
18. NATS 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.
19. NATS 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.
20. NATS in the [Multi-Cloud] Enterprise Integration Patterns for Microservices Architectures
Design Pattern: Data Pump
Universal “database driver” using microservices as data writers/readers
21. NATS in the [Multi-Cloud] Enterprise Integration Patterns for Microservices Architectures
let’s go global
22. NATS in the [Multi-Cloud] Enterprise Integration Patterns for Microservices Architectures
Design Pattern: Bridgehead
Information exchange between different sites/regions via NATS
23. NATS in the [Multi-Cloud] Enterprise Integration Patterns for Microservices Architectures
why should developers
have all the fun?
24. NATS 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
25. NATS in the [Multi-Cloud] Enterprise Integration Patterns for Microservices Architectures
Design Pattern: Global Domination
All services, everywhere, communicating via NATS
26. NATS in the [Multi-Cloud] Enterprise Integration Patterns for Microservices Architectures
don’t be like this guy
27. NATS in the [Multi-Cloud] Enterprise Integration Patterns for Microservices Architectures
in summary
Microservices architectures provide an
opportunity to re-evaluate the way we think about
communication in the composable enterprise.
28. NATS in the [Multi-Cloud] Enterprise Integration Patterns for Microservices Architectures
resources
Project 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
Get it here:
http://nats.io/download/
https://hub.docker.com/_/nats/
https://github.com/nats-io/gnatsd
29. NATS in the [Multi-Cloud] Enterprise Integration Patterns for Microservices Architectures
questions?