MONOLITHS MUST DIE! A VERT.X TALE ON REACTIVE MICROSERVICES by - - PowerPoint PPT Presentation

monoliths must die
SMART_READER_LITE
LIVE PREVIEW

MONOLITHS MUST DIE! A VERT.X TALE ON REACTIVE MICROSERVICES by - - PowerPoint PPT Presentation

MONOLITHS MUST DIE! A VERT.X TALE ON REACTIVE MICROSERVICES by Paulo Lopes / RedHat Principal Soware Engineer @jetdrone CHAPTER 1 MONOLITHS APPLICATIONS ARE REAL MSA KILLER APP The services are easy to replace Services are organized


slide-1
SLIDE 1

MONOLITHS MUST DIE!

A VERT.X TALE ON REACTIVE MICROSERVICES

by / RedHat Principal Soware Engineer Paulo Lopes @jetdrone

slide-2
SLIDE 2

CHAPTER 1

MONOLITHS APPLICATIONS ARE REAL

slide-3
SLIDE 3

MSA KILLER APP

The services are easy to replace Services are organized around capabilities Services can be polyglot Architectures are symmetrical rather than hierarchical

slide-4
SLIDE 4

CHAPTER 2

SOLVING THE PROBLEM THE "STANDARD" WAY

slide-5
SLIDE 5

APPLICATION CONTAINER

slide-6
SLIDE 6

APPLICATION CONTAINER

Security Threading Transaction Management Load balancing

slide-7
SLIDE 7

CONTAINER API

slide-8
SLIDE 8

PERFORMANCE

Blocking Thread safety Locking C10K

slide-9
SLIDE 9

SCALE

Load balancer Sticky sessions Single point of failure

slide-10
SLIDE 10

WHY CAN'T THIS SCALE?

slide-11
SLIDE 11

CHAPTER 3

HELLO VERT.X

slide-12
SLIDE 12
slide-13
SLIDE 13

TOOLKIT

<dependency> <groupid>io.vertx</groupid> <artifactid>core</artifactid> <version>3.2.1</version> </dependency>
slide-14
SLIDE 14

UNOPINIONATED

import io.vertx.core.AbstractVerticle; public class Server extends AbstractVerticle { public void start() { vertx.createHttpServer().requestHandler(req ­> { req.response() .putHeader("content­type", "text/plain") .end("Hello from Vert.x!"); }).listen(8080); } }
slide-15
SLIDE 15

REACTIVE

