Distributed Systems of Microservices using Docker and Serfnode

Distributed Systems of Microservices using Docker and Serfnode

F6d5a605df582ab9ea419ebef9f400b7?s=128

Caio Carrara

October 22, 2019
Tweet

Transcript

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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
  11. 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
  12. 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
  13. 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
  14. 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
  15. 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
  16. 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
  17. 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
  18. 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
  19. 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
  20. 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
  21. 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