Você está na página 1de 38

MICROSERVIÇOS

Vinicius Soares e Luis Fernando Planella Gonzalez

Hoje dados e informações são as coisas mais


valiosas que tem.

Eugenio Facchini Neto


Conheça
c o livro da disciplina
-
CONHEÇA SEUS PROFESSORES 3

Conheça os professores da disciplina.​

EMENTA DA DISCIPLINA 4

Veja a descrição da ementa da disciplina. ​

BIBLIOGRAFIA DA DISCIPLINA 5

Veja as referências principais de leitura da disciplina.​

O QUE COMPÕE O MAPA DA AULA? 6

Confira como funciona o mapa da aula.

MAPA DA AULA 7

Veja as principais ideias e ensinamentos vistos ao longo da aula.

RESUMO DA DISCIPLINA 36

Relembre os principais conceitos da disciplina.​

AVALIAÇÃO 37

Veja as informações sobre o teste da disciplina.​

2
Conheça
c seus professores

-
VINICIUS SOARES
Professor Convidado

Entusiasta da Computação Distribuída, Vinicius Soares é


Head de Tecnologia em uma das principais empresas do sul
do país, ajudando clientes e empresas a alcançarem seus
resultados de forma rápida e assertiva. Apaixonado por Java,
Arquitetura de Sistemas e Computação em Nuvem, Vinicius
possui sólida experiência liderando equipes de Arquitetura
usando SOA e Microsserviços com tecnologias Open-sources.
Compartilha suas experiências através de conteúdo online e
eventos nacionais e internacionais como Devoxx, TDC e Campus
Party. Como empreendedor, já ajudou mais de 1000 pessoas
a se qualificarem para o mercado de TI e atuarem de forma
representativa na área.

LUIS FERNANDO PLANELLA


GONZALEZ
Professor PUCRS

Doutor Ciências da Computação (PUCRS, 2018).


Desenvolvedor e arquiteto Java com experiência profissional
desde 1999, certificado pela Sun como programador e
desenvolvedor de componentes web na plataforma Java.
Entusiasta de software livre.

3
Ementa da Disciplina
Estudo sobre a arquitetura de microserviços. Estudo sobre os conceitos de
particionamento de serviços, replicação e distribuição, comunicação assíncrona
via filas e Soluções serveless.

4
Bibliografia da Disciplina
As publicações destacadas têm acesso gratuito.

Bibliografia básica

MONTEIRO, Eduarda Rodrigues, et al. DevOps. Porto Alegre: Sagah, 2021.

GHIYA, Parth. TypeScript Microservices. Birminghan: Packt, 2018.

BENEVIDES, Rafael; POSTA, Christian. Microservices for Java Developers. Sebastopol:


O’Reilly Media. 2019.

Bibliografia complementar

HASSAN, Sara; BAHSOON, Rami; KAZMAN, Rick. Microservice transition and its
granularity problem: A systematic mapping study. Journal of Software: Practice and
Experience. Volkume 50, Issue 9. Setembr, 2020.

FREEMAN, E. DevOps Para Leigos. Rio de Janeiro: Editora Alta Books, 2021.

CASALICCHIO, Emiliano; IANNUCCI, Stefano.The state-of-the-art in container


technologies: Application, orchestration and security. Concurrency and Camputation
– Pratice and Experience. Volume 32.

ESCOFFIER, Clement. Building Reactive Microservices in Java: Asynchronous and


Event-Based Application Design. Sebastopol: O’Reilly Media. 2017.

YANAGA, Edson. Migrating to Microservice Databases: From Relational Monolith to


Distributed Data. Sebastopol: O’Reilly Media. 2017.

RED HAT DEVELOPER. Developing microservices on Kubernetes. [S.l.]: Red Hat,


[2021]..

5
O que compõe
o o

s
Mapa da Aula?
MAPA DA AULA
São os capítulos da aula, demarcam
momentos importantes da disciplina,
servindo como o norte para o seu FUNDAMENTOS
aprendizado.
Conteúdos essenciais sem os quais você
pode ter dificuldade em compreender a
matéria. Especialmente importante para
alunos de outras áreas, ou que precisam
EXERCÍCIOS DE FIXAÇÃO
relembrar assuntos e conceitos. Se você
estiver por dentro dos conceitos básicos
Questões objetivas que buscam
dessa disciplina, pode tranquilamente
reforçar pontos centrais da disciplina,
pular os fundamentos.
aproximando você do conteúdo de
forma prática e exercitando a reflexão
sobre os temas discutidos.​Na versão CURIOSIDADES
online, você pode clicar nas alternativas.
Fatos e informações que dizem
respeito a conteúdos da disciplina.
PALAVRAS-CHAVE
Conceituação de termos técnicos,
expressões, siglas e palavras específicas
do campo da disciplina citados durante DESTAQUES
a videoaula.
Frases dos professores que resumem
sua visão sobre um assunto ou situação.​
VÍDEOS
Assista novamente aos conteúdos
expostos pelos professores em vídeo.
Aqui você também poderá encontrar ENTRETENIMENTO
vídeos mencionados em sala de aula.
Inserções de conteúdos para tornar
a sua experiência mais agradável e
PERSONALIDADES significar o conhecimento da aula.​

Apresentação de figuras públicas


e profissionais de referência
mencionados pelo(a) professor(a).
CASE
Neste item, você relembra o case
analisado em aula pelo professor.​
LEITURAS INDICADAS
A jornada de aprendizagem não
termina ao fim de uma disciplina. Ela
segue até onde a sua curiosidade MOMENTO DINÂMICA
alcança. Aqui você encontra uma lista
de indicações de leitura. São artigos e Aqui você encontra a descrição detalhada
livros sobre temas abordados em aula.​ da dinâmica realizada pelo professor.

6
Mapa da Aula
Os tempos marcam os principais momentos das videoaulas.

AULA 1 • PARTE 1

SOA 02:57

O SOA representa a arquitetura orientada a


serviços. O SOA não é:

• Não é uma tecnologia;


PALAVRA-CHAVE
06:00
• Não é um produto;
Reusabilidade: É a capacidade que
• Não é um WebService; um software tem de ser usado em
novas aplicações.
• Não é um software;

• Não é um framework;

• Não é uma metodologia;


06:47 Eu posso ter o serviço escrito
• Não é uma solução de negócio. em uma linguagem, feito em
uma plataforma e uma empresa
O SOA é uma abordagem arquitetural
que trabalha com outra
corporativa que permite a criação de
linguagem pode consumir esse
serviços de negócio interoperáveis
serviço da mesma forma.
que podem ser facilmente reutilizados
e compartilhados entre aplicações e
empresas. O SOA é uma arquitetura
baseada em reusabilidade, com serviços
bem definidos e providos por componentes
08:23 Tudo é baseado em pessoas
de TI. Os seus componentes possuem
quando falamos de computação
baixo acoplamento, provendo plataforma,
distribuída.
tecnologia e linguagens independentes.
O SOA é composto por 4 pilares que
trazem o alicerce da arquitetura: processos
alinhados com as operações de negócio,
processo de desenvolvimento, processo de 13:42 Monólito x Microservices - Parte I
deploy e todos os processos que envolvem
o desenvolvimento daquele componente Uma arquitetura monolítica típica
alinhado com o negócio. Alguns dos de um sistema complexo pode
benefícios do SOA, são: ser representada de forma que
todas as funções do negócio estão
Desacoplamento: integrações inteligentes,
implementadas em um único processo.
flexibilidade, alinhamento com negócio;
A arquitetura monolítica é fácil de
Reutilização de serviços: produtividade, desenvolver, de fácil manutenção,
manutenibilidade; necessita apenas de um deploy e possui
tráfego de rede baixo, porém essa
Infraestrutura de plataforma: padronização
arquitetura possui alguns problemas:
corporativo (log, governança, entre outros).

7
• Aumento de complexidade e tamanho
ao longo do tempo;
Quando você precisa 18:54
• Alta dependência de componentes de
aumentar a performance do
código;
seu produto, a performance
do seu sistema, você precisa • Escalabilidade do sistema é limitada;
aumentar o seu hardware.
• Falta de flexibilidade;

• Dificuldade para colocar alterações


em produção.

PALAVRA-CHAVE Uma das grandes desvantagens da


26:40 arquitetura monolítica é que é muito
difícil escalar o sistema. É muito comum
API Gateway: É um gerenciador que, a cada cliente que você tiver, você
de tráfego que faz interface vá precisar replicar/duplicar o servidor
com o serviço de back-end real e, consequentemente, isso duplica o seu
ou de dados e aplica políticas, custo. Quanto mais clientes tiver, mais
autenticação e controle de acesso
servidor será necessário e mais caro
geral para chamadas de APIs de
forma a proteger dados valiosos. ficará.

