ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker...

75
um erp para a nuvem ARQUITETANDO E EVOLUINDO @andremidea @mvlbarcelos

Transcript of ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker...

Page 1: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

u m e r p p a r a a n u v e m

ARQUITETANDO E EVOLUINDO

@andremidea @mvlbarcelos

Page 2: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

André Midea

Dev focado em Ops na Bluesoft.

www.andremidea.com

@andremidea

Page 3: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

@mvlbarcelos

Marcus Barcelos

Arquiteto de soluções.

Objetivo de estrangular o legado! :)

Page 4: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

a EMPRESA

Page 5: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

A EMPRESA

Page 6: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

A EMPRESA

carreiras.bluesoft.com.br labs.bluesoft.com.br

Page 7: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo
Page 8: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

DESAFIO

Migrar de um data center para a AWS

Page 9: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

ROADMAP

Identificar Problemas

2 Soluções

Solução para Problemas internos

Page 10: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

ANTES

Page 11: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

Foi pra aws

Page 12: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

depois

Availability Zone #1 Availability Zone #2

Cliente 1,2Cliente 3 Cliente 4,5,6 Cliente …..

Web app

WEB  APP WEB  APP

Page 13: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

CONSEQUENCIAS

PIOPS.

Tipos de instancias.

Multi-AZ

Page 14: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

WE HAVE A PROBLEM

Nosso software não foi feito pensando

na nuvem.

Page 15: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

Precisamos Evoluir!

Page 16: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

Mas… Como?

Page 17: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

IDENTIFICAR

O que Conseguimos

Mudar?

AGIR

Alterar!

MEDIR

Ver se o que alteramos deu

resultado

VER ReSULTA

DO

O que fizemos deu certo?

PROCESSO

Page 18: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

“Uma longa caminhada começa com o primeiro passo” –Lao Tse

Page 19: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

identif icar

Processos pesados concorrendo com o usuário

Processamento de arquivos texto com grande volume direto no web server

Não Escala na Horizontal

Page 20: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

AçÃO

Processos pesados concorrendo com o usuário

Processamento de arquivos texto com grande volume direto no web server

Não Escala na Horizontal

Page 21: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

ACÃO

HACKATHON!! =)

Page 22: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

MUITAS ÍDEIAS

Page 23: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

IdéÉÉias

Page 24: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

TORNADO 1.0

Processamento Pesado

Assíncrono vs Síncrono

Emagrecer o ERP

Escala na Horizontal

Page 25: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

Arquitetura

Web app

Web  app

Amazon SQS

Tornado

Cliente  3

Cliente  1

Cliente  2

Enviar  NF-­‐e

Gerar  SPED

Task  X

Task  Y

Task  Z

Amazon S3 Amazon RDS Amazon Redshift PostgreSQL

Page 26: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

BÔNUS

Escala na Horizontal

Menos Carga no WebServer

Processamento em Fila

10.000 Tarefas/dia retirados do web server

Tolerancia a Falha

Page 27: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

Porém…. o ônus sempre acompanha

o bônus

Page 28: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

ÔNUS

Estrutura Complexa

Deploy Centralizado

Code Ownership

Adoção do Time não foi boa.

Page 29: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

TORNAdo 2.0

Pegar os pontos positivos da primeira versão e melhorar!

TORNADO 1 = PERFORMANCE

TORNADO 2 = FACILIDADE

Page 30: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

Objetivos

OWNERSHIP

ONECLICK DEPLOY

SIMPLE DEV ENV

Page 31: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

Microservices é hype… vamos

usar.

Page 32: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

AçÕES

Separar Tasks em Serviços

Processo que controla Serviços

Deploy Individual e sem Downtime

Page 33: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

ARQUITETURA 2.0

Page 34: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

FLUXO

Page 35: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

BENEFÍCIOS

Tarefas Isoladas

Deploy sem Downtime e a qualquer momento

Desenvolvimento não precisa conhecer da infra

Page 36: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

Desvantagens

Maior Complexidade no Manager

Mais Coisas para Gerenciar

Page 37: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

TORNADO CLI

./newtask.sh• Archetype

• Cria Repositório

• Gera Pipeline no Jenkins

