eclipse microprofile for the busy developer · eclipse micropro le for the busy developer v ctor...

48
Eclipse MicroProfile for the Busy Developer ıctor Orozco 6 de Dezembro de 2018 @tuxtor 1

Upload: others

Post on 28-May-2020

15 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

Eclipse MicroProfile for the Busy Developer

Vıctor Orozco

6 de Dezembro de 2018

@tuxtor

1

Page 2: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

Java EE - MicroProfile - Spring Boot - Docker

2

Page 3: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

Vıctor Orozco

• 10 anos em Java EE

• CTO@Nabenik

• @tuxtor

• http://vorozco.com

• http://tuxtor.shekalug.org

3

Page 4: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

Microservicios?

Page 5: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

Microservicios?

Preciso migrar tudo para microservicios? O que

acontece se nao consigo utilizar microservicios?,

estou ficando velho?

4

Page 6: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

Reactive applications

Aplicativos reativos

Microservicios sao uma ferramenta para um estilo novo de

arquitetura.

5

Page 7: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

Monolito

Figura 1: Monolito

6

Page 8: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

ESB

Figura 2: ESB

7

Page 9: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

Microservicios

Figura 3: Microservicios

8

Page 10: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

Java EE 8

Page 11: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

Java EE 8

9

Page 12: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

Java EE 8

Java EE 8

• Melhor integracao JSF-CDI

• Melhor integracao JMS-CDI

• HTTP/2

• JSON-B

• Security

• JAX-RS Reativo

10

Page 13: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

Java EE 8 - A comunidade da um passo a frente

11

Page 14: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

Eclipse MicroProfile

Page 15: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

Eclipse MicroProfile

Figura 4: Credito: Reza Rahman

12

Page 16: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

Eclipse MicroProfile

13

Page 17: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

Eclipse MicroProfile

14

Page 18: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

Eclipse MicroProfile - Implementacoes

• Thorntail (Red Hat)

• KumuluzEE

• Open Liberty (IBM)

• TomEE

• Helidon (Oracle)

• Hammock

• Apache Meecrowave

• Payara Micro

15

Page 19: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

Eclipse MicroProfile on Payara 5

<dependency >

<groupId >org.eclipse.microprofile </groupId >

<artifactId >microprofile </artifactId >

<type >pom </type >

<version >2.0.1 </ version >

<scope >provided </scope >

</dependency >

16

Page 20: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

Config

17

Page 21: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

Config

@Inject

@ConfigProperty(name = "omdbservice.url")

String omdbDaemonServiceUrl;

Externalizacao da configuracao (VM, Docker, Kubernetes)

18

Page 22: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

Fault Tolerance

19

Page 23: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

Metrics

20

Page 24: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

Fault Tolerance + Metrics

• Fault Tolerance depende da existencia de metricas, que

podem ser utilizadas para diagnose do nosso sistema expondo

os numeros mediante Metrics

21

Page 25: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

Fault tolerance

Regras de avaliacao e alternativas

• Circuit Breaker

• Bulkhead

• Retry

• Timeout

• Fallback

22

Page 26: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

Fault tolerance - Fallback, Timeout

@GET

@Path("/{id:[a-z]*[0 -9][0 -9]*}")

@Fallback(fallbackMethod = "findByIdFallBack")

@Timeout(TIMEOUT)

public Response findById(@PathParam("id")

final String imdbId) {

...

}

public Response findByIdFallBack(@PathParam("id")

final String imdbId) {

...

}

23

Page 27: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

Metricas

• JSON or OpenMetrics (Prometheus)

• Vendor

• Base

• Application

¿Quais?

• Counted

• Gauge

• Metered

• Timed

• Histogram

24

Page 28: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

Metrics - Counted

@Inject

@Metric

Counter failedQueries;

@GET

@Path("/{id:[a-z]*[0 -9][0 -9]*}")

@Fallback(fallbackMethod = "findByIdFallBack")

@Timeout(TIMEOUT)

public Response findById(@PathParam("id")

final String imdbId) {

...

}

