Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Distributed Systems of Microservices using Docker and Serfnode

Distributed Systems of Microservices using Docker and Serfnode

Caio Carrara

October 22, 2019
Tweet

More Decks by Caio Carrara

Other Decks in Technology

Transcript

  1. Distributed Systems of
    Microservices using Docker and
    Serfnode
    Seminário para disciplina Computação Distribuída (INE410130)
    Caio William Camargo Carrara
    Outubro, 2019
    1

    View Slide

  2. Agenda
    ● Introdução
    ● Modelos de virtualização: Máquinas Virtuais e Containers
    ● Microsserviços
    ● Descoberta de serviços
    ● Projetos para a descoberta de serviços
    ● Serfnode - uma solução para descoberta de serviços
    ● Conclusão
    2

    View Slide

  3. Introdução
    3

    View Slide

  4. Containers, microsserviços e novos desafios
    ● Containers
    ○ Cada vez mais populares
    ○ Mais leves do que outros modelos de virtualização predecessores
    ○ A popularidade cresce junto com a utilização de microsserviços
    ● Um dos problemas ao se usar containers e microsserviços é a
    descoberta de serviços
    ● O Serfnode é uma solução para resolver o problema de descoberta de
    serviços na utilização de containers, mais especificamente Docker
    4

    View Slide

  5. Modelos de Virtualização
    5

    View Slide

  6. Máquinas virtuais e Containers
    6

    View Slide

  7. Máquinas virtuais e Containers
    Máquinas Virtuais Containers
    Abstração de hardware Virtualização de chamadas de sistema
    Inicialização na escala de minutos Inicialização na escala de segundos
    Cada máquina virtual possui SO completo Containers compartilham SO do host
    7

    View Slide

  8. Containers
    ● A tecnologia não é nova
    ○ chroot (1979)
    ○ BSD Jails (2000)
    ○ Linux LXC (2008)
    ● São atrativos, entre outros motivos, por disponibilizar isolamento das
    aplicações em um ambiente compartilhado
    ● Mitigam vetores de ataques tradicionais através do isolamento de rede,
    sistema de arquivos e consumo de recursos
    8

    View Slide

  9. Docker
    ● Pode ser considerado uma evolução da tecnologia de containers
    ● Provê:
    ○ Integração das tecnologias de containers
    ○ Runtime único, centralizado e leve
    ○ API para gerenciamento e execução de containers
    ○ API para gerenciamento de imagens de containers
    ● Aplicação e dependências empacotadas unicamente
    ● Possibilita a elaboração de arquiteturas de sistemas complexos de
    forma mais simples e eficiente
    9

    View Slide

  10. Microsserviços
    10

    View Slide

  11. Microsserviços
    11

    View Slide

  12. Componentes vs Microsserviços
    ● Componentes: módulos de software independentes e substituíveis,
    invocados através de chamadas em memória (compartilhada)
    ● Microsserviços: processo separado que utiliza mensagens para se
    comunicar com outras partes do sistema. Geralmente microsserviços
    se baseiam em RPC ou protocolos baseados na web como TCP e HTTP
    para se comunicar
    12

    View Slide

  13. Docker + Microsserviços
    13

    View Slide

  14. Microsserviços
    14

    View Slide

  15. Descoberta de serviços
    15

    View Slide

  16. Descoberta de Serviços
    ● É comum instâncias redundantes de um serviço ser parada e
    inicializada sob demanda
    ● Serviços podem não estar disponíveis a qualquer momento. Pelo menos
    não no mesmo local
    ● Enquanto containers simplificam a implantação e distribuição de
    serviços, eles fazem muito pouco para solucionar a comunicação entre
    serviços
    16

    View Slide

  17. Descoberta de Serviços - conceitos comuns
    importantes
    ● Registro de serviços: pode ser centralizado ou distribuído
    ● Monitoramento de serviços: uma instância de um serviço só entra no
    registro se passar pelos testes de monitoramento
    ● Distinção de serviços: soluções para descoberta de serviços
    necessitam de alguma forma de escolha quando múltiplas instâncias de
    um mesmo serviço está disponível
    ○ Minimização de distância
    ○ Minimização de provedores usados
    ○ Mais nova/velha instância disponível
    17

    View Slide

  18. Projetos para a descoberta de
    serviços
    18

    View Slide

  19. Consul
    ● Solução para descoberta de serviços e gerenciamento de configurações
    distribuídas
    ○ Monitoramento robusto
    ○ Checagem de saúde dos serviços (health checking)
    ● Modelo cliente servidor
    ● Se baseia em um conjunto de nós servidores
    ○ Servidores possuem a informação sobre onde estão os serviços
    ● Possui consistência forte
    ● Não suporta (nativamente) serviços rodando em Docker
    19

    View Slide

  20. Synapse (AirBnB)
    ● Projetado para suportar projetos Docker
    ● Baseado no HAProxy
    ○ Roteia requests de um serviço consumidor no mesmo host para um provedor dentro
    do mesmo cluster
    ● Atualizações no HAProxy é feito por watchers que monitoram
    mudanças
    ○ AWS EC2
    ○ Docker
    ○ Zookeeper
    20

    View Slide

  21. CoreOS + etcd
    ● Armazenamento chave-valor distribuído e confiável
    ● Foco em facilidade de uso e performance
    21

    View Slide

  22. Orquestração
    ● Processo de implantação de containers em um cluster de máquinas
    ● Soluções de orquestração geralmente não oferecem soluções robustas
    para descoberta de serviços
    ● Docker Compose
    ○ Solução bem limitada de descoberta de serviços
    ○ Funciona apenas em um único host
    ○ Não se atualiza ao parar e reiniciar containers
    22

    View Slide

  23. Serfnode - Uma solução para
    descoberta de serviços
    23

    View Slide

  24. Serfnode - design
    ● Solução leve e simples de usar
    ● Objetivo principal é possibilitar implantação em produção de sistemas
    pequenos e médios
    ● Arquitetura completamente descentralizada
    ● Possibilidade de tornar qualquer container Docker um serf aware
    container conectando-o em um cluster
    ● Solução leve de monitoramento embutida
    24

    View Slide

  25. Serfnode - componentes
    Serf Agent Supervisor
    25

    View Slide

  26. Serf
    ● Ferramenta para cluster membership, detecção de falhas e orquestração
    descentralizada. Completamente descentralizada, tolerante a falhas e
    de alta disponibilidade
    ● Membership
    ○ Serf mantém uma lista de membros de um cluster e disponibiliza eventos quando essa
    lista de membros sofre alguma alteração
    ● Detecção de falhas e recuperação
    ● Propagação de eventos personalizados
    ○ Esses eventos podem ser usados para desencadear instalações, propagar
    configurações, etc.
    26

    View Slide

  27. Supervisor
    ● Um sistema cliente/servidor que permite o monitoramento e controle
    de processos em sistemas operacionais UNIX-like
    ● supervisord
    ○ Componente “servidor” responsável por rodar os programas filhos e mantê-los
    rodando, recuperá-los, etc.
    ● supervisorctl
    ○ Ferramenta de linha de comando para manipulação do supervisord
    27

    View Slide

  28. Serfnode - modelo
    Serfnode - parent
    Child
    image A
    Child
    image B
    Child
    image C
    28

    View Slide

  29. Serfnode - modelo
    Serfnode - parent
    Python Web
    Service
    Postgres
    database
    29

    View Slide

  30. Serfnode - modelo
    Serfnode - parent
    Python Web
    Service
    Serfnode - parent
    PostgreSQL
    Database
    Um Serfnode encapsulando uma imagem X, comporta-se exatamente como
    a imagem encapsulada
    30

    View Slide

  31. Serfnode - funcionalidades
    ● Cluster Membership (Serf)
    ● Monitoramento (Serf + supervisor)
    ● Manipulação de eventos
    ○ Membros: entrada, saída e falha
    ○ Mudanças de estado do supervisor
    ○ Eventos definidos pelo usuário
    31

    View Slide

  32. Serfnode - membership
    ● Cada membro do cluster possui uma role
    ● Membros podem possuir múltiplas roles
    ● A mesma role pode estar associada a mais de um membro
    ● Serfnode associa role e endereço no arquivo /etc/hosts
    ○ O arquivo é atualizado nas ocorrências de eventos de membership
    32

    View Slide

  33. Serfnode - configuração
    ---
    serfnode:
    role: my_role
    children:
    - my_container:
    image: ubuntu
    command: sleep infinity
    volumes:
    - /tmp:/host
    environment:
    MY_VAR: 1
    working_dir: /host 33

    View Slide

  34. Serfnode
    34

    View Slide

  35. Conclusão
    35

    View Slide

  36. Conclusão
    ● O desenvolvimento de microsserviços com containers possibilita maior
    independência no desenvolvimento, implantação e escalabilidade de
    soluções
    ● A tecnologia de containers, Docker mais especificamente, impõe
    desafios ainda não completamente solucionados: a descoberta de
    serviços é um deles
    ● Serfnode é uma solução leve, fácil de usar e que consegue tornar
    qualquer imagem Docker disponível para funcionar em um cluster
    integrado
    36

    View Slide

  37. Referência
    ● Stubbs, Joe & Moreira, Walter & Dooley, Rion. (2015). Distributed
    Systems of Microservices Using Docker and Serfnode. 34-39.
    10.1109/IWSG.2015.16.
    37

    View Slide