KAMILA SANTOS
Dev Backend Ame Digital
Desenvolvedora backend Java na Ame Digital, bacharel em ciência da
computação e co-organizadora das comunidades womakerscode,
devsjavagirl, perifacode e nerdzao. Já palestrei em algumas conferências
como Java Global Summit 2020 e The Developers Conference, além de
meetups locais.
@kamilah_santos
Slide 3
Slide 3 text
@kamilah_santos
MICROSSERVIÇOS
São uma abordagem de arquitetura no qual o software consiste de pequenas serviços
independentes que se comunicam entre si e são organizados de acordo com seus domínios de
negócio
Slide 4
Slide 4 text
@kamilah_santos
MICROSSERVIÇOS
Em arquiteturas monolíticas, os processos são extremamente acoplados e são executados como
um único serviço, se uma parte desse sistema tiver um pico de demanda, todo o restante da
arquitetura deverá escalar.
Slide 5
Slide 5 text
@kamilah_santos
MICROSSERVIÇOS
A complexidade e acoplamento dificulta a implementação de novas tecnologias, já que afeta a
aplicação como um todo.
Slide 6
Slide 6 text
@kamilah_santos
MICROSSERVIÇOS
Arquiteturas monolíticas aumentam o risco de disponibilidade dos aplicativos, processos altamente
dependentes e acoplados podem causar uma falha geral nesse único processo.
Slide 7
Slide 7 text
@kamilah_santos
MICROSSERVIÇOS
Já com a arquitetura de microsserviços, a arquitetura é criada com seus componentes indepentes
que executam cada processo do aplicativo como um serviço.
Slide 8
Slide 8 text
@kamilah_santos
MICROSSERVIÇOS
Como são executados de forma independente, cada serviço pode ser desenvolvido em uma
tecnologia diferente, ser escalado e atualizado independente um dos outros.
Slide 9
Slide 9 text
@kamilah_santos
AUTÔNOMOS
Cada serviço pode ser desenvolvido, implantado e escalado sem interferir em outros serviços. Não
precisam compartilhar nenhum código e a comunicação ocorre através de APIs
Slide 10
Slide 10 text
@kamilah_santos
ESPECIALISTAS
Cada serviço é desenhado para resolver um problema específico, se começar a ser necessário
adicionar código de outras responsabilidades, é melhor separar esse serviço.
Slide 11
Slide 11 text
@kamilah_santos
RESILIÊNCIA
A independência do serviço aumenta a resiliência a falhas na arquitetura, se um deles tiver
problema, só afetará aquela parte do fluxo.
Slide 12
Slide 12 text
@kamilah_santos
REUTILIZAÇÃO DE CÓDIGO
A divisão em módulos com responsabilidades bem definidas permite que funções específicas de
algum serviço possam ser utilizados para complementar features em outros sem precisar
reescrever o código.
Slide 13
Slide 13 text
@kamilah_santos
LIBERDADE DE ESCOLHA DE
STACK
Os responsáveis por cada serviço podem decidir qual a melhor stack para o foco daquele serviço
Slide 14
Slide 14 text
@kamilah_santos
FÁCIL IMPLANTAÇÃO
É possível fazer entregas contínuas e testes a cada nova feature de cada novo serviço.
Slide 15
Slide 15 text
@kamilah_santos
ESCALABILIDADE FLEXÍVEL
Cada serviço pode ser escalado de forma independente para atender demandas específicas
Slide 16
Slide 16 text
@kamilah_santos
SPRING CLOUD
Fornece uma série de ferramentas que facilita a criação de aplicações distribuídas
Slide 17
Slide 17 text
@kamilah_santos
SPRING CLOUD
Possui algumas ferramentas que facilitam o gerenciamento de configurações, implementação de
service discovery, roteamento, comunicação entre serviços, load balance, circuit breakers e
mensageria,
Slide 18
Slide 18 text
@kamilah_santos
TWELVE FACTOR APPS E
SPRING?
Algumas das funcionalidades contidas no Spring facilitam a implementação de algumas "regras"
do twelve factor apps...você conhece quais são eles?
Slide 19
Slide 19 text
@kamilah_santos
TWELVE FACTOR APPS E
SPRING?
O twelve-factor são um metodologia para desenvolvimento de aplicações Saas(
software-as-a-service)/cloud native são esses os fatores:
Slide 20
Slide 20 text
@kamilah_santos
CODEBASE
Um repositório com controle de versão e vários deploys, cada microsserviço deve ter sua própria
base de dados/código.
Slide 21
Slide 21 text
CODEBASE NO SPRING
Spring oferece diversas maneiras de fazer o bootstrap da sua aplicação, por ex o initializer, com
ele gerado, já podemos vinculá-lo a um repositório
@kamilah_santos
Slide 22
Slide 22 text
@kamilah_santos
CODEBASE NO SPRING
Slide 23
Slide 23 text
@kamilah_santos
DEPENDENCIES
Declare e isole as dependências do seu projeto, incluindo dependências externas: serviços de
terceiros. banco de dados..
Slide 24
Slide 24 text
@kamilah_santos
DEPENDENCIES NO SPRING
Slide 25
Slide 25 text
DEPENDENCIES NO SPRING
@kamilah_santos
Slide 26
Slide 26 text
@kamilah_santos
CONFIG
Armazene suas configurações no ambiente, ex: config-server
Slide 27
Slide 27 text
@kamilah_santos
BACKING SERVICES
Trate os serviços que são "apoio" como recursos interlligados, eles devem ser acessados via
URL/endpoint , essa comunicação deve ser o mais simples possível.
Slide 28
Slide 28 text
BACKING SERVICES NO
SPRING
Spring JPA torna o código um pouco mais agnóstico ao banco de dados, só precisamos definir um
@Repository para poder realizar as operações básicas,
@kamilah_santos
Slide 29
Slide 29 text
@kamilah_santos
BUILD, RELEASE, RUN
Separe bem os builds e os execute em estágios/esteiras diferentes
Build: Transformar o repositório de código em um package executável.
Release: O pacote executável gerado anteriormente é aplicado em um ambiente para execução
com todas as configurações necessárias.
Run: Iniciar essa aplicação em um ambiente
Slide 30
Slide 30 text
@kamilah_santos
PROCESSES
Execute a aplicação como um ou mais processos sem armazenar seu estado (stateless).
Slide 31
Slide 31 text
@kamilah_santos
PORT BINDING
Exporte serviços via port binding, quando necessário, a visibilidade entre os serviços ocorra entre
"portas visiveis", podendo se comunicar quando necessário.
Slide 32
Slide 32 text
@kamilah_santos
CONCURRENCY
Dimensione seus serviços por um modelo de processo, quando for necessário escalar a sua
aplicação que deve ser replicada, com uma máquina mais potente.
Slide 33
Slide 33 text
@kamilah_santos
DISPOSABILITY
Maximize a robustez de suas aplicações com inicialização e "término" rápidos,
Slide 34
Slide 34 text
@kamilah_santos
DEV/PROD PARITY
Mantenha os ambientes de desenvolvimento, homologação e produção o mais semelhante
possível,
Slide 35
Slide 35 text
@kamilah_santos
LOGS
Trate logs como fluxo de eventos. Ex: SL4j
Slide 36
Slide 36 text
@kamilah_santos
Slide 37
Slide 37 text
@kamilah_santos
ADMIN PROCESSES
Executar tarefas de gerenciamento/administração como processos pontuais,
Slide 38
Slide 38 text
SERVICE DISCOVERY
@kamilah_santos
Slide 39
Slide 39 text
SERVICE DISCOVERY POSSIBILITA QUE
MICROSSERVIÇOS DESCUBRAM FACILMENTE A
ROTA DOS OUTROS SERVIÇOS QUE PRECISAM
ACESSAR
@kamilah_santos
Slide 40
Slide 40 text
MAIS CONHECIDOS:
SPRING CLOUD NETFLIX EUREKA
SPRING CLOUD CONSUL
@kamilah_santos
Slide 41
Slide 41 text
INTERFACE:
@kamilah_santos
Slide 42
Slide 42 text
IMPLEMENTAÇÃO DO SERVER
@kamilah_santos
Slide 43
Slide 43 text
IMPLEMENTAÇÃO DO SERVER
@kamilah_santos
Slide 44
Slide 44 text
IMPLEMENTAÇÃO DO SERVER
@kamilah_santos
Slide 45
Slide 45 text
IMPLEMENTAÇÃO DO CLIENT
@kamilah_santos
Slide 46
Slide 46 text
IMPLEMENTAÇÃO DO CLIENT
@kamilah_santos
Slide 47
Slide 47 text
IMPLEMENTAÇÃO DO CLIENT
@kamilah_santos
Slide 48
Slide 48 text
TAMBÉM PODE SER UTILIZADO COM O SPRING
BOOT ADMIN
@kamilah_santos
Slide 49
Slide 49 text
TAMBÉM PODE SER UTILIZADO COM O SPRING
BOOT ADMIN
@kamilah_santos
Slide 50
Slide 50 text
TAMBÉM PODE SER UTILIZADO COM O SPRING
BOOT ADMIN
@kamilah_santos
Slide 51
Slide 51 text
TAMBÉM PODE SER UTILIZADO COM O SPRING
BOOT ADMIN
@kamilah_santos
Slide 52
Slide 52 text
GATEWAY
@kamilah_santos
Slide 53
Slide 53 text
GATEWAYS TEM O PAPEL DE SER UM
INTERMEDIÁRIO NAS NOSSAS
REQUISIÇÕES PARA OUTROS SERVIÇOS.
OS MAIS CONHECIDOS: ZUUL E SPRING
CLOUD GATEWAY
@kamilah_santos
Slide 54
Slide 54 text
MAIS CONHECIDOS: ZUUL E SPRING
CLOUD GATEWAY
@kamilah_santos
Slide 55
Slide 55 text
SPRING CLOUD GATEWAY
Desenvolvido com o Spring Framework 5 , Project reator e Netty
Server
@kamilah_santos
Slide 56
Slide 56 text
IMPLEMENTAÇÃO
@kamilah_santos
Slide 57
Slide 57 text
IMPLEMENTAÇÃO
@kamilah_santos
Slide 58
Slide 58 text
IMPLEMENTAÇÃO
@kamilah_santos
Slide 59
Slide 59 text
@kamilah_santos
Slide 60
Slide 60 text
@kamilah_santos
Slide 61
Slide 61 text
@kamilah_santos
Slide 62
Slide 62 text
@kamilah_santos
Slide 63
Slide 63 text
@kamilah_santos
Slide 64
Slide 64 text
@kamilah_santos
Slide 65
Slide 65 text
ZUUL
@kamilah_santos
Slide 66
Slide 66 text
@kamilah_santos
Slide 67
Slide 67 text
@kamilah_santos
CONFIG SERVER
Permite armazenar configurações das aplicações de modo
centralizado.
Slide 68
Slide 68 text
SERVICE
@kamilah_santos
Slide 69
Slide 69 text
SERVICE
@kamilah_santos
Slide 70
Slide 70 text
SERVICE
@kamilah_santos
Slide 71
Slide 71 text
SERVICE
@kamilah_santos
Slide 72
Slide 72 text
@kamilah_santos
LOAD BALANCER
Ribon (depreciado), tem como alternativa o Spring Cloud Load
Balancer
Slide 73
Slide 73 text
@kamilah_santos
Slide 74
Slide 74 text
@kamilah_santos
LOAD BALANCER
Slide 75
Slide 75 text
@kamilah_santos
LOAD BALANCER
Slide 76
Slide 76 text
@kamilah_santos
LOAD BALANCER
Slide 77
Slide 77 text
@kamilah_santos
LOAD BALANCER
Slide 78
Slide 78 text
LOAD BALANCER
@kamilah_santos
Slide 79
Slide 79 text
@kamilah_santos
FEIGN
Facilita a utilização de clients de forma declarativa e simplificada.
Slide 80
Slide 80 text
@kamilah_santos
Slide 81
Slide 81 text
@kamilah_santos
Slide 82
Slide 82 text
@kamilah_santos
Slide 83
Slide 83 text
@kamilah_santos
CIRCUIT BREAKER
Facilita a utilização de clients de forma declarativa e simplificada.
Slide 84
Slide 84 text
@kamilah_santos
Slide 85
Slide 85 text
@kamilah_santos
CIRCUIT BREAKER
Slide 86
Slide 86 text
@kamilah_santos
CIRCUIT BREAKER
Slide 87
Slide 87 text
@kamilah_santos
CIRCUIT BREAKER
Slide 88
Slide 88 text
@kamilah_santos
Slide 89
Slide 89 text
@kamilah_santos
Slide 90
Slide 90 text
@kamilah_santos
Slide 91
Slide 91 text
@kamilah_santos
SQS
É um serviço de filas de mensagens gerenciado que possibilita o
desacoplamento e a escalabilidade .
Slide 92
Slide 92 text
@kamilah_santos
SQS
Slide 93
Slide 93 text
@kamilah_santos
SQS
Slide 94
Slide 94 text
@kamilah_santos
SQS
Slide 95
Slide 95 text
@kamilah_santos
SQS
Slide 96
Slide 96 text
@kamilah_santos
SNS
É um serviço de mensagens para comunicação de sistema para
sistema e de aplicativo para pessoa (A2P)
Slide 97
Slide 97 text
@kamilah_santos
SNS
Slide 98
Slide 98 text
@kamilah_santos
SNS
Slide 99
Slide 99 text
@kamilah_santos
SNS
Slide 100
Slide 100 text
@kamilah_santos
ELASTIC CACHE
Slide 101
Slide 101 text
@kamilah_santos
Slide 102
Slide 102 text
@kamilah_santos
OUTRAS FEATURES DO
SPRING CLOUD
https://spring.io/projects/spring-
cloud