Contêineres e VMs
no mundo dos E-
commerces
About me
▫ TI desde 2000
▫ Técnico em Telecom
▫ PHP ZCE
▫ Devop na Global Fashion Group
▫ Instrutor
▫ Autor
▫ Pai
Merchan
http://aprendendodocker.com.br
Agenda
Máquinas Físicas
Máquinas Virtuais
Contêineres
Comparativo
Onde usar cada um
Disclaimer:
I am not a cloud specialist
Máquinas Físicas
O início
▫ Escolher datacenterMáquinas Físicas
Máquinas Físicas
▫ Escolher datacenter
▫ Contratar link de internet
▫ Escolher datacenter
▫ Contratar link de internet
▫ Contratar links de voz
Máquinas Físicas
▫ Escolher datacenter
▫ Contratar link de internet
▫ Contratar links de voz
▫ Comprar e configurar roteadores
Máquinas Físicas
▫ Escolher datacenter
▫ Contratar link de internet
▫ Contratar links de voz
▫ Comprar e configurar roteadores
▫ Comprar e configurar servidores
Máquinas Físicas
▫ Escolher datacenter
▫ Contratar link de internet
▫ Contratar links de voz
▫ Comprar e configurar roteadores
▫ Comprar e configurar servidores
▫ Aguardar terceiros provisionar e
fazer as instalações.
Máquinas Físicas
Máquinas Físicas
▫ Escolher datacenter
▫ Contratar link de internet
▫ Contratar links de voz
▫ Comprar e configurar roteadores
▫ Comprar e configurar servidores
▫ Aguardar terceiros provisionar e
fazer as instalações.
▫ Botar para rodar
▫ Monitorar custosMáquinas Físicas
▫ Monitorar custos
▫ Monitorar funcionamento
Máquinas Físicas
▫ Monitorar custos
▫ Monitorar funcionamento
▫ Monitorar utilização
Máquinas Físicas
▫ Monitorar custos
▫ Monitorar funcionamento
▫ Monitorar utilização
▫ Escalabilidade lenta
Máquinas Físicas
▫ Monitorar custos
▫ Monitorar funcionamento
▫ Monitorar utilização
▫ Escalabilidade lenta
▫ Aplicações monolíticas
Máquinas Físicas
Máquinas Físicas
▫ Monitorar custos
▫ Monitorar funcionamento
▫ Monitorar utilização
▫ Escalabilidade lenta
▫ Aplicações monolíticas
▫ Caso de falhas tinha que ir no
datacenter
On-Premises
Aplicação
Dados
Runtime
Middleware
Sistema Operacional
Virtualização
Servidor
Armazenamento
Rede
● Cliente
● Fornecedor
Legenda
Quem trabalha com máquinas
físicas?
Máquinas Virtuais
Evolução
▫ Escolher tipo de cloud
(IAAS/PAAS)
Máquinas
Virtuais
▫ Escolher tipo de cloud
(IAAS/PAAS)
▫ Escolher provedor de Cloud
Máquinas
Virtuais
▫ Escolher tipo de cloud
(IAAS/PAAS)
▫ Escolher provedor de Cloud
▫ Contratar os serviços do provedor
Máquinas
Virtuais
▫ Escolher tipo de cloud
(IAAS/PAAS)
▫ Escolher provedor de Cloud
▫ Contratar os serviços do provedor
▫ Provisionar e configurar via painel
de controle ou API
Máquinas
Virtuais
▫ Escolher tipo de cloud
(IAAS/PAAS)
▫ Escolher provedor de Cloud
▫ Contratar os serviços do provedor
▫ Provisionar e configurar via painel
de controle ou API
▫ Faz o deploy da aplicação
Máquinas
Virtuais
Máquinas
Virtuais
▫ Escolher tipo de cloud
(IAAS/PAAS)
▫ Escolher provedor de Cloud
▫ Contratar os serviços do provedor
▫ Provisionar e configurar via painel
de controle ou API
▫ Faz o deploy da aplicação
▫ Bota pra rodar
IAAS - Infrastructure As A Service
Aplicação
Dados
Runtime
Middleware
Sistema Operacional
Virtualização
Servidor
Armazenamento
Rede
● Cliente
● Fornecedor
Legenda
PAAS - Platform As A Service
Aplicação
Dados
Runtime
Middleware
Sistema Operacional
Virtualização
Servidor
Armazenamento
Rede
● Cliente
● Fornecedor
Legenda
▫ Monitorar custosMáquinas
Virtuais
▫ Monitorar custos
▫ Monitorar funcionamento
Máquinas
Virtuais
▫ Monitorar custos
▫ Monitorar funcionamento
▫ Monitorar utilização
Máquinas
Virtuais
▫ Monitorar custos
▫ Monitorar funcionamento
▫ Monitorar utilização
▫ Escalabilidade rápida
Máquinas
Virtuais
▫ Monitorar custos
▫ Monitorar funcionamento
▫ Monitorar utilização
▫ Escalabilidade rápida
▫ Aplicações quebrada em serviços
Máquinas
Virtuais
Máquinas
Virtuais
▫ Monitorar custos
▫ Monitorar funcionamento
▫ Monitorar utilização
▫ Escalabilidade rápida
▫ Aplicações quebrada em serviços
▫ Caso de falhas basta corrigir e re-
provisionar
Contêineres
Novo paradigma
Contêineres
E aí como que se faz com
contêineres?
Contêineres
E aí como que se faz com
contêineres?
Primeiramente veremos as
características de cada um.
Máquinas Físicas
Sistema Operacional
Bins/Libs Bins/Libs
App1 App2
Máquinas
Virtuais
Hypervisor
SO Guest SO Guest
App1 App2
Sistema Operacional
Bins/Libs Bins/Libs
Contêineres
Container Engine
App1 App2
Sistema Operacional
Bins/Libs Bins/Libs
Qual modelo você NÃO usaria
no seu e-commerce hoje?
Comparativo entre
VMs e Contêineres
● Isolamento no nível de
sistema operacional
● Isolamento no nível de
máquina
Máquinas Virtuais Contêineres
● Isolamento no nível de
sistema operacional
● Aplicações são
processos no Host
● Isolamento no nível de
máquina
● Aplicações usam o
kernel do guest
Máquinas Virtuais Contêineres
● Isolamento no nível de
sistema operacional
● Aplicações são
processos no Host
● Provisionamento rápido
● Isolamento no nível de
máquina
● Aplicações usam o
kernel do guest
● Provisionamento lento
Máquinas Virtuais Contêineres
Máquinas Virtuais Contêineres
● Isolamento no nível de
máquina
● Aplicações usam o
kernel do guest
● Provisionamento lento
● KVM, Xen, OracleVM,
VMware, VirtualBox
● Isolamento no nível de
sistema operacional
● Aplicações são
processos no Host
● Provisionamento rápido
● LXC, Docker, rkt,
kubernetes
Máquinas Virtuais Contêineres
● Isolamento no nível de
máquina
● Aplicações usam o
kernel do guest
● Provisionamento lento
● KVM, Xen, OracleVM,
VMware, VirtualBox
● Rodam outros SOs guest
● Isolamento no nível de
sistema operacional
● Aplicações são
processos no Host
● Provisionamento rápido
● LXC, Docker, rkt,
kubernetes
● Somente Linux*
Onde usar cada um?
Ambiente de
Dev
Quais os focos em montar um
ambiente de dev?
Quais os focos em montar um
ambiente de dev?
▫ Provisionar rápido
Ambiente de
Dev
Ambiente de
Dev
Quais os focos em montar um
ambiente de dev?
▫ Provisionar rápido
▫ Fácil montar, destruir e remontar
Ambiente de
Dev
Quais os focos em montar um
ambiente de dev?
▫ Provisionar rápido
▫ Fácil montar, destruir e remontar
▫ E PRINCIPALMENTE:
Ambiente de
Dev
Monte o mais parecido ao
ambiente de produção possível.
Inclusive as versões utilizadas.
Ambiente de
Dev
Monolito => Vai de VM
Ambiente de
Dev
Monolito => Vai de VM
PHP
MySQL
Redis
Varnish
RabbitMQ
Ambiente de
Dev
Microservice => Vai de container
Ambiente de
Dev
Microservice => Vai de container
PHP
MySQL Redis
Varnish RabbitMQ
Esteira de
entrega
Quais os focos em montar ambientes
para a esteira de entrega?
Quais os focos em montar ambientes
para a esteira de entrega?
▫ Que o código seja integrado de
maneira contínua (CI)
Esteira de
entrega
Quais os focos em montar ambientes
para a esteira de entrega?
▫ Que o código seja integrado de
maneira contínua (CI)
▫ Testes sejam feitos
Esteira de
entrega
Esteira de
entrega
Quais os focos em montar ambientes
para a esteira de entrega?
▫ Que o código seja integrado de
maneira contínua (CI)
▫ Testes sejam feitos
▫ Um artefato "deployável" seja
gerado
Esteira de
entrega
Quais os focos em montar ambientes
para a esteira de entrega?
▫ Que o código seja integrado de
maneira contínua (CI)
▫ Testes sejam feitos
▫ Um artefato "deployável" seja
gerado
Dê preferência para contêineres.
Esteira de
entrega
▫ Com contêineres não é necessário
instalar todas as dependências
para que suas aplicações sejam
testadas e empacotadas.
Esteira de
entrega
▫ Com contêineres não é necessário
instalar todas as dependências
para que suas aplicações sejam
testadas e empacotadas.
▫ Contêinerize comandos:
docker run --rm --volume
"$PWD":/app composer/composer
install
E o ambiente de produção? Uso
Contêineres ou VMs?
Quais os focos em montar um
ambiente de produção?
Em produção
Quais os focos em montar um
ambiente de produção?
▫ Alta Disponibilidade
Em produção
Quais os focos em montar um
ambiente de produção?
▫ Alta Disponibilidade
▫ Escalabilidade
Em produção
Quais os focos em montar um
ambiente de produção?
▫ Alta Disponibilidade
▫ Escalabilidade
▫ Redundâncias
Em produção
▫ VMs ainda são mais maduras out-
of the-box
Em produção
▫ VMs ainda são mais maduras out-
of the-box
▫ Contêineres sobre VMs overhead
de 5-8% (bit.ly/research-ibm)
Em produção
▫ VMs ainda são mais maduras out-
of the-box
▫ Contêineres sobre VMs overhead
de 5-8% (bit.ly/research-ibm)
▫ Contêineres exigem muitos
cuidados.
Em produção
Em produção
▫ VMs ainda são mais maduras out-
of the-box
▫ Contêineres sobre VMs overhead
de 5-8% (bit.ly/research-ibm)
▫ Contêineres exigem muitos
cuidados.
▫ Em bare metal temos uma
otimização de recursos usando
contêineres
Contêineres em
produção
Cuidados
Dev Prod
Contêineres em
produção
▫ Migre apenas um serviço por vez
Contêineres em
produção
▫ Migre apenas um serviço por vez
▫ Começe por serviços pequenos.
Ex. APIs, load balancers.
▫ Migre apenas um serviço por vez
▫ Começe por serviços pequenos.
Ex. APIs, load balancers.
▫ Sistema de Deploy diferenciado
Contêineres em
produção
▫ Migre apenas um serviço por vez
▫ Começe por serviços pequenos.
Ex. APIs, load balancers.
▫ Sistema de Deploy diferenciado
▫ Construção de nova imagem
Contêineres em
produção
Contêineres em
produção
▫ Migre apenas um serviço por vez
▫ Começe por serviços pequenos.
Ex. APIs, load balancers.
▫ Sistema de Deploy diferenciado
▫ Construção de nova imagem
▫ Push da imagem para
repositório
Contêineres em
produção
▫ Migre apenas um serviço por vez
▫ Começe por serviços pequenos.
Ex. APIs, load balancers.
▫ Sistema de Deploy diferenciado
▫ Construção de nova imagem
▫ Push da imagem para
repositório
▫ Imagem é testada no CI server
Contêineres em
produção
▫ Serviço de registry rodando
Contêineres em
produção
▫ Serviço de registry rodando
▫ Registry de Alta disponibilidade
Contêineres em
produção
▫ Serviço de registry rodando
▫ Registry de Alta disponibilidade
▫ Na mesma network do CI
Contêineres em
produção
▫ Serviço de registry rodando
▫ Registry de Alta disponibilidade
▫ Na mesma network do CI
▫ Storage de alta performance
Contêineres em
produção
▫ Serviço de registry rodando
▫ Registry de Alta disponibilidade
▫ Na mesma network do CI
▫ Storage de alta performance
▫ Gerencia de hosts
Contêineres em
produção
▫ Serviço de registry rodando
▫ Registry de Alta disponibilidade
▫ Na mesma network do CI
▫ Storage de alta performance
▫ Gerencia de hosts
▫ Gerencia de configurações
Contêineres em
produção
▫ Serviço de registry rodando
▫ Registry de Alta disponibilidade
▫ Na mesma network do CI
▫ Storage de alta performance
▫ Gerencia de hosts
▫ Gerencia de configurações
▫ Cluster e Envs
Contêineres em
produção
▫ Serviço de registry rodando
▫ Registry de Alta disponibilidade
▫ Na mesma network do CI
▫ Storage de alta performance
▫ Gerencia de hosts
▫ Gerencia de configurações
▫ Cluster e Envs
▫ Chaves e senhas
Contêineres em
produção
▫ Health checks melhores que em
VMs
Contêineres em
produção
▫ Health checks melhores que em
VMs
▫ Possibilidade de RollBack
Contêineres em
produção
▫ Health checks melhores que em
VMs
▫ Possibilidade de RollBack
▫ Logs centralizados e indexados
Contêineres em
produção
▫ Health checks melhores que em
VMs
▫ Possibilidade de RollBack
▫ Logs centralizados e indexados
▫ Métricas diferentes,
monitoramento diferenciado
▫ Repositório de imagensContêineres em
produção
▫ Repositório de imagens
▫ Gerenciamento de hosts
Contêineres em
produção
▫ Repositório de imagens
▫ Gerenciamento de hosts
▫ Gerenciamento de configurações
Contêineres em
produção
▫ Repositório de imagens
▫ Gerenciamento de hosts
▫ Gerenciamento de configurações
▫ Locais
Contêineres em
produção
▫ Repositório de imagens
▫ Gerenciamento de hosts
▫ Gerenciamento de configurações
▫ Locais
▫ Do cluster
Contêineres em
produção
▫ Gerencia de OrquestraçãoContêineres em
produção
▫ Gerencia de Orquestração
▫ Como organizar o cluster
Contêineres em
produção
▫ Gerencia de Orquestração
▫ Como organizar o cluster
▫ Organizar contêineres nos
clusters
Contêineres em
produção
▫ Gerencia de Orquestração
▫ Como organizar o cluster
▫ Organizar contêineres nos
clusters
▫ Definir estratégia de schedule
Contêineres em
produção
▫ Gerencia de Orquestração
▫ Como organizar o cluster
▫ Organizar contêineres nos
clusters
▫ Definir estratégia de schedule
▫ Definir como balancear o
tráfego entre os contêineres
Contêineres em
produção
▫ Gerencia de Orquestração
▫ Como organizar o cluster
▫ Organizar contêineres nos
clusters
▫ Definir estratégia de schedule
▫ Definir como balancear o
tráfego entre os contêineres
▫ Configurar service discovery
Contêineres em
produção
▫ SegurançaContêineres em
produção
▫ Segurança
▫ Imagem (docker bench,
nautilus, etc.)
Contêineres em
produção
▫ Segurança
▫ Imagem (docker bench,
nautilus, etc.)
▫ Acesso, remover Linux
capabilities
--cap-drop sys_chroot
Contêineres em
produção
▫ Segurança
▫ Imagem (docker bench,
nautilus, etc.)
▫ Acesso, remover Linux
capabilities
--cap-drop sys_chroot
▫ Mudar contêineres para
rodar sem root
Contêineres em
produção
▫ Utilizar framework do
kernel (SELinux ApArmor)
--selinux-enabled
Contêineres em
produção
▫ Utilizar framework do
kernel (SELinux ApArmor)
--selinux-enabled
▫ Limitar recursos
--cpu-shares=512
Contêineres em
produção
▫ MonitoramentoContêineres em
produção
▫ Monitoramento
▫ Sysdig
Contêineres em
produção
▫ Monitoramento
▫ Sysdig
▫ Datadog
Contêineres em
produção
▫ Monitoramento
▫ Sysdig
▫ Datadog
▫ New Relic
Contêineres em
produção
▫ Monitoramento
▫ Sysdig
▫ Datadog
▫ New Relic
▫ Stats (docker stats)
Contêineres em
produção
▫ Não utilizar SSH, gerencie
contêineres via Host
Contêineres em
produção
São cuidados para evitar isso:
Não existe bala de prata, cada
problema tem algumas
soluções possíveis, é questão de
analisar e escolher.
Fontes Imagens: baixandowallpapers.com e clipartpanda.
com
Apresentação: slidescarnival.com

Contêineres e VMs no mundo dos E-commerces (Devcommerce2016)