• Gera todas configurações

Page 38: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

ONE CLICK DEPLOY

Page 39: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

DASHBOARD

Page 40: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

APRENDIZADO

NÃO CENTRALIZE

ISOLAMENTO

RASTREABILIBADE

USE A NUVEM A SEU FAVOR

Page 41: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

NEXT STEPS

CONTAINER SERVICE!

Page 42: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

1

2

34

51. Nova Release

2. Deploy - Docker Image3. Mudança de Versão Subir docker image correspondente4. Enviar Tasks para versão nova5. Matar Serviço Antigo

FLOW

Page 43: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

DOcker maven plugin

<build> <plugins> ... <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.2.4</version> <configuration> <imageName>task-sped-fiscal</imageName> <dockerDirectory>docker</dockerDirectory> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin> ... </plugins></build>

Page 44: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

mvn clean package docker:build -DpushImage

Page 45: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

Final

Page 46: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

U S E O Q U E A N U V E M O F E R C E

- M A N U T E N ç Ã O+ I N O V A Ç Ã O

Page 47: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

AçÃO

Processos pesados concorrendo com o usuário

Processamento de arquivos texto com grande volume direto no web server

Não Escala na Horizontal

Page 48: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

ANTES

Page 49: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

Problemas

Consumo de CPU Contínuo

Não Escala

Cupons param de processar se webserver fica fora

Não temos garantia de processamento

Page 50: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

Objetivos

RESILIÊNCIA

ESCALABILIDADE

NÃO AFETAR USUÁRIO

Page 51: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

COMO?

Lembrando… Use e abuse o que a cloud oferece!

Page 52: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

http://aws.amazon.com/pt/kinesis/

Page 53: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

DEPOIS

Page 54: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

benefícios

22% de requests a menos

Disponibilidade

Escala Horizontalmente

Acompanhamento de Venda em Tempo Real

Usuários não são mais afetados

Page 55: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

Os Desafios não Acabam :)

Page 56: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

IDENTIFICAR

O que Conseguimos

Mudar?

AGIR

Alterar!

MEDIR

Ver se o que alteramos deu

resultado

VER ReSULTA

DO

O que fizemos deu certo?

DEPLOY

Deploy Está Lento

Teste não Passa

Teste passana minha máquina

Page 57: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

Perfomance boa, entrega devagar…

não está certo

Page 58: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

Identif icar

Demora para fazer o build.

Ambiente de dev ≠ Ambiente de build.

Insegurança para Entregar.

Feedback rapido por equipes.

Page 59: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

Objetivos

BUILD RÁPIDO

RELEASE CONFIÁVEL

AMBIENTE PADRONIZADO

Page 60: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

Abordagem

Amazon EC2 Spot Instances

Page 61: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

jenkis

Integração Continua.

Criação das instancias SPOT.

Deploy.

Page 62: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

Docker image

Firefox headless.

Ruby + Watir.

Java + Tomcat.

Volume montado (war + testes)

Docker hub (mesma imagem dev / build)

Page 63: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

ec2 spot

Uma instancia por equipe

Custo +- U$ 20,00/instancia

Page 64: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

ansible

SPOT cai com frequência

Criar a SPOT pelo Jenkis.

Page 65: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

Docker?

Passa na minha maquina, mas quebra no Jenkins!

Page 66: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

PQ docker?

Desenvolvimento Build/Produção

Page 67: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

Já rodou os teste na sua maquina com o docker?

Page 68: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

então… RODA LÁ!

Page 69: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

FLUXO

Page 70: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

Valeu a pena?

Sem docker

Com docker

Page 71: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

Valeu a pena?

Page 72: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

wrap up

Conheça bem os produtos que sua

provedora de cloud oferece

Page 73: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

wrap up

BigBang não é viável em um produto grande.

Começa pelas bordas.

Page 74: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

wrap up

Delegue o máximo possível para a

provedora de cloud.

Page 75: ARQUITETANDO E EVOLUINDO - QConSP€¦ · Deploy - Docker Image 3. Mudança de Versão Subir docker image correspondente 4. Enviar Tasks para versão nova 5. Matar Serviço Antigo

Obrigado!