Micro serviços
Monolitos
E um pouco de kubernetes
André Claudino
https://www.linkedin.com/in/andreclaudino/
https://github.com/andreclaudino
http://t.me/aclaudino
- PhD. Física Computacional.
- Head do time de dados e IA.
- Fã de star trek.
- Feio, mas gente boa.
Participem!
Como
parece
ser
Serviço
Software cujo objetivo é prover resultados como resposta a algum estímulo, a partir de entradas e/ou de seu estado interno.
Micro serviço
Um monolito menor, que consome menos recursos e tem menos endpoints
Nano serviço
Um monolito ainda menor, que consome ainda menos recursos e tem ainda menos endpoints
Monolito
Serviço que responde por diferentes aspectos do ciclo de vida do negócio.
Como
Realmente
É
Monolito
Base monolítica
Software monolítico
- Responde por diferentes aspectos do negócio
- Pode compartilhar com outros serviços o acesso às diversas bases de dados.
- Arquitetura prioriza software ao negócio
Micro-serviço
- Responsável por uma parte específica do negócio
- Domina o acesso às suas bases de dados
- É a fonte da verdade sobre seus dados
- Arquitetura voltada para o negócio
Nano-serviço
- Responsável por apenas um detalhe do negócio
- Capaz de escalar rapidamente
- Em geral responde por apenas um recurso.
- Orientado a eventos
- Alta resiliência
Vantagens
dos
microserviços
Time to market
- Ciclos de desenvolvimentos menores
- Melhorias mais rápidas
- Correções mais rápidas
- Avaliação mais fácil
Escalabilidade
- Menos recursos implicam escala mais rápida
- Escala mais rápida implica em maior resiliência do ecossistema
- Menos recursos desperdiçados, implicam em menos gastos
Resiliência
- Falhas pontuais não afetam todo o ecossistema
- Nós saudáveis seguram as pontas dos nós falhos
- Nós falhos podem ser rapidamente substituídos
Desvantagens
dos
microserviços
Latência
- Chamadas entre serviços demoram mais que chamadas internas do software
- Pode ser otimizado aumentando a concorrência
Complexidade
- Gerenciar vários serviços integrados é mais complexo que um monolito
- Gerenciar vários serviços individualmente é menos complexo que administrar um monolito
Recursos
- Na migração direta, microserviços consomem mais recursos (footprint)
- Porém, ao escalar, microserviços são muito mais eficientes
Refatorando um
monolito
Negócio > código
- Um serviço muda apenas por causa do negócio ou por sua tecnologia, nunca por causa de outro serviço.
- Bases de dados devem ser logicamente desacopladas
- Um serviço representa um aspecto do negócio, sua interface, representa como interagir com essa regra
Tecnologia desacoplada
- Cada serviço deve usar a melhor tecnologia pra sua função
- Interface entre serviços deve ser bem definida e respeitada.
Responsabilidade
- Deve tratar seus erros
- Deve impor respeito ao contrato
- Deve respeitar o contrato
- Deve se adequar às variações de requisição
Orquestradores
de
microserviços
Objetivos
- Facilitar visibilidade e adminstração
- Automatizar escalabilidade
- Distribuir recursos de hardware
- Isolar ambientes, como desenvolvimento e produção ou entre times
Kubernetes
Unidades básicas: Namespace
apiVersion: v1
kind: Namespace
metadata:
name: development
Unidades básicas: Pod
apiVersion: v1
kind: Pod
metadata:
namespace: development
name: my-api
labels:
role: my-role
spec:
containers:
- name: myapi
image: myapi:1.0.0
ports:
- name: web
containerPort: 8080
protocol: TCP
Unidades básicas
Unidades básicas: Service
apiVersion: v1
kind: Service
metadata:
namespace: development
name: my-service
spec:
selector:
role: my-role
ports:
- protocol: TCP
port: 80
targetPort: 8080
http://my-service.development.svc:80
Hands-On
Microserviços
By André Claudino
Microserviços
- 85