integration patterns and anti-patterns for microservices architectures

35
Integration Patterns for Microservices Architectures _ ’!Bouj.Qbuufsot David Williams Co-Founder & Partner @DavWilliams

Upload: apcera

Post on 16-Apr-2017

4.367 views

Category:

Technology


4 download

TRANSCRIPT

Page 1: Integration Patterns and Anti-Patterns for Microservices Architectures

Integration Patterns forMicroservices Architectures

David WilliamsCo-Founder & Partner

@DavWilliams

Page 2: Integration Patterns and Anti-Patterns for Microservices Architectures

… 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

… 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

… 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

… 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

… 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

… 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

… 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

… 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

… 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

… 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

… 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

… 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

… in the Multi-Cloud Enterprise Integration Patterns for Microservices Architectures

anti-patternsproblem -> bad solution

Page 15: Integration Patterns and Anti-Patterns for Microservices Architectures

… 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

… 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

… 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

… 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

… 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

… 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

… 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

… 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

… 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

… 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

… 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

… 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

… in the Multi-Cloud Enterprise Integration Patterns for Microservices Architectures

let’s go global

Page 28: Integration Patterns and Anti-Patterns for Microservices Architectures

… 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

… 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

… 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

… 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

… 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

… 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

… 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

… in the Multi-Cloud Enterprise Integration Patterns for Microservices Architectures

questions?