public Response findByIdFallBack(@PathParam("id")

final String imdbId) {

...

failedQueries.inc();

}25

Page 29: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

Metrics - Gauge

Inc-dec em tempo real

@Gauge(unit = "ExternalDatabases", name = "movieDatabases", absolute = true)

public long getDatabases () {

int number = (int)(Math.random () * 100);

int criteria = number % 2;

if(criteria == 0) {

return 100;

}else {

return 50;

}

}

/metrics/application/movieDatabases

26

Page 30: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

Metrics - Metered

Events rate

@Metered(name = "moviesRetrieved",

unit = MetricUnits.MINUTES ,

description = "Metrics to monitor movies",

absolute = true)

public Response findExpandedById(@PathParam("id") final Long id)

/metrics/application/movieDatabases

27

Page 31: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

Metrics- Timed

Desempenho e delay

@Timed(name = "moviesDelay",

description = "Metrics to monitor the times of movies retrieval",

unit = MetricUnits.MINUTES ,

absolute = true)

public Response findExpandedById(@PathParam("id") final Long id)

/metrics/application/moviesDelay

28

Page 32: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

Metrics - Histogram

Distribuicoes

@Inject

MetricRegistry registry;

@POST

@Path("/add/{ attendees}")

public Response addAttendees(@PathParam("attendees") Long attendees) {

Metadata metadata =

new Metadata("matrix attendees",

MetricType.HISTOGRAM );

Histogram histogram =

registry.histogram(metadata );

histogram.update(attendees );

return Response.ok(). build ();

}

29

Page 33: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

Health Check

30

Page 34: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

Health Check

Ta vivo ainda?

@Override

public HealthCheckResponse call() {

return HealthCheckResponse.named("TaVivoAinda")

.withData("key1", "val1")

.withData("key2", "val2")

.up()

.build ();

}

31

Page 35: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

JWT

32

Page 36: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

JWT

@LoginConfig(authMethod = "MP-JWT")

public class ApplicationConfig extends Application {

}

@Inject

private JsonWebToken jwtPrincipal;

@Inject

@Claim("email")

private String email;

33

Page 37: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

TypeSafe

34

Page 38: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

TypeSafe

@Path("/playlist")

@Consumes("application/json")

public interface MusicPlaylistService {

@GET

List <String > getPlaylistNames ();

@PUT

@Path("/{ playlistName}")

long updatePlayList(@PathParam("playlistName")

String name ,

List <Song > playlist)

throws UnknownPlaylistException;

}

35

Page 39: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

Demo

Page 40: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

EE + MicroProfile - Demo

Java 8, JAX-RS, CDI, EJB,

MicroProfilehttps://github.com/tuxtor/payara-demo

https://github.com/tuxtor/omdb-demo

36

Page 41: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

Payara Micro - Java EE 8

Stacks tradicionais

• EJB

• JTA

• JAX-RS

• CDI

37

Page 42: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

EE + MicroProfile - Demo

MicroProfile: JAX-RS, CDI, Config, Fault Tolerance, Metrics

Payara Micro: EJB, JTA

Fatores externos: Location, Deployment, Orchestation, Balancing, Consistency,

Patterns

38

Page 43: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

12 fatores

Microprofile

• Config

• Backing service

• Disposability

Cloud

• Codebase (Git-Flow)

• Dependencies (Maven)

• Build, Release, Run

• Processes (Pipelines)

• Port binding

• Concurrency (Docker - k8s)

• Dev / Prod parity

• Logs

• Admin process

39

Page 44: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

Oracle Cloud

40

Page 45: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

Oracle Cloud

41

Page 46: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

Oracle Cloud

42

Page 47: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

Oracle Cloud

43

Page 48: Eclipse MicroProfile for the Busy Developer · Eclipse MicroPro le for the Busy Developer V ctor Orozco 6 de Dezembro de 2018 @tuxtor 1

Obrigado

[email protected]

• @tuxtor

• http://vorozco.com

• http://github.com/tuxtor/slides

This work is licensed under a Creative Commons

Attribution-ShareAlike 3.0.

44