36
Globalcode – Open4education Java Enterprise De monolito para microserviços - e algumas descobertas de performance Renan Zenkner Roggia SAP Cloud Platform Tax Service - Software Engineer

Java Enterprise De monolito para microserviços · 2019/07/18  · De monolito para microserviços-e algumas descobertas de performance ... Globalcode –Open4education O que vocês

  • Upload
    others

  • View
    8

  • Download
    0

Embed Size (px)

Citation preview

  • Globalcode – Open4education

    Java Enterprise

    De monolito para microserviços

    - e algumas descobertas de performance

    Renan Zenkner Roggia

    SAP Cloud Platform Tax Service - Software Engineer

  • Globalcode – Open4education

    O que vocês fariam se tivessem que

    aumentar o throughput do seu web

    service em 2400%?

  • Globalcode – Open4education

    De 1.000 para 25.000

    * Esses números são meramente ilustrativos

    * Proporcionais

    1.000 r/m 25.000 r/m

  • Globalcode – Open4education

    1 25

    Escalando o monolito

  • Globalcode – Open4education

    Nosso arquitetura de monolito é eficaz?

  • Globalcode – Open4education

    Um monolito

    Roteamento:

    1. Motor de calculo interno

    Processamento alto

    2. Motor de calculo externos

    Alto uso de I/O

    * Foto oficial do monólito

  • Globalcode – Open4education

    1 25

    Desperdiçando de recurso

    Roteamento

    Motor de

    calculo

    Roteamento

    Motor de

    calculo

  • Globalcode – Open4education

    Duas metades de um monolito

    Roteamento Motor de calculo

    HTTP

    RoteamentoRoteamento

  • Globalcode – Open4education

    Separando o monolito.

    Otimizamos o consumo de recursos,

    tornamos os ciclos de entrega

    independentes.

  • Globalcode – Open4education

    Duas metades de um monolito

    Roteamento Motor de calculo

    HTTP

    RoteamentoRoteamento

  • Globalcode – Open4education

    Atualizando a stack de desenvolvimento.

    Aumentamos de 1.000 r/m para 13.000

    r/m

  • Globalcode – Open4education

    Nossa aplicação é eficaz?

  • Globalcode – Open4education

  • Globalcode – Open4education

    Síncrono e bloqueante

  • Globalcode – Open4education

    Síncrono e bloqueante

  • Globalcode – Open4education

    One thread per request model

    Motor de calculo

    HTTP

    Thread

    Thread

    ThreadRequest

    Request

    Request

    HTTP

    HTTP

    HTTP

    HTTP

    HTTP

  • Globalcode – Open4education

    “Waiting within the servlet is an inefficient

    operation as it is a blocking operation that

    consumes a thread and other limited

    resources.”

    Java Servlet Specification 3.1

  • Globalcode – Open4education

  • Globalcode – Open4education

  • Globalcode – Open4education

    Assíncrono e não bloqueante

  • Globalcode – Open4education

    Source: https://www.infoq.com/articles/Servlet-and-Reactive-Stacks-Spring-Framework-5/

    https://www.infoq.com/articles/Servlet-and-Reactive-Stacks-Spring-Framework-5/

  • Globalcode – Open4education

    Alternativas ao Servlet API?

  • Globalcode – Open4education

    Spring WebFlux

    “For a non-blocking web stack to handle

    concurrency with a small number of

    threads and scale with fewer hardware

    resources.”

    Source: https://docs.spring.io/spring/docs/current/spring-framework-reference/web-reactive.html

    https://docs.spring.io/spring/docs/current/spring-framework-reference/web-reactive.html

  • Globalcode – Open4education

    Spring WebFlux

    Motor de calculoSelector Worker Thread

    HTTP

    HTTP

    HTTP

    HTTP

    HTTP

    HTTP

    WEBFLUX

  • Globalcode – Open4education

  • Globalcode – Open4education

  • Globalcode – Open4education

    Event Loop

  • Globalcode – Open4education

    Mudando pra Spring Webflux e o

    paradigma para reactive programming.

    Aumentamos de 13.000 r/m para

    19.000 r/m

  • Globalcode – Open4education

    Nossa arquitetura é eficaz.

    Nossa aplicação é eficaz.

  • Globalcode – Open4education

    A integração dos microserviços é eficaz?

  • Globalcode – Open4education

    Roteamento

    HTTP

    Motor de calculo

    HTTP

    HTTP

    HTTP

    HTTP

    HTTP

    HTTP

    WEBFLUX

  • Globalcode – Open4education

    Roteamento

    AMQP

    AMQP

    AMQP

    AMQP

    HTTP

    HTTP

    HTTP

    WEBFLUX

  • Globalcode – Open4education

    Adicionando um serviço de mensageria

    para a comunicação dos microserviços.

    Aumentamos de 19.000 r/m para

    81.000 r/m

  • Globalcode – Open4education

    Concluindo

    13879

    30370

    19429

    81537

    0

    10000

    20000

    30000

    40000

    50000

    60000

    70000

    80000

    90000

    HTTP AMQP

    MVC vs Webflux && HTTP vs AMQP

    MVC WebFlux

  • Globalcode – Open4education

    Concluindo

    Realmente precisamos de Spring

    WebFlux?

  • Globalcode – Open4education

    /RRoggia

    [email protected]

    Códigos e baselines

    de mvc e webflux