O microserviço é um serviço com um


único propósito e que executa bem
a sua tarefa dentro de um nível de
granularidade, suportando as mudanças
dos sistemas que são consideradas
importantes tanto em tempo de projeto
EXERCÍCIO DE FIXAÇÃO
quanto em tempo de execução. O foco
principal é tentar construir um software
Qual das opções não é considerada
que possa se adaptar e isto só é possível
benefício da arquitetura SOA:
de ser feito se as partes forem pequenas
Desacoplamento. suficientes para se ajustar às diferenças
nas mudanças de sua arquitetura. O
Solução de negócio. microserviço tem como vantagens: a
manutenção e evolução dos serviços
Infraestrutura da plataforma. mais estáveis, serviços com baixo nível
de acoplamento e interdependência,
Reutilização de serviços. escalabilidade do sistema, redução
de custos, flexibilidade de tecnologia,
facilidade de colocar alterações em
produção, a resiliência, o aumento da
produtividade, a implementação de
entrega contínua, o monitoramento e
automação de processos e, o foco na
Resposta desta página: alternativa 2.

entrega de valor ao cliente.

8
AULA 1 • PARTE 2

Monólito x Microservices - Parte II 00:25

O professor dá continuidade ao conteúdo


proposto anteriormente, abordando a
diferença entre monólito e microserviço.
01:47 Características
O trabalho com microserviços pode
gerar riscos porque o risco aumenta a O professor apresenta uma linha do
complexidade da coordenação, afetando a tempo para demonstrar todas as
comunicação entre os microserviços. etapas percorridas, desde a criação
dos microserviços, passando por
sua implementação em diversas
empresas até chegar às inúmeras
PALAVRA-CHAVE
04:15 ferramentas que aderiram ao trabalho
com microserviços. A partir de 2017,
API RESTful: É uma interface de reatividade, governança e resiliência
programação de aplicações que está surgiram através de iniciativa da Netflix,
em conformidade com as restrições que visava melhorar sua performance
do estilo de arquitetura REST, e que os seus serviços atendessem os
permitindo a interação com serviços seus usuários, conseguindo elevar o seu
web RESTful.
patamar. De acordo com Sam Newman,
os microserviços são um conjunto de
pequenos autônomos que trabalham
juntos. Microserviços é um software
modularizado em pequenos serviços
PALAVRA-CHAVE que se comunicam através de uma
09:36
forma padronizada e através de uma API
RESTful (HTTP/Json).
Two pizzas team: Criado por Jeff
Bezos, fundador da Amazon, o Como características técnicas, os
conceito é baseado na lógica de microserviços envolvem:
que se uma equipe que não pode
ser alimentada por 2 pizzas, ela é Out-of-process: possibilidade de
grande demais para discutir ideias. execução fora dos processos.

Chamadas remotas: microserviços são


acessados por chamadas remotas.

PALAVRA-CHAVE Independente de linguagem de


11:17 programação: são agnósticos a
linguagem de programação, ou seja,
Ciclo DevOps: A metodologia você pode ter serviços escritos em
descreve abordagens que
node, java, python, entre outros;
ajudam a acelerar os processos
necessários para levar uma ideia do Baixo acoplamento: você é dono
desenvolvimento à implantação em
somente do seu domínio de negócio.
um ambiente de produção no qual
Não necessitando de outro serviço para
ela seja capaz de gerar valor para
o usuário. Essas ideias podem ser gerar novas versões e ou evoluir seu
um novo recurso de software, uma produto;
solicitação de aprimoramento ou
uma correção de bug, entre outros.

9
Escalabilidade horizontal e vertical:
você pode aumentar o número de
Práticas recomendadas 13:18
réplicas (scale horizontal) e/ou
• Modele os serviços em torno de aumentar a capacidade computacional
domínio da empresa; de seu serviço (scale vertical).

• Descentralize tudo. Equipes individuais Como características organizacionais,


são responsáveis por projetar e criar podemos citar:
serviços; Agilidade: trabalhando em conjuntos de
• Evite compartilhar esquemas de dados negócio menores você garante agilidade
ou códigos; no desenvolvimento de software;

• O armazenamento de dados deve Equipe pequena e focada: utilizando


ser privado para o serviço que é o o conceito de two-pizzas team você
proprietário dos dados. Use o melhor garante foco e produtividade do time de
armazenamento para cada serviço e desenvolvimento;
tipo de dados; Entregas rápidas: por ser altamente
• Os serviços comunicam-se por testável, um micro serviço pode estar
meio de APIs bem projetadas. disponível rapidamente em produção
Evite o vazamento de detalhes com garantias de segurança e qualidade;
da implementação. As APIs Combinação de tecnologias: times
devem modelar o domínio, não a podem ser multidisciplinares em
implementação interna do serviço; tecnologias para desenvolver os
• Evite acoplamento entre serviços. microsserviços.
Causas de acoplamento incluem
protocolos de comunicação rígidos
e esquemas de banco de dados
compartilhados; 14:37
Cada microserviço possui o seu
• Descarregue preocupações banco de dados, o banco de
abrangentes, como autenticação dados isolado.
e terminação SSL, para o gateway.
Mantenha o conhecimento de domínio
fora do gateway;

• Os serviços devem ter um acoplamento


flexível e alta coesão funcional. Isole
PALAVRA-CHAVE
16:15
falhas. Use estratégias de resiliência
para impedir que falhas em um serviço LGPD: A Lei Geral de Proteção de
distribuam-se em cascata. Dados tem como principal objetivo
proteger os direitos fundamentais de
liberdade e de privacidade e o livre
desenvolvimento da personalidade da
pessoa natural.

10
IaaS 25:22

A infraestrutura como serviço é um tipo


de serviço de computação em nuvem
que oferece recursos fundamentais de 30:27 Quando utilizar e quando não utilizar
computação, armazenamento e rede sob
demanda e pagos conforme o uso. A IaaS é Devemos utilizar quando a demanda for
um dos quatro tipos de serviços de nuvem, volátil, ou seja, você tem a possibilidade
juntamente com o SaaS (software como de diminuir e aumentar sua capacidade
serviço), a PaaS (plataforma como serviço) computacional de acordo com a
e a tecnologia sem servidor. necessidade. Empresas sem capacidade de
investimento em hardware, empresas com
A Iaas tem com características:
crescimento rápido e necessidade de escala
• Computação de infraestrutura sob rápida de sua infraestrutura.
demanda;
Não devemos utilizar quando a legislação
• É um dos 3 modelos de serviços da não permitir guardar os dados fora da
computação em nuvem; infraestrutura interna da empresa, ou a
terceirização do armazenamento não é
A IaaS provê:
permitida. Não é aconselhável quando os
• Servidores: computação e máquinas; níveis de desempenho necessários para
aplicação tenham limite de acesso ao
• Storage;
provedor da nuvem.
• Rede;

• Sistemas Operacionais.
34:28 PaaS - Parte I
O usuário, ao invés de adquirir softwares
A plataforma como serviço é um ambiente
ou máquinas, espaço em data centers
de desenvolvimento e implantação
ou equipamentos de rede, praticamente
completo na nuvem, com recursos que
aluga espaços para estes recursos em uma
permitem a você fornecer tudo, desde
infraestrutura externa.
aplicativos simples baseados em nuvem
IaaS pode ser obtida em: até sofisticados aplicativos empresariais
habilitados para a nuvem.
Nuvem pública: é considerada nuvem
pública uma infraestrutura que consiste A PaaS tem como características:
de recursos compartilhados, liberados sob
Pode ser considerada IaaS adicionada uma
demanda, baseado na internet;
camada middleware e/ou componentes
Nuvem privada: incorpora a maioria das prontos;
features de uma nuvem pública como
Uma camada de abstração entre seu
virtualização porém fica dentro de uma
aplicativo em nuvem e seu provedor de
rede privada;
IaaS;
Nuvem híbrida: mistura de uma nuvem
É um ambiente de execução escalável e
privada com uma nuvem pública,
com alta disponibilidade para aplicações
geralmente conectadas através de um
customizadas;
túnel VPN.
É uma categoria de computação em nuvem
que fornece uma plataforma e um ambiente
para permitir que os desenvolvedores criem
aplicativos e serviços pela Internet;

Fornece fundamentalmente escala elástica


do seu aplicativo.

11
AULA 1 • PARTE 3

PaaS - Parte II 00:25

Alguns dos benefícios da PaaS são:

• Infraestrutura na nuvem, escalável e PALAVRA-CHAVE


com alta disponibilidade nativa; 05:28

• Alta produtividade no desenvolvimento Lock-in: É usado para se referir a