conn.query("SELECT * from EMP", res ­> { if (res.succeeded()) { ResultSet resultSet = res.result(); } else { // Failed! } });
slide-16
SLIDE 16

POLYGLOT

vertx.createHttpServer() .requestHandler(function (req) { req.response() .putHeader("content­type", "text/plain") .end("Hello from JS Vert.x!") }).listen(8080)
slide-17
SLIDE 17

DISTRIBUTED

EventBus eb = vertx.eventBus(); eb.consumer("news.sport", message ­> { println("I have received a message: " + message.body()); });
slide-18
SLIDE 18

CHAPTER 4

VERT.X SAVES THE DAY

slide-19
SLIDE 19

VERT.X API

slide-20
SLIDE 20

C10K? NO PROBLEM!

slide-21
SLIDE 21

HOW IS THIS POSSIBLE?

slide-22
SLIDE 22

REACTOR PATTERN

slide-23
SLIDE 23
slide-24
SLIDE 24

SCALE

slide-25
SLIDE 25

POINT TO POINT

slide-26
SLIDE 26

PUBLISH SUBSCRIBE

slide-27
SLIDE 27

REQUEST RESPONSE

slide-28
SLIDE 28
slide-29
SLIDE 29

UNLIMITED HORIZONTAL SCALING

slide-30
SLIDE 30
slide-31
SLIDE 31

CHAPTER 5

MONOLITHS WATCH OUT!

slide-32
SLIDE 32

MONOLITHS MORTAL WEAKNESS

Message driven problem domain HTML5 and Realtime/Websocket problem Address services running on browsers Flexible actor model Scale out Mixed async and blocking code

slide-33
SLIDE 33

NO COMPARISON

slide-34
SLIDE 34

NOT DEAD YET

slide-35
SLIDE 35

CIRCUIT BREAKER

slide-36
SLIDE 36

CIRCUIT BREAKER

slide-37
SLIDE 37

DON'T FORGET!

slide-38
SLIDE 38
slide-39
SLIDE 39
slide-40
SLIDE 40

THANK YOU!

Vert.x is fun! http://vertx.io https://github.com/eclipse/vert.x https://github.com/vert-x3/vertx-examples https://groups.google.com/forum/#!forum/vertx

slide-41
SLIDE 41

WHY MICROSERVICES MIGHT NOT BE FOR YOU!

THE SHORTLIST OF ESSENTIAL QUESTIONS @noroute

THREE

slide-42
SLIDE 42

SURVIVORSHIP BIAS

IS THE LOGICAL ERROR OF CONCENTRATING ON THE PEOPLE OR THINGS THAT "SURVIVED" SOME PROCESS AND INADVERTENTLY OVERLOOKING THOSE THAT DID NOT BECAUSE OF THEIR LACK OF VISIBILITY. — Wikipedia

slide-43
SLIDE 43

APPLICATION PERFORMANCE

QUESTION #1 THINK UX!

slide-44
SLIDE 44

Price Performance

COST

slide-45
SLIDE 45

MEM REF SEND 2K DC ROUNDTRIP 125000 250000 375000 500000

“LATENCY IS ZERO”

slide-46
SLIDE 46
slide-47
SLIDE 47
slide-48
SLIDE 48

COMPLEXITY

CONSIDERATION #2

slide-49
SLIDE 49

TOOLS

slide-50
SLIDE 50

PLUMBING

slide-51
SLIDE 51

“THE NETWORK IS SECURE”

slide-52
SLIDE 52

SECRETS MANAGEMENT?

slide-53
SLIDE 53

DEVELOPMENT VELOCITY

CONSIDERATION #3

slide-54
SLIDE 54

PRODUCT TEAMS

slide-55
SLIDE 55

PARALLEL DELIVERY

slide-56
SLIDE 56

UNIT COMPONENT

INTEGRATION

slide-57
SLIDE 57

INTEGRATION

CONTRACT

UNIT COMPONENT

slide-58
SLIDE 58

CONSUMER SERVICE CONTRACT

CDC

slide-59
SLIDE 59

TAKE HOME

1. What architecture is compatible with your UX? 2. How can you establish defence in depth for your services? 3. How do you enable high delivery velocity with high quality?

slide-60
SLIDE 60

SOURCES

Peter Norvig — Numbers every computer engineer should know: http://norvig.com/21-days.html Saltzer, Reed and Clark — END-TO-END ARGUMENTS IN SYSTEM DESIGN: http://web.mit.edu/Saltzer/www/publications/endtoend/endtoend.pdf Brave new geek — Distributed Systems are a UX problem: http://bravenewgeek.com/distributed-systems-are-a-ux-problem/ Ian Robinson — Consumer-Driven Contracts: A Service Evolution Pattern: http://martinfowler.com/articles/consumerDrivenContracts.html DiUS/pact-jvm — Consumer-Driven Contracts for the JVM: https://github.com/DiUS/pact-jvm bethesque/pact_broker — Share pacts for Consumer-Driven Contracts: https://github.com/bethesque/pact_broker Wikipedia — Fallacies of distributed computing: https://en.wikipedia.org/wiki/Fallacies_of_distributed_computing Wikipedia — Economies of scope: https://en.wikipedia.org/wiki/Economies_of_scope Phil Calçado — How we ended up with microservices.: http://philcalcado.com/2015/09/08/how_we_ended_up_with_microservices.html