Slide 1

Slide 1 text

Microservices FTW? Matthew Rudy Jacobs Wednesday March 11th 2015

Slide 2

Slide 2 text

@matthewrudy

Slide 3

Slide 3 text

THE NEW HOTNESS!

Slide 4

Slide 4 text

TO THE MOON!

Slide 5

Slide 5 text

MARTIN FOWLER March 2014

Slide 6

Slide 6 text

AND ME? March 2014 March 2015

Slide 7

Slide 7 text

GET THE BOOK!

Slide 8

Slide 8 text

OFF TOPIC

Slide 9

Slide 9 text

COINCIDENCE?

Slide 10

Slide 10 text

THE CONCEPT

Slide 11

Slide 11 text

“THE SINGLE RESPONSIBILITY PRINCIPLE, APPLIED TO SOA”

Slide 12

Slide 12 text

TAKE YOUR MONOLITH

Slide 13

Slide 13 text

AND BREAK IT APART

Slide 14

Slide 14 text

IN PRACTICE

Slide 15

Slide 15 text

Todos Users Todos Controller Users Controller Mailer SQL Todos Users

Slide 16

Slide 16 text

Todos Controller Todos Users Controller Users Mailer Riak Todos SQL Users Gateway

Slide 17

Slide 17 text

Gateway Todos Users Mailer Auth LOTS OF LITTLE PIECES

Slide 18

Slide 18 text

Gateway Todos Users V2 Mailer Auth EASY TO UPDATE

Slide 19

Slide 19 text

Gateway Todos Users V2 Mailer Auth EASY TO SCALE UP

Slide 20

Slide 20 text

Gateway Todos Mailer Auth OR SCALE DOWN Users V2

Slide 21

Slide 21 text

Gateway Todos Mailer Auth ADD NEW FEATURES Search Users V2

Slide 22

Slide 22 text

Golang Clojure Ruby Perl Scala USING THE RIGHT TOOLS Java

Slide 23

Slide 23 text

Gateway Todos Users Auth AND THE RIGHT DATASTORES Riak SQL Mailer Search ElasticSearch

Slide 24

Slide 24 text

COMMUNICATION

Slide 25

Slide 25 text

Users SYNCHRONOUS POST /users {id: 123, name: “Gary”}

Slide 26

Slide 26 text

Mailer ASYNCHRONOUS POST /todos/123/notify/complete 200 OK

Slide 27

Slide 27 text

ORCHESTRATION VS CHOREOGRAPHY

Slide 28

Slide 28 text

Todos Mailer ORCHESTRATION Email Call API Todo Completed

Slide 29

Slide 29 text

Todos Mailer CHOREOGRAPHY RabbitMQ Emits Event Subscribes to Events Email Todo Completed

Slide 30

Slide 30 text

HTTP+JSON GET /users/123 { id: 123, name: “Suzy”, email: “[email protected]” }

Slide 31

Slide 31 text

THRIFT struct User { 1: i32 id, 2: string name, 3: string email } service Users { User show(1:i32 id) }

Slide 32

Slide 32 text

PROTOCOL BUFFERS message User { required int32 id = 1; required string name = 2; optional string email = 3; } service UserService { rpc Show (ShowRequest) returns (ShowResponse); }

Slide 33

Slide 33 text

HTTP+JSON?

Slide 34

Slide 34 text

PROBLEMS

Slide 35

Slide 35 text

SERVICE TESTING IS EASY INTEGRATION TESTING IS HARD

Slide 36

Slide 36 text

POLYGLOT PROGRAMMING HIGHER BARRIER FOR DEVS

Slide 37

Slide 37 text

ITS EASY TO SCALE MONITORING BECOMES HARD

Slide 38

Slide 38 text

HTTP CACHING FOR FREE LATENCY AND NETWORK ERRORS

Slide 39

Slide 39 text

SERVICES ARE LOOSELY COUPLED CHANGING ANY API IS DIFFICULT

Slide 40

Slide 40 text

EACH PIECE IS SIMPLE PUTTING IT TOGETHER IS COMPLEX

Slide 41

Slide 41 text

THE SAME COMPLEXITY JUST IN DIFFERENT PLACES

Slide 42

Slide 42 text

The Death Star http://www.slideshare.net/adriancockcroft/dockercon- state-of-the-art-in-microservices

Slide 43

Slide 43 text

IS IT NECESSARY?

Slide 44

Slide 44 text

https://speakerdeck.com/a_matsuda/the-recipe-for-the- worlds-largest-rails-monolith

Slide 45

Slide 45 text

A MASSIVE MONOLITH

Slide 46

Slide 46 text

50 DEVELOPERS 300 SERVERS 15,000 REQUESTS / SECOND 10 DEPLOYS / DAY

Slide 47

Slide 47 text

BUT…

Slide 48

Slide 48 text

CUSTOM DB SHARDING CUSTOM TESTING SCHEME CUSTOM MIGRATION CUSTOM DEPLOYMENT

Slide 49

Slide 49 text

MAYBE THEY’D BE BETTER OFF MICRO-SERVICED UP!

Slide 50

Slide 50 text

THE PRAGMATIC APPROACH

Slide 51

Slide 51 text

Create Services When You Need Them Todos Users Todos Controller Users Controller Mailer SQL Todos Users

Slide 52

Slide 52 text

Todos Users Todos Controller Users Controller Mailer SQL Todos Users Search ElasticSearch

Slide 53

Slide 53 text

Todos Users Todos Controller Users Controller Mailer SQL Todos Users Auth Search ElasticSearch

Slide 54

Slide 54 text

Todos Users Todos Controller Users Controller SQL Todos Users Auth Search ElasticSearch Mailer

Slide 55

Slide 55 text

Todos Users Todos Controller Users Controller Auth Search ElasticSearch Mailer Riak Todos SQL Users

Slide 56

Slide 56 text

Auth Search ElasticSearch Mailer Users SQL Todos Riak Gateway

Slide 57

Slide 57 text

THANKS