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