e manutenção de aplicações sob um cenário em que você adquire
uma solução tecnológica e depois
demanda;
se vê impossibilitado de trocá-la por
• Resumindo: baixo custo (TCO), outra, estando trancado dentro dela.
confiabilidade e diminuição do tempo
É comum que haja um profissional
dedicado apenas a estudar as
de entrega.
soluções tecnológicas do mercado.
A PaaS também tem como vantagens:

Desenvolvimento 100% focado no


negócio: por direcionar a arquitetura lógica
07:59 The Twelve - Factor For App
e administrar a arquitetura física de forma
bem transparente, é possível desenvolver A metodologia fornece doze práticas
uma aplicação que vá demandar uma definidas para permitir que aplicações
requisição por minuto ou 10 mil requisições possam ser construídas visando
por segundo da mesma forma, com o portabilidade e resiliência quando
mesmo nível de preocupação do ponto de implantadas na web. São elas:
vista técnico: apenas a lógica de negócio;
Base de código:
Produtividade: o simples fato de
não se gerenciar balanceamento de • Somente uma base de código por
carga, replicação, cluster, instalando e aplicação;
configurando middlewares (servidores • Vários deploys por aplicação;
de aplicação, banco de dados, etc.) já é
um grande ganho. Além disso, os grandes • O desenvolvedor possui uma cópia local
fornecedores estão criando camadas de do repositório.
componentes prontos para uso, APIs e Dependências:
aceleradores de desenvolvimento nessas
plataformas. • Declare e isole explicitamente as
dependências;
Existe esforço dos fornecedores para
deixar essa camada o mais padrão possível, • Uma aplicação 12 fatores nunca confia
mas ainda existe uma boa parte que é na existência implícita de pacotes em
proprietária. Ao adotar PaaS, é natural todo o sistema;
que se adote também essa camada
• Uma declaração de dependência
proprietária, caso contrário, poderia se
explícita é que simplifica a
trabalhar direto na infraestrutura. É esta
configuração da aplicação para novos
camada que permite dar um salto de
desenvolvedores;
produtividade, lidando com escalabilidade
e disponibilidade de forma transparente. • Na prática: tenha sempre um
A decisão a ser tomada é: menos custo e gerenciador de dependências
mais entregas contra o efeito “lock-in” das configurado para seu projeto (maven,
aplicações construídas nessa abordagem. gradle, npm, pip e etc).

12
Configurações:

• A configuração de uma aplicação


é tudo que é provável variar entre
Uma declaração explícita 10:53 deploys (homologação, produção,
simplifica a configuração para desenvolvimento, etc).
os nossos desenvolvedores.
• Uma aplicação 12 fatores armazena
configuração em variáveis de ambiente
ou algum recurso de configuração
distribuída.

• Necessitamos de facilidade na troca de


A troca de ambiente não pode 13:16 ambientes sem ter a necessidade de
afetar a sua aplicação. alterar o codebase.

Serviços de apoio:

• Trate serviços de apoio como recursos


anexados;

A configuração distribuída 13:36 • Serviço de apoio é qualquer serviço que


tem que ser planejada desde o App consuma via rede como parte de
o início da concepção da sua sua operação normal:
plataforma de microsserviço.
• Não se deve fazer distinção entre
serviços locais e terceiros.

Construa, lance e execute:

• Uma base de código é transformada em


um deploy através de 3 estágios:

• Construção: converte o repositório em


Não existe microsserviço 18:13 um pacote executável.
stateful, microsserviço é
sempre stateless. • Lançamento: combina o artefato
construído com a configuração do
deploy.

• Execução: roda o app no ambiente


de execução através dos processos
específicos do APP.
PALAVRA-CHAVE • O app 12 fatores utiliza separação
21:00
estrita entre os estágios de construção,
lançamento e execução.
Container: Tem o objetivo de
segregar e facilitar a portabilidade Processos:
de aplicações em diferentes
ambientes. Um container contém • Você não deve introduzir estado em
um conjunto de processos que são seus serviços; os aplicativos devem ser
executados a partir de uma imagem. executados como um processo único e
Os containers isolam os processos
sem estado;
da aplicação do restante do sistema
operacional. • Os processos dos Doze Fatores são
Stateless e não compartilham nada. Esse
fator está no núcleo da arquitetura de
microsserviços.

13
Vínculo de porta:

• Seu serviço deve estar visível para


outras pessoas via ligação de
alguma porta. Se você criou um
Aplicações - Cloud Native 27:33 serviço, verifique se outros serviços
podem tratar isso como um recurso.
É uma abordagem moderna para construir O aplicativo de doze fatores é
e executar aplicativos de software que completamente independente de outros
exploram a flexibilidade, escalabilidade e recursos.
resiliência da computação em nuvem.
Concorrência:
As aplicações englobam as várias
ferramentas e técnicas usadas pelos • Divida seu aplicativo em pequenos
desenvolvedores de software hoje para pedaços, em vez de tentar aumentar
construir aplicativos para a nuvem pública, seu aplicativo (executando uma única
em oposição às arquiteturas tradicionais instância na máquina mais poderosa
adequadas para um data center local. disponível). Aplicativos pequenos
e definidos permitem a expansão
Definição CNCF: conforme necessário para lidar com
cargas variadas. O processo deve
• Containerizado;
ser dimensionado individualmente,
• Gerenciado dinamicamente. com o Fator 6 (sem estado), torna-se
transparente este tipo de abordagem.
• Automação;
Descartabilidade:
• Registro e descoberta;
• Os processos devem consumir menos
• Rastreamento distribuído/
tempo. Certifique-se de poder correr
observabilidade.
e parar rapidamente. E que você
Cloud: pode lidar com falhas. Sem isso,
o dimensionamento automático
• Elasticidade;
e a facilidade de implantação e
• Modelo on-demand. desenvolvimento estão sendo
diminuídos. Você pode conseguir isso
Definição Pivotal:
com contêineres.
• Processos;
Paridade entre desenvolvimento e
• Ferramentas; produção:

• Cultura. • Mantenha o desenvolvimento, a


homologação e a produção o mais
Entrega contínua:
semelhante possível, para que qualquer
• Automação. pessoa possa utilizá-lo da mesma
forma. A implantação contínua precisa
Microsserviços: de integração contínua com base em
• Automação; ambientes correspondentes para limitar
desvios e erros. Isso também incentiva
• Registro e Descoberta; implicitamente uma cultura DevOps na
• Rastreamento distribuído/ qual o desenvolvimento e as operações
observabilidade; de software são unificados.

• Anti-fragilidade / Engenharia de caos.

14
BOSH: Logs:
• Suporte a múltiplas clouds; • Trate os logs como fluxos de eventos. O
• Separação clara entre sistemas; registro é importante para validar erros
e também verificar a integridade geral
• Provisionamento rápido; do seu sistema. Ao mesmo tempo, seu
aplicativo não deve se preocupar com
• Escalabilidade;
o armazenamento dessas informações.
• Monitoramento de saúde; Esses logs devem ser tratados como um
fluxo contínuo capturado e armazenado
• Controle de falhas;
por um serviço separado.
• Deploy canário.
Processos administrativos:

• Execute tarefas administrativas /


gerenciamento como processos
EXERCÍCIO DE FIXAÇÃO pontuais - tarefas como migração
de banco de dados ou execução de
scripts pontuais no ambiente. Para
Assinale a alternativa incorreta
correspondente aos problemas da evitar mexer com o banco de dados,
arquitetura monolítica: use as ferramentas criadas ao lado do
aplicativo e isole completamente sua
Alta dependência de componentes aplicação, por exemplo.
de código.
• Alguns pontos nos 12 fatores podem
parecer triviais, mas ao executar mais de
Falta de flexibilidade.
20 serviços em poucos ambientes, eles
Escalabilidade do sistema é podem ser de grande importância.
ilimitada.

Dificuldade para colocar alterações


em produção.

AULA 1 • PARTE 4
Resposta desta página: alternativa 3.

PALAVRA-CHAVE
00:43

Kubernetes: É um sistema de
orquestração de contêineres
open-source que automatiza a
implantação, o dimensionamento
e a gestão de aplicações em
contêineres.

15
01:20 Características cloud native

Arquiteturas cloud native aprimoram nossa


capacidade de praticar DevOps e Entrega
Contínua (Continuous Delivery), e elas
exploram as características da infraestrutura
Containers 07:11
na nuvem (Cloud Infrastructure). “Cloud-
Os containers são métodos utilizados native” é um adjetivo que descreve as
na implementação e na execução de aplicações, arquiteturas, plataformas/
aplicativos distribuídos sem que haja a infraestrutura, e processos que, em
necessidade de configuração de uma conjunto, tornam “econômico” trabalhar
máquina virtual para cada um desses de forma a melhorar nossa capacidade de
aplicativos. Container é um pequeno responder rapidamente às mudanças e
sistema Linux minimalista. Ele compartilha reduzir a imprevisibilidade. As arquiteturas
o Kernel do Host e seus processos são cloud-native aprimoram nossa capacidade
trabalhados isoladamente. Os containers de praticar DevOps e Continuous Delivery,
possuem Commits e versionamento de e elas exploram as características da
containers, compartilhando através de infraestrutura na nuvem. As arquiteturas
ambientes customizados. cloud-native são definidas tendo as
seguintes seis qualidades:
Por que os contêineres são bons para
microserviços? • Modularidade (através de
Microservices);
Projetado para executar um aplicativo por
contêiner; • Capacidade de observação;

Separação natural da carga de trabalho; • Implementabilidade;

Muito leve; • Testabilidade;

Ótimo para dimensionar rapidamente; • Descartabilidade;

Melhor uso de recursos; • Substituível.

Os contêineres compartilham o SO host e, Uma aplicação Cloud-native é criada para


quando apropriado, binários e bibliotecas; ser:

Formatos padrão de contêiner, como o • Escalável;


Docker, são distribuições cruzadas entre
• Tolerante a falhas;
linux compatível;
• Decomposto em serviços;
Incrivelmente fácil de mover sua carga de
trabalho • Envia o máximo trabalho para a
plataforma se possível;
Equilibre melhor os recursos do sistema;
• Automatizado.
Permita que os desenvolvedores
trabalhem em um ambiente de produção
simulado;

Remove o problema “funcionou na minha 08:59


O microserviço por standard,
máquina”. por default, é projetado para
executar isoladamente. E
um container é projetado
para executar um aplicativo
somente.

16
Docker 14:54

É uma plataforma aberta, criada com o


objetivo de facilitar o desenvolvimento, a
implantação e a execução de aplicações
em ambientes isolados. Foi desenhada
20:15 Características das arquiteturas
especialmente para disponibilizar uma
Containers tem como base sempre uma
aplicação da forma mais ágil. Tecnologia
imagem, pense como na seguinte analogia
Open Source que permite criar, executar,
do mundo Java, uma imagem é uma classe
testar e implantar aplicações distribuídas
e um container é como um objeto instância
dentro de containers de software.
dessa classe, então podemos através de
Ele permite que você empacote um
uma imagem “instanciar” vários containers,
software de uma padronizada para o
também através de recursos chroot,
desenvolvimento de software, contendo
Cgroups é possível definirmos limitações de
tudo que é necessário para a execução:
recursos recursos e isolamento parcial ou
código, runtime, ferramentas, bibliotecas,
total dos mesmos.
etc.
Algumas características dos containers:
Docker permite que você implante
aplicações rapidamente, de modo • Portabilidade de aplicação;
confiável e estável, em qualquer ambiente.
• Isolamento de processos;
Existem mais de 500 mil aplicações
Dockerizadas, um crescimento de 3100% • Prevenção de violação externa;
ao longo de 2 anos e mais de 4 bilhões
• Gerenciamento de consumo de recursos.
de containers já foram puxados até hoje.
O Docker é apoiado por uma grande e Imagens são templates para criação de
crescente comunidade de colaboradores e containers, como falado no slide anterior,
usuários. A adoção do Docker aumentou imagens são imutáveis, para executá-
mais de 30% no último ano e em cerca las é necessário criar uma instância dela
de 30% dos containers Dockers estão (container), também vale ressaltar que as
rodando em produção. 29% das empresas imagens são construídas em camadas, o
que já ouviram falar em Docker planejam que facilita sua reutilização e manutenção.
usá-lo. Em resumo, uma imagem nada mais é do
que um ambiente totalmente encapsulado e
A parte cliente fala com o Docker daemon,
pronto para ser replicado onde desejar.
que faz o trabalho pesado de construção,
execução e distribuição de seus containers Dockerfile são scripts com uma série de
e imagens Docker, também controla os comandos para criação de uma imagem,
recursos executados. O cliente Docker e nesses scripts podemos fazer uma série de
Docker daemon, podem ser executados coisas como executar comandos sh, criar
no mesmo sistema, também é possível variáveis de ambiente, copiar arquivos e
conectar um cliente Docker a um Docker pastas do host para dentro da imagem.
daemon remoto. O cliente Docker e
Docker registry é como um repositório GIT,
daemon se comunicam através de uma
onde as imagens podem ser versionadas,
API REST, através de sockets UNIX ou
comitadas, “puxadas” etc, quando
uma interface de rede, para execuções de
recuperamos uma imagem, usando o
comandos ou scripts.
comando docker pull por exemplo, estamos
normalmente baixando a imagem de um
registro Docker, o repositório oficial do
Docker é o Docker HUB, onde é possível
hospedar e versionar imagens públicas e
privadas.

17
PALAVRA-CHAVE
23:23

Java 17: É o lançamento de


suporte de longo prazo (LTS) sob
a cadência de lançamento de seis EXERCÍCIO DE FIXAÇÃO
meses do Java e é o resultado
de uma ampla colaboração entre Alguns dos benefícios do PaaS, são:
engenheiros da Oracle e outros
membros da comunidade mundial de
Infraestrutura escalável e com alta
desenvolvedores Java.
disponibilidade.

Alta produtividade no
desenvolvimento e manutenção.

Confiabilidade e diminuição do
tempo de entrega.

Todas alternativas estão corretas.

AULA 2 • PARTE 1

Maturidade com Cloud Native 01:44

Cloud Native é muito novo e a maioria


das empresas não têm experiência para
navegar por conta própria. É muito
fácil e caro cometer erros. A matriz de
maturidade de soluções de cloud avalia
a disponibilidade da nuvem em nove
áreas cruciais de transformação, tanto 06:03
Empresas que nascem na
técnica quanto centrada no ser humano.
cloud, empresas que já
Os resultados definem e descrevem onde
dominam como utilizar a cloud,
você está agora e mostram para onde ir.
tendem a ter um sucesso muito
maior porque eles não vão ter
Resposta desta página: alternativa 4.

As empresas podem gerar enorme


crescimento econômico e valor comercial, o custo.
fornecendo serviços ou aplicativos
baseados na nuvem: instagram, uber,
whatsapp e ainda pequenas empresas
surpreendentemente (se relacionarmos o
número modesto de funcionários dessas
empresas em seu crescimento econômico
notável) cujos serviços são usados e
distribuídos com frequência com cloud
computing.

18
No entanto, mesmo um modelo de
negócios de crescimento rápido deve ter LEITURA INDICADA
consequências e dependências a longo 18:27
prazo, por isso maturidade em cloud é Livro: Domain-Driven Design:
fator principal para escalar negócios, Tackling Complexity in the Heart
arquiteturas e usuários. Segundo o Open of Software
Data Center Alliance, possuímos alguns
passos para fazer nossa passagem e
maturidade num modelo de maturidade
de nuvem. Os tipos de maturidade são
definidos como:

Cloud ready (nível 0): operado em


infraestrutura virtualizada. Criação das
instâncias ou imagem por script;

Cloud friendly (nível 1): composto por


serviços vagamente acoplados, os serviços
podem ser descobertos pelo nome.
Os componentes são projetados para
padrões de nuvem. A computação e o Reunindo práticas de design e
implementação, este livro incorpora vários
armazenamento são separados; exemplos baseados em projetos que ilustram
a aplicação do design dirigido por domínios
Cloud resilient (nível 2): estado é isolado
no desenvolvimento de softwares na vida
em um mínimo de serviços, não afetado real.
por falhas de serviço dependentes. A
infraestrutura é independente;

Cloud native (nível 3): transferível entre


provedores de infraestrutura em tempo de 18:41 Domain drive design
execução e sem interrupção do serviço.
Fundamentado na experiência de mais de
dimensionar dentro/fora automaticamente
20 anos de Eric Evans no desenvolvimento
com base em estímulos de requisições e
de sistemas, o DDD é uma abordagem
volumetria.
que reúne um conjunto de boas práticas,
padrões, ferramentas e recursos de
orientação a objetos que têm como
Domain drive design (modelo) - objetivo a construção e desenvolvimento
Parte I 29:17
de sistemas de acordo com o domínio e
regras de negócio do cliente. Além disso,
O modelo é evolutivo: a cada interação
questões relacionadas ao processo de
entre especialistas de domínio e a
desenvolvimento, como a necessidade
equipe técnica, o modelo se torna mais
de um estreito relacionamento entre a
profundo e expressivo, mais rico e os
equipe de programadores e os especialistas
desenvolvedores transferem essa fonte
do domínio, também são tratadas pela
de valor para o software. Assim, o modelo
abordagem.
vai sendo gradualmente enriquecido
com o expertise dos especialistas do O principal conceito do DDD é o modelo.
domínio destilado pelos desenvolvedores, O modelo expressa o domínio e negócio
fazendo com que o time ganhe cada vez do cliente e pode ser criado utilizando
mais insight sobre o negócio e que esse desenhos, fluxogramas, diagramas, entre
conhecimento seja transferido para o outros. O importante é que ele represente
modelo (para o código) através dos blocos o negócio do cliente. Como principais
de construção do DDD. componentes do DDD, podemos listar: a
linguagem onipresente, a arquitetura em
camadas e os padrões.

19
É uma abordagem de desenvolvimento
EXERCÍCIO DE FIXAÇÃO de software que reúne um conjunto de
conceitos, princípios e técnicas cujo foco
Qual é o principal conceito da está no domínio e na lógica do domínio
abordagem Domain drive design? com o objetivo de criar um Domain Model.
Significa desenvolver software de acordo
Objeto.
com o domínio relacionado ao problema
que estamos propondo resolver. O foco da
Imagem.
abordagem é criar um domínio que fale a
língua do usuário usando o que é conhecido
Modelo.
como linguagem Ubíqua.

Nenhuma das alternativas. Em linguagem Ubíqua entende-se que ao


trabalhar com DDD devemos conversar
usando uma mesma língua, em um único
modelo, de forma que o mesmo seja
compreendido pelo cliente, analista,
projetista, entre outros, nesta linguagem,
que seria a linguagem usada no dia a dia.

AULA 2 • PARTE 2

Domain drive design (modelo) -


00:25
Parte II

O professor dá continuidade ao conteúdo


proposto anteriormente. Quando novas
regras de negócio são adicionadas e/
ou regras existentes são alteradas ou Domain drive design e Event
05:53
removidas, a implementação é refatorada
Storming
para refletir essas alterações do modelo Event Storming é uma técnica de
no código. No final, o modelo (que em design rápido que engaja especialistas
última instância será o software) vai do domínio de negócios com
expressar com riqueza de conhecimento o desenvolvedores para que alcancem
negócio. Algumas das vantagens, são: um ciclo rápido de aprendizagem
(aprender o máximo possível no menor
• O código fica menos acoplado e mais
Resposta desta página: alternativa 3.

tempo possível. Segundo Martin Flowler,


coeso;
Bounded Context ou (contexto limitado)
• O negócio é melhor compreendido é um padrão central no design orientado
por todos da equipe o que facilita o a domínio. É o foco da seção de design
desenvolvimento; estratégico da DDD que trata de lidar
com grandes modelos e equipes. O DDD
• Alinhamento do código com o
lida com modelos grandes, dividindo-
negócio;
os em diferentes contextos limitados e
• Favorecer reutilização; sendo explícito sobre suas inter-relações.
Para encontrar os comandos, agregações
• Mínimo de acoplamento;
e boundaries usaremos o conceito de
• Independência da tecnologia. Evento Storming.

20
Event Storming é uma técnica de
PERSONALIDADE design rápido que engaja especialistas
06:20 do domínio de negócios com
desenvolvedores para que alcancem um
Martin Flowler
ciclo rápido de aprendizagem (aprender
o máximo possível no menor tempo
possível). Event Stormin permite:

• Mapear os eventos;

• Identificar os comandos;

• Associar os aggregates;

• Delimitar as fronteiras do modelo;


É um autor conhecido na área de arquitetura
de software, especializado em análise • Identificar os domínios de negócio.
orientada a objetos, UML, padrão de
projeto de software e metodologias de
desenvolvimento ágil de software, incluindo
Programação Extrema.
08:34 Eventos de domínio

Use eventos de domínio para implementar


explicitamente os efeitos colaterais de
alterações em seu domínio. Em outras
palavras, e usando terminologia DDD, use
Maturidade com Cloud Native 15:59 eventos de domínio para implementar
explicitamente efeitos colaterais entre
Nesta etapa, você muda da análise do
várias agregações. Opcionalmente, para
domínio para os primeiros estágios do
melhor escalabilidade e menor impacto
design do sistema. Até esse momento,
em bloqueios de banco de dados, use
você está simplesmente tentando
consistência eventual entre agregações
entender como os eventos no domínio se
dentro do mesmo domínio. Um evento é
relacionam - é por isso que a participação
algo que ocorreu no passado. Um evento
de especialistas em domínios é tão crítica.
de domínio é algo que ocorreu no domínio
No entanto, para criar um sistema que
que você deseja que outras partes do
implemente o processo de negócios em
mesmo domínio (em processo) tenham
que você está interessado, é necessário
conhecimento.
passar à questão de como esses eventos
ocorrem. Os comandos são o mecanismo As partes notificadas geralmente reagem
mais comum pelo qual os eventos são de alguma forma aos eventos. Um benefício
criados. A chave para encontrar comandos importante dos eventos de domínio é que
é fazer a pergunta: “Por que esse evento os efeitos colaterais podem ser expressos
ocorreu?”. Nesta etapa, o foco do processo explicitamente. Em resumo, eventos
passa para a sequência de ações que de domínio ajudam você a expressar,
levam a eventos. Seu objetivo é encontrar explicitamente, as regras de domínio, com
as causas pelas quais os eventos registram base na linguagem ubíqua fornecida pelos
os efeitos. Outra parte importante do especialistas do domínio. Os eventos de
processo que se torna mais detalhada domínio também permitem uma melhor
nessa etapa é a descrição de políticas que separação de interesses entre classes
podem acionar a geração de um evento a dentro do mesmo domínio. É importante
partir de um evento anterior (ou conjunto garantir que, assim como uma transação
de eventos). Avalie se o elemento de de banco de dados, todas as operações
dados é uma entidade comercial principal, relacionadas a um evento de domínio sejam
identificada exclusivamente por uma concluídas com êxito ou nenhuma delas
chave, suportada por vários comandos. seja.

21
Tem uma vida útil ao longo do processo de Os eventos de domínio são parecidos com
negócios. Isso levará ao desenvolvimento eventos do estilo de mensagens, com uma
de uma análise do ciclo de vida da diferença importante. Com mensagens reais,
entidade. Esse primeiro nível de definição enfileiramento de mensagens, agentes de
de dados ajuda a avaliar o escopo e a mensagens ou um barramento de serviço
responsabilidade do micro serviço à que usa o AMQP, uma mensagem é sempre
medida que você começa a ver pontos enviada de forma assíncrona e comunicação
em comum emergindo dos dados usados entre processos e computadores. Isso é
entre vários eventos relacionados. útil para a integração de vários contextos
delimitados, microsserviços ou até mesmo
• O comando de disparo é identificado
aplicativos diferentes. No entanto, com os
em um post-it azul;
eventos de domínio, ao acionar um evento
• O comando pode se tornar uma na operação de domínio em execução
operação de micro serviço exposta via no momento, você deseja que os efeitos
API; colaterais ocorram dentro do mesmo
domínio.
• A pessoa humana que emite o
comando é identificada e mostrada em • A primeira etapa do Event Storming
uma nota laranja; consiste em mapear os eventos que
ocorrem no domínio que está sendo
• Alguns eventos podem ser criados
estudado;
aplicando políticas de negócios;
• Um evento é qualquer coisa relevante
• Identificação dos comandos que geram
que aconteceu no passado e tende a ser
os eventos;
de simples compreensão para pessoas
• Geralmente os comandos estão não técnicas;
associados à alguma ação do usuário,
• O padrão para descrever o evento é
interação com sistema externo ou
utilizar o verbo no passado e deve-se
gerados por um temporizador/cron;
tentar mapear todos os eventos;
• Verbo na forma imperativa;
• Para essa etapa, utilizamos os post-its
• Deve ser colocado no lado esquerdo de cor laranja;
do evento que ele gera;
• Talvez possa existir um pouco de
• Durante o processo, é comum dificuldade inicial para explicar o que
identificar que um comando pode é um evento para os especialistas de
gerar vários eventos. negócios (não técnicos);

• O facilitador deve cuidar para que, sem


que percebam, os participantes fujam
do escopo da etapa e comecem a citar
Agregações 21:50 o mapeamento das entidades ou regras
de negócios;
Agregação é um padrão no Domain Driven
Design. Um agregado DDD é um cluster • Alguns exemplos de eventos
de objetos de domínio que podem ser identificados são Produto Ativado,
tratados como uma única unidade. Um Produto Desativado, Licença Utilizada,
exemplo pode ser um pedido e seus itens Licença Liberada, Novo Ambiente
de linha, esses serão objetos separados, Criado.
mas é útil tratar o pedido (junto com
seus itens de linha) como um único
agregado. Quaisquer referências externas
ao agregado devem apenas ir para a raiz
agregada. A raiz pode assim garantir a
integridade do agregado como um todo.

22
Agregados são o elemento básico da
transferência de armazenamento de
dados - você solicita carregar ou salvar
agregados inteiros. As transações não 23:19
Um agregado geralmente
devem cruzar fronteiras agregadas. Às contém coleções múltiplas,
vezes, os agregados DDD são confundidos junto com o campo simples.
com as classes de coleção (listas, mapas,
etc.). Agregados DDD são conceitos de
domínio (ordem, visita à clínica, lista de
reprodução), enquanto as coleções são
genéricas. Um agregado geralmente
contém coleções múltiplas, junto com 23:35
Um agregado é a junção de
campos simples. vários ítens que vão compor o
O termo “agregado” é comum e é usado meu evento, o meu domínio.
em vários contextos diferentes (por
exemplo, UML), caso em que não se refere
ao mesmo conceito que um agregado
DDD. Os aggregates são a parte do
sistema que recebem os comandos e que 25:54 Limites
geram os eventos, eles são os objetos que
armazenam os dados e são modificados Bounded Context é um padrão central
pelos comandos. Aplicativos tradicionais no design orientado a domínio e é o
têm usado frequentemente transações de foco da seção de design estratégico da
banco de dados para impor a consistência. DDD que trata de lidar com grandes
Em um aplicativo distribuído, no entanto, modelos e equipes. O DDD lida com
isso muitas vezes não é viável. modelos grandes, dividindo-os em
diferentes contextos limitados e sendo
Uma única transação empresarial pode
explícito sobre suas inter-relações. À
abranger vários repositórios de dados,
medida que você tenta modelar um
ser demorada ou envolver serviços de
domínio maior, fica progressivamente
terceiros. Por fim, cabe ao aplicativo, não
mais difícil criar um único modelo
à camada de dados, impor as variáveis
unificado. Diferentes grupos de
necessárias para o domínio. É isso que
pessoas usarão vocabulários sutilmente
as agregações destinam-se a modelar.
diferentes em diferentes partes de uma
São a parte do sistema que recebem os
grande organização.
comandos e que geram os eventos, eles
são os objetos que armazenam os dados A precisão da modelagem rapidamente
e são modificados pelos comandos. Pode- se depara com isso, muitas vezes
se utilizar o nome da entidade ou dado levando a muita confusão. Normalmente,
quando se fala sobre Aggregate. Durante essa confusão se concentra nos
o exercício, pode ser que os Aggregates se conceitos centrais do domínio.
repitam ao longo da linha do tempo, mas Contextos limitados têm conceitos
não se deve agrupá-los. não relacionados (como um tíquete
de suporte existente apenas em um
contexto de suporte ao cliente), mas
PALAVRA-CHAVE
também compartilham conceitos
34:07
(como produtos e clientes). Contextos
GRPC: Conhecido como Google diferentes podem ter modelos
Remote Procedure Call, a técnica completamente diferentes de conceitos
é um sistema de código aberto de comuns, com mecanismos para mapear
chamada de procedimento remoto entre esses conceitos polissêmicos para
desenvolvido inicialmente no Google
integração. Vários fatores traçam limites
em 2015.
entre contextos.

23
EXERCÍCIO DE FIXAÇÃO Normalmente, a dominante é a cultura
humana, já que os modelos agem
como linguagem onipresente, você
Quais os 3 pilares do Domain-Driven
precisa de um modelo diferente quando
Design?
a linguagem muda. Você também
Linguagem ubíqua, bounded encontra vários contextos no mesmo
contexts e context maps. contexto de domínio, como a separação
entre os modelos de banco de dados
Linguagem ubíqua, context maps e relacional e na memória em um único
Request-scoped values. aplicativo. Esse limite é definido pela
maneira diferente como representamos
Bounded contexts, context maps e os modelos.
Deadline.

Nenhuma das alternativas.

AULA 2 • PARTE 3

Comunicação entre serviços 00:25

Há duas formas para comunicação:


síncrona e assíncrona. Na maneira PALAVRA-CHAVE
04:43
síncrona há comunicação em tempo
real. Balanceador de carga verifica o Message broker: É um software que
nível de infraestrutura e o tratamento possibilita que aplicativos, sistemas e
de erros pode ser pelo status do http. A serviços se comuniquem e troquem
maneira assíncrona não espera resposta. informações. O message broker faz
A comunicação entre os dados pode ser isso convertendo mensagens entre
protocolos de mensagens formais.
“delay” entre as estruturas. O balanceador
de carga pode ser uma fila. O tratamento
de erros pode ficar no gerenciador da
fila, em caso de erros o gerenciador de PALAVRA-CHAVE
mensagens pode tratar o reenvio. 06:46
Resposta desta página: alternativa 1.

Dispare e esqueça: O modo disparar


e esquecer pode ser ativado somente
quando os aplicativos usam um pool
de conexão. Se um aplicativo ativar e
esquecer para uma única conexão, a
Apesar de tudo, a minha 12:20
configuração do modo será ignorada
aplicação é a fonte de eventos.
e a inserção será executada em um
único encadeamento.

24
PALAVRA-CHAVE
19:38

Orquestração: A orquestração
ajuda a gerenciar fluxos de trabalho
e tarefas complexas com mais
Se o seu orquestrador facilidade. Ela é compatível com uma
22:44
abordagem de DevOps e ajuda a sua
está chamando mais de 8
equipe a implantar aplicações mais
microserviços, está na hora de rapidamente.
rever.

PALAVRA-CHAVE
24:19

Coreografia: É uma técnica para


composição de serviços de forma
distribuída e descentralizada,
vista sob uma perspectiva global.
PALAVRA-CHAVE
28:33 A coreografia é o resultado do
conhecimento e comportamento
coletivo espalhado pelo sistema.
Saga: É uma maneira de gerenciar
a consistência de dados entre
microsserviços em cenários de
transação distribuída. Uma saga é
uma sequência de transações que
atualiza cada serviço e publica uma
mensagem ou evento para disparar a EXERCÍCIO DE FIXAÇÃO
próxima etapa de transação.
O que define um domínio?

O domínio é dado pelas atividades


realizadas pela pessoa usuária.

O domínio pode ser complexo e


possuir subdivisões dentro dele
também de grande complexidade.

O domínio é uma linguagem com


um nível mais alto de abstração
otimizado para uma classe
específica de problemas.

Todas alternativas estão corretas.


Resposta desta página: alternativa 4.

25
AULA 2 • PARTE 4

Não existe uma maneira de 01:35


trabalhar com microserviços
sem ter o registro deles.

PALAVRA-CHAVE
05:02

Server-side: Também conhecido por


back-end, é um termo usado para
designar operações que, em um
Integração e deploy contínuo 06:40 contexto cliente-servidor, são feitas
no servidor, não no cliente.
A integração é uma prática de
desenvolvimento de software onde os
membros do time de desenvolvimento
integram seu trabalho constantemente.
Cada integração é feita automaticamente
por um processo para detectar falhas
PALAVRA-CHAVE
16:07
rapidamente. Reduz drasticamente
problemas de integração e possibilita o Pirâmide de teste: É uma forma
desenvolvimento de um software seguro gráfica de demonstrar de maneira
e coeso. O professor explica pontos-chave simples os tipos de testes, seus níveis,
sobre a integração: velocidade de implementação e
complexidade dos testes realizados.
• Escreva testes automatizados para
desenvolvedores;

• Execute compilações privadas;

• Confirme código com frequência;


PERSONALIDADE
• Não confirme código com defeito; 19:12
Jez Humble
• Evite obter código com defeito;

• Corrija construções com defeito


imediatamente;

• Todos os testes e inspeções devem


passar.

O deploy contínuo é muito semelhante


à entrega contínua, porém dá um passo
adiante em relação à automação. O deploy É diretor na ThoughtWorks Studios e
contínuo não precisa de uma área de tem trabalhado com uma variedade de
teste para ser revisada manualmente, já plataformas e tecnologias, dando consultoria
que os testes que são automatizados e para organizações sem fins lucrativos,
integrados no começo de todo o processo empresas financeiras e de telecom, e
de desenvolvimento, seguindo todas as companhias de varejo online.
fases do release.

26
Build Pipeline 22:00

É uma implementação do paradigma


contínuo, em que builds, testes e
implementações automatizadas são 24:41
Você não vai conseguir
orquestrados como um único fluxo de trabalhar com deploy contínuo,
trabalho de lançamento. Alguns fatores da integração contínua sem uma
etapa de confirmação: cultura DevOps.
• Poll SCM;

• Compilação; PALAVRA-CHAVE
29:22
• Cobertura dos testes;

• Unitários e integração; Rollback: As reversões são


importantes para a integridade do
• Qualidade do código fonte; banco de dados, pois significam
que o banco de dados pode ser
• Conformidades com padrões restaurado para uma cópia limpa
empresariais; mesmo após a execução de
operações incorretas.
• Possíveis bugs;

• Boas práticas;

• Empacotamento e publicação.
PALAVRA-CHAVE
33:24
Estágio de aceitação:

• Testes automatizados; Flyway: É uma ferramenta que


permite o versionamento e
• Testes funcionais; gerenciamento do Banco de
dados. Com ele podemos controlar
• Testes de aceitação; a evolução dos elementos que
compõem uma determinada base de
• Testes de performance;
dados, sendo eles tabelas, sequences,
• Testes de segurança. views, entre outros.

Automatização atrelada com teste gera


sucesso, reduzindo os riscos com releases
incrementais. Existem inúmeras formas de EXERCÍCIO DE FIXAÇÃO
se construir um build pipeline, descubra
a sua. A cultura de DevOps é necessária. Sobre as comunicações síncrona e
Algumas das dificuldades citadas, são:
assíncrona, é incorreto afirmar que:

• Exige mudança cultural; Na maneira síncrona há


comunicação em tempo real.
• Maior dificuldade encontrada nas
Resposta desta página: alternativa 3.

implantações de continuous delivery; A maneira assíncrona não espera


resposta.
• Exige ciclos curtos;

• Empresas organizadas em silos/áreas; O balanceador de carga verifica o


nível e o tratamento de erros pode
• Requer envolvimento de todos. ser pelo status da URL.

O balanceador de carga pode ser


uma fila.

27
AULA 3 • PARTE 1

Comunicação assíncrona via filas 02:34

O professor inicia sua aula fazendo


uma breve revisão sobre os conteúdos
abordados anteriormente. O modelo mais
básico de comunicação entre processos é PALAVRA-CHAVE
07:19
o modelo de requisição/resposta, também
conhecido como cliente/servidor. Quando Pub/Sub: É um serviço de mensagens
um serviço roda (geralmente servidor em tempo real totalmente gerenciado
HTTP), rodando em um certo IP e há o que permite o envio e o recebimento
cliente que é o outro serviço que executa de mensagens entre aplicativos
uma chamada para o servidor. Geralmente
independentes.
são utilizados o protocolo HTTP e o
REst. A chamada pode ser síncrona ou
assíncrona:

Síncrona: o cliente envia a sua requisição 07:28


Eu não dependo mais de uma
e o servidor envia a resposta. O cliente
versão específica do meu
aguarda trancado esperando a resposta e
servidor, eu não dependo de
só vai prosseguir a execução do programa
saber exatamente quem vai
quando a resposta for obtida.
consumir essa mensagem.
Assíncrona: neste modelo você dispara e
esquece. O cliente faz a requisição e isso
roda em background. Quando a resposta
chegar, ela será tratada.
Fila de mensagens e tópico de
Há um alto acoplamento entre cliente 08:43
mensagens
e o servidor, pois o cliente necessita
conhecer exatamente o servidor e também A fila de mensagens é uma estrutura
há necessidade de transmitir os dados em que cada mensagem produzida
da forma esperada, tratando a resposta é entregue a um único consumidor,
ou o erro. Ambos serviços precisam ser adequando-se para a distribuição
responsivos no momento. Uma falha no de carga. Quando não há nenhum
servidor gera uma falha no cliente. consumidor registrado ou disponível, a
mensagem geralmente é armazenada
e assim que um consumidor estiver
disponível, a mensagem é entregue.
PALAVRA-CHAVE
10:52 Os tópicos de mensagens são estruturas
em que cada mensagem produzida
Multicast: É uma técnica de é entregue a todos os consumidores
transmissão de um pacote de dados registrados. Geralmente não há
para múltiplos destinos ao mesmo persistência das mensagens e somente
tempo. Durante uma transmissão,
consumidores registrados no momento
o transmissor envia os pacotes de
dados somente uma vez, ficando a em que a mensagem é gerada a
cargo dos receptores captarem esta recebem.
transmissão e reproduzi-la.

28
Message broker 11:26

O message broker é um sistema


especializado em recepção e envio de
mensagens. Ele desconhece detalhes
sobre os produtores e consumidores. 16:03 Exemplos de código
O sistema é capaz de persistir nas
mensagens e de entregar novamente Os exemplos de código a seguir utilizam
uma mensagem em caso de falha do o protocolo AMQP (Advanced Message
consumidor. Existem diversos serviços de Queuing Protocol) e são implementados
mensageria bem conhecidos, como por pelo ActiveMQ, RabbitMQ e outros. São
exemplo: Kafka, ActiveMQ e RabbitMQ. escritos em TypeScript, rodando sobre
nodejs. Os exemplos apresentados estão
Um message broker confiável é essencial
disponíveis clicando aqui.
em uma arquitetura de microserviços,
portanto, evite um ponto único de falha,
ou seja, um componente que, caso falhe,
impacta ou indisponibiliza o sistema todo. PALAVRA-CHAVE
Também é importante lidar com problemas 16:32
de escalabilidade, sendo necessário o
AMQP: É um protocolo de camada
monitoramento constante, já que tende a
de aplicação padrão aberto para
ser um componente do sistema bastante Message Oriented Middleware.
demandado. As características definidoras do
AMQP são: orientação, mensagem,
roteamento, confiabilidade e
segurança.

PALAVRA-CHAVE
16:42

SQL: É uma linguagem de


programação para lidar com banco
de dados relacional. Foi criado para PALAVRA-CHAVE
19:37
que vários desenvolvedores pudessem
acessar e modificar dados de uma
Dotenv: A ferramenta é utilizada
empresa simultaneamente, de maneira
para orquestrar as variáveis ambiente
descomplicada e unificada.
de um projeto. O nome dela sugere
o arquivo em que as informações
ficarão, (dot) que é ponto em inglês
acrescido de (env), então temos o
arquivo (.env) que é composto de
chaves e valores.
Exemplo de saída 22:54

O professor inicia sua demonstração


prática utilizando os códigos que foram
disponibilizados anteriormente. PALAVRA-CHAVE
27:21

ACK: Acknowledgement é um código


de comunicação enviado por uma
unidade receptora à uma estação
transmissora, com o objetivo de
confirmar que está pronta para
receber um pacote de dados ou que
o pacote enviado chegou sem erros.

29
Tipos de garantia de entrega de
mensagens 34:22

A primeira política de garantia de entregas PALAVRA-CHAVE


é no máximo uma vez. Most-once 36:09
delivery recebe uma mensagem e tenta
entregar essa mensagem (no máximo uma IOT: A Internet das Coisas descreve a
vez) e, em caso de erro, ela é perdida. rede de objetos físicos incorporados
a sensores, software e outras
Nenhum estado é mantido, portanto é a
tecnologias com o objetivo de
implementação mais simples e rápida. conectar e trocar dados com outros
dispositivos e sistemas pela internet.
Já na entrega que ocorre ao menos
uma vez, em caso de erro ou limite de
tempo, ela será entregue novamente.
Há necessidade de manter o estado
EXERCÍCIO DE FIXAÇÃO
no componente de entrega, podendo
duplicar o processamento ou resultado,
Sobre fila de mensagens, é correto
por isso é essencial que o tratamento de
afirmar que:
mensagens seja idempotente, isto é, não
deixe o estado do sistema inconsistente se Disponibilizam recursos de
executado mais de uma vez. comunicação e coordenação para
esses aplicativos distribuídos.
Na política exatamente uma vez, há a
garantia de que cada mensagem seja
Podem simplificar a codificação
entregue uma única vez, mesmo que haja de aplicativos, aumentando a
falhas ou limite de tempo. É o mecanismo confiabilidade e a escalabilidade.
mais complexo, pois exige estado em
ambos os componentes de entrega É uma estrutura em que cada
e recepção. O componente de envio mensagem produzida por um
deve manter estado para retransmitir produtor é entregue a um único
mensagens falhadas e o de recepção deve consumidor.
manter estado para ignorar mensagens
que já tenham sido previamente enviadas. Todas alternativas estão corretas.

AULA 3 • PARTE 2

Exemplos de uso de mensagens 00:25


Resposta desta página: alternativa 4.

Nesta abordagem de notificar eventos


de domínio, o sistema gera mensagens PALAVRA-CHAVE
que representam eventos que ocorrem 05:30
em um microsserviço para que outros
microsserviços possam reagir de acordo. Versionamento: É o processo de
A atualização de caches de dados de
atribuir um nome único ou uma
numeração única para indicar
outros serviços é semelhante a eventos de
o estado de um programa de
domínio, mas com os dados. É importante computador. Esses números
cuidar do versionamento/lock otimista. No são geralmente atribuídos de
processamento paralelo, os consumidores forma crescente e indicam o
são “trabalhadores” e cada evento contém desenvolvimento de melhorias ou
uma seleção do que será processado. correção de falhas no software.

30
PALAVRA-CHAVE
10:17

Caixa de saída transacional: É um


padrão que garante que os eventos
são guardados num arquivo de
12:17 Serverless
dados antes de serem enviados para
um mediador de mensagens. Se
o objeto empresarial e os eventos As aplicações serverless necessitam
correspondentes forem guardados na de um servidor para rodar, porém elas
mesma transação de base de dados, não sabem qual servidor vai rodá-las.
é garantido que não serão perdidos O conceito de serverless é geralmente
dados. Tudo será consolidado ou tudo relacionado ao FaaS (Function as a
será revertido se existir um erro.
service), mas o conceito pode ser
considerado mais amplo. Os serviços
gerenciados (bases de dados, buscas,
mensageria) também podem ser
Geralmente, em produção, considerados serverless.
14:15
a gente tem um servidor de Aplicações serverless retiram do
base de dados principal e a operador do sistema a responsabilidade
gente tem uma réplica. de gerenciar a infraestrutura do sistema
(atualizações de segurança do sistema
operacional, atualizações do software
de base e administração de capacidade
PALAVRA-CHAVE
17:52 ou escala). Assim, o desenvolvedor/
operador pode focar-se apenas na
Log4shell: É uma vulnerabilidade de aplicação.
dia zero no Log4j, uma estrutura de
registro Java popular, envolvendo O desenvolvedor/operador foca-
execução arbitrária de código. se apenas na aplicação e não na
infraestrutura, com a desvantagem de
ter menos controle sobre a infraestrutura
que roda o serviço. Quando ocorrem
problemas mais específicos, pode ficar
FaaS 20:54
complicada a resolução dos mesmos.
Neste modelo, o desenvolvedor empacota
funções, geralmente utilizando um
container (como o Docker). Na medida
que há demanda, o ambiente aloca
29:40 Knative
recursos para executar a função. Quando
a demanda cessa, o ambiente libera
É uma plataforma com diversos
recursos. É adequado para funções de
componentes de construção baseados
processamento, não para sistemas de
no Kubernetes. Ela apresenta
persistência de dados. O FaaS tem como
um conjunto de elementos de
vantagens:
middleware, os quais estão ligados
Otimização de custos: somente será ao desenvolvimento de aplicativos
cobrado quando houver demanda; relacionados às tecnologias atuais.
Uma das principais características da
Escala flexível: a infraestrutura vai plataforma é que ela permite a atuação
alocar mais recursos com o aumento dentro de um contêiner, o que favorece
de demanda, e desalocar recursos a autenticação e a segurança da nuvem.
desnecessários, inclusive até chegar ao
ponto de nenhum recurso alocado, ou seja,
custo zero.

31
As desvantagens, são: O Knative também:

• Aumento na complexidade da • Expõe cada função em um


infraestrutura; containers (Docker);

• Difícil prever o custo final, pois • O Knative atribui uma URL para
depende da demanda; invocar cada função;

• Maior dificuldade na depuração; • A função deve levantar um servidor


HTTP;
• O código de cada função é isolado em
um container; • O Knative roteia uma requisição para
a função;
• Quando é necessário aumentar a
escala, pode ocorrer um atraso devido • Como a única responsabilidade da
ao tempo necessário para inicializar a função é escutar em uma porta e
função; retornar uma resposta, ela pode ser
escrita em qualquer linguagem de
• O tempo de “aquecimento” da função
programação.
pode impactar na experiência do
usuário. O Java é um exemplo notável.

PALAVRA-CHAVE
31:10

DNS: Convertem solicitações de


nomes em endereços IP, controlando
qual servidor um usuário final
alcançará quando digitar um nome de
Dockerfile - Parte I 37:01
domínio no navegador da web. Essas
solicitações são chamadas consultas.
O professor inicia a demonstração prática
para ilustrar a funcionalidade do Docker.

EXERCÍCIO DE FIXAÇÃO

O que é versionamento?

Tem o objetivo de conectar e trocar


dados com outros dispositivos e
sistemas pela internet.

É o processo de atribuir um nome


único ou uma numeração única para
indicar o estado de um programa de
Resposta desta página: alternativa 2.

computador.

Foi criado para que os


desenvolvedores pudessem
modificar dados simultaneamente,
de maneira unificada.

Todas alternativas estão corretas.

32
AULA 3 • PARTE 3

Dockerfile - Parte II 00:25

O professor dá continuidade à sua


demonstração prática para ilustrar a
funcionalidade do Docker.
01:19
Eu poderia fazer a requisição
ao meu serviço sem saber de
antemão a URL.

PALAVRA-CHAVE
03:25

Pod: É uma abstração do Kubernetes


que representa um grupo de um
ou mais contêineres de aplicativos
(como Docker) e alguns recursos
compartilhados para esses
08:38
contêineres. Microsserviços é um assunto
muito importante no
desenvolvimento atual, porque
é uma evolução natural.

Alguns segundos são 09:21


suficientes para muitos
usuários simplesmente
desistirem daquele site.

10:05
Se você trabalha numa
empresa que não abraça
realmente a ideia de
microserviços como uma
solução, não vai funcionar.
Exemplos de código - Parte I 13:44

O professor apresenta outro exemplo de


código. Durante a demonstração prática,
o professor ilustra diversos aspectos de
microsserviços. O código apresentado está PALAVRA-CHAVE
disponível clicando aqui. 26:28

PUT: Cria um novo recurso ou


substitui uma representação do
recurso de destino com os novos
dados.

33
PALAVRA-CHAVE
33:43

Query: É um pedido de uma


informação ou de um dado. Esse
pedido também pode ser entendido
como uma consulta, uma solicitação
ou uma requisição. PALAVRA-CHAVE
37:27

JSON: É um formato que armazena


informações estruturadas e é
principalmente usado para transferir
dados entre um servidor e um
EXERCÍCIO DE FIXAÇÃO cliente. O arquivo é basicamente uma
alternativa simples e mais leve ao
XML (Extensive Markup Language),
O que é FaaS? que tem funções similares.

É um serviço de back-end
sem servidor que permite aos
desenvolvedores escrever peças
modulares de código em tempo
real que podem ser executadas em
resposta a determinados eventos.

É um serviço em nuvem que


oferece recursos de infraestrutura
sob demanda, como computação,
armazenamento, rede e indivíduos
pela nuvem.

É um serviço de plataforma para


você desenvolver suas próprias
aplicações e disponibilizá-las na
nuvem.

Todas alternativas estão corretas.

Resposta desta página: alternativa 1.

34
AULA 3 • PARTE 4

Exemplos de código - Parte Ii 00:25

O professor dá continuidade à sua


demonstração prática, ilustrando como se
dá a interação entre os microsserviços.
04:10
Toda vez que o serviço de
produtos mudar de endereço,
então o Consul vai me notificar
e eu vou atualizar a URL que
está rodando o meu serviço de
produtos.
O nosso sistema aqui, ele é 05:56
pequeno. Se ele crescesse
muito, talvez tivesse que
refatorar ele.

PALAVRA-CHAVE
19:02

Postman: É uma ferramenta que


dá suporte à documentação das
requisições feitas pela API. Ele possui
ambiente para a documentação,
execução de testes de APIs e
requisições em geral.

35
Resumo da disciplina
Veja, nesta página, um resumo dos principais conceitos vistos ao longo da disciplina.

AULA 1

O SOA é uma abordagem arquitetural


corporativa que permite a criação de
serviços
IaaS é um dos quatro tipos de
serviços de nuvem, juntamente com
o SaaS, a PaaS e a FaaS.
A plataforma por trás do PaaS
foi criada justamente para
trazer benefícios e acelerar o
desenvolvimento.

AULA 2

As aplicações englobam as
várias técnicas usadas pelos
desenvolvedores para construir
aplicativos para a nuvem pública.
Os containers são métodos utilizados na
implementação de aplicativos, sem que
haja a necessidade de configuração de
uma máquina para cada um.
Docker foi desenhado
especialmente para disponibilizar
uma aplicação da forma mais ágil.

AULA 3

Bounded Context é um padrão


central no design orientado a
domínio.

Agregados são o elemento


básico da transferência de
armazenamento de dados.

Uma única transação empresarial pode


abranger vários repositórios de dados,
ser demorada ou envolver serviços de
terceiros.

36
Avaliação
ca-

-
Veja as instruções para realizar a avaliação da disciplina.

Já está disponível o teste online da disciplina. O prazo para realização


é de dois meses a partir da data de lançamento das aulas. ​

Lembre-se que cada disciplina possui uma avaliação online.


A nota mínima para aprovação é 6. ​

Fique tranquilo! Caso você perca o prazo do teste online, ficará aberto
o teste de recuperação, que pode ser realizado até o final do seu curso.
A única diferença é que a nota máxima atribuída na recuperação é 8. ​

Você também pode gostar