A VERT.X TALE ON REACTIVE MICROSERVICES

60
MONOLITHS MUST DIE! A VERT.X TALE ON REACTIVE MICROSERVICES by / RedHat Principal Soʿware Engineer Paulo Lopes @jetdrone

Transcript of A VERT.X TALE ON REACTIVE MICROSERVICES

Page 1: A VERT.X TALE ON REACTIVE MICROSERVICES

MONOLITHS MUST DIE!A VERT.X TALE ON REACTIVE MICROSERVICES

by / RedHat Principal Soware EngineerPaulo Lopes

@jetdrone

Page 2: A VERT.X TALE ON REACTIVE MICROSERVICES

CHAPTER 1MONOLITHS APPLICATIONS ARE REAL

Page 3: A VERT.X TALE ON REACTIVE MICROSERVICES

MSA KILLER APPThe services are easy to replace

Services are organized around capabilities

Services can be polyglot

Architectures are symmetrical rather than hierarchical

Page 4: A VERT.X TALE ON REACTIVE MICROSERVICES

CHAPTER 2SOLVING THE PROBLEM THE "STANDARD" WAY

Page 5: A VERT.X TALE ON REACTIVE MICROSERVICES

APPLICATION CONTAINER

Page 6: A VERT.X TALE ON REACTIVE MICROSERVICES

APPLICATION CONTAINERSecurity

Threading

Transaction Management

Load balancing

Page 7: A VERT.X TALE ON REACTIVE MICROSERVICES

CONTAINER API

Page 8: A VERT.X TALE ON REACTIVE MICROSERVICES

PERFORMANCEBlocking

Thread safety

Locking

C10K

Page 9: A VERT.X TALE ON REACTIVE MICROSERVICES

SCALELoad balancer

Sticky sessions

Single point of failure

Page 10: A VERT.X TALE ON REACTIVE MICROSERVICES

WHY CAN'T THIS SCALE?

Page 11: A VERT.X TALE ON REACTIVE MICROSERVICES

CHAPTER 3HELLO VERT.X

Page 13: A VERT.X TALE ON REACTIVE MICROSERVICES

TOOLKIT<dependency>

<groupid>io.vertx</groupid>

<artifactid>core</artifactid>

<version>3.2.1</version>

</dependency>

Page 14: A VERT.X TALE ON REACTIVE MICROSERVICES

UNOPINIONATEDimport 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);

Page 15: A VERT.X TALE ON REACTIVE MICROSERVICES

REACTIVEconn.query("SELECT * from EMP", res ­>

if (res.succeeded())

ResultSet resultSet = res.result();

else

// Failed!

);

Page 16: A VERT.X TALE ON REACTIVE MICROSERVICES

POLYGLOTvertx.createHttpServer()

.requestHandler(function (req)

req.response()

.putHeader("content­type", "text/plain")

.end("Hello from JS Vert.x!")

).listen(8080)

Page 17: A VERT.X TALE ON REACTIVE MICROSERVICES

DISTRIBUTEDEventBus eb = vertx.eventBus();

eb.consumer("news.sport", message ­>

println("I have received a message: " + message.body());

);

Page 18: A VERT.X TALE ON REACTIVE MICROSERVICES

CHAPTER 4VERT.X SAVES THE DAY

Page 19: A VERT.X TALE ON REACTIVE MICROSERVICES

VERT.X API

Page 20: A VERT.X TALE ON REACTIVE MICROSERVICES

C10K? NO PROBLEM!

Page 21: A VERT.X TALE ON REACTIVE MICROSERVICES

HOW IS THIS POSSIBLE?

Page 22: A VERT.X TALE ON REACTIVE MICROSERVICES

REACTOR PATTERN

Page 23: A VERT.X TALE ON REACTIVE MICROSERVICES
Page 24: A VERT.X TALE ON REACTIVE MICROSERVICES

SCALE

Page 25: A VERT.X TALE ON REACTIVE MICROSERVICES

POINT TO POINT

Page 26: A VERT.X TALE ON REACTIVE MICROSERVICES

PUBLISH SUBSCRIBE

Page 27: A VERT.X TALE ON REACTIVE MICROSERVICES

REQUEST RESPONSE

Page 28: A VERT.X TALE ON REACTIVE MICROSERVICES
Page 29: A VERT.X TALE ON REACTIVE MICROSERVICES

UNLIMITED HORIZONTAL SCALING

Page 30: A VERT.X TALE ON REACTIVE MICROSERVICES
Page 31: A VERT.X TALE ON REACTIVE MICROSERVICES

CHAPTER 5MONOLITHS WATCH OUT!

Page 32: A VERT.X TALE ON REACTIVE MICROSERVICES

MONOLITHS MORTAL WEAKNESSMessage driven problem domain

HTML5 and Realtime/Websocket problem

Address services running on browsers

Flexible actor model

Scale out

Mixed async and blocking code

Page 33: A VERT.X TALE ON REACTIVE MICROSERVICES

NO COMPARISON

Page 34: A VERT.X TALE ON REACTIVE MICROSERVICES

NOT DEAD YET

Page 35: A VERT.X TALE ON REACTIVE MICROSERVICES

CIRCUIT BREAKER

Page 36: A VERT.X TALE ON REACTIVE MICROSERVICES

CIRCUIT BREAKER

Page 37: A VERT.X TALE ON REACTIVE MICROSERVICES

DON'T FORGET!

Page 38: A VERT.X TALE ON REACTIVE MICROSERVICES
Page 39: A VERT.X TALE ON REACTIVE MICROSERVICES
Page 40: A VERT.X TALE ON REACTIVE MICROSERVICES

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

Page 41: A VERT.X TALE ON REACTIVE MICROSERVICES

WHY MICROSERVICES MIGHT NOT BE FOR YOU!

THE SHORTLIST OF ESSENTIAL QUESTIONS

@noroute

THREE

Page 42: A VERT.X TALE ON REACTIVE MICROSERVICES

SURVIVORSHIP BIASIS 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

Page 43: A VERT.X TALE ON REACTIVE MICROSERVICES

APPLICATION PERFORMANCE

QUESTION #1THINK UX!

Page 44: A VERT.X TALE ON REACTIVE MICROSERVICES

Price

Performance

COST

Page 45: A VERT.X TALE ON REACTIVE MICROSERVICES

MEM REF

SEND 2K

DC ROUNDTRIP

0 125000 250000 375000 500000

“LATENCY IS ZERO”

Page 47: A VERT.X TALE ON REACTIVE MICROSERVICES
Page 49: A VERT.X TALE ON REACTIVE MICROSERVICES

TOOLS

Page 52: A VERT.X TALE ON REACTIVE MICROSERVICES

SECRETS MANAGEMENT?

Page 54: A VERT.X TALE ON REACTIVE MICROSERVICES

PRODUCT TEAMS

Page 55: A VERT.X TALE ON REACTIVE MICROSERVICES

PARALLEL DELIVERY

Page 56: A VERT.X TALE ON REACTIVE MICROSERVICES

UNIT

COMPONENT

INTEGRATION

Page 57: A VERT.X TALE ON REACTIVE MICROSERVICES

INTEGRATION

CONTRACT

UNIT

COMPONENT

Page 58: A VERT.X TALE ON REACTIVE MICROSERVICES

CONSUMER SERVICECONTRACT

CDC

Page 59: A VERT.X TALE ON REACTIVE MICROSERVICES

TAKE HOME1. 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?

Page 60: A VERT.X TALE ON REACTIVE MICROSERVICES

SOURCESPeter 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