micro serviços como ferramenta de inovação
TRANSCRIPT
SobreMim
● Arquiteto de Sistemas na Direct Talk
● +4 anos utilizando micro serviços
● +5 anos utilizando AWS em produção
● Experiência prévia em portal de
internet e desenvolvendo software para
mercado financeiro
PEDRO HENRIQUE SIMÕES DE OLIVEIRA
ConceitosBásicos
Sistema que implementa um conjunto
de funcionalidades e se comunica com
o mundo exterior através de uma
interface bem definida.
SERVIÇO
ConceitosBásicos
Arquitetura de sistemas que adota
como abordagem principal para
resolução de problemas a utilização de
serviços que se comunicam.
ARQUITETURA ORIENTADA A SERVIÇOS (SOA)
Serviço que implementa um conjunto
de funcionalidades fortemente
relacionadas. Um resultado colateral é
que o serviço fica menor, daí o nome.
ConceitosBásicos
MICRO SERVIÇO
Serviço que usualmente implementa
uma única função. Ganhando tração
por conta das ofertas de nuvem. Ex.:
Azure Cloud Functions, AWS Lambda,
Google Cloud Function.
ConceitosBásicos
NANO SERVIÇO (SERVERLESS)
Termo bastante abusado.
Normalmente relacionado a uma
aplicação ou serviço que mesmo que
seja modularizado do ponto de vista de
código, é implantado como um só
software. Geralmente é um sistema
complexo.
ConceitosBásicos
MONOLITO
Caso de uso: listar comentários que
amigos fizeram sobre um determinado
hotel.
ProblemasTécnicos
ESTUDO DE CASO FICTÍCIO
ProblemasTécnicos
ESTUDO DE CASO FICTÍCIO
Qualquer um com acesso interno ao
firewall ainda pode explorar falhas de
segurança.
ProblemasTécnicos
ESTUDO DE CASO FICTÍCIO
Como uma solução de micro serviços
se compara com uma solução monolito
em aspectos não funcionais?
ProblemasTécnicos
LEI DE LITTLE
U = V x T
Usuários
simultâneos
Tempo de
resposta
Vazão
Independe da
aplicação
ProblemasTécnicos
LEI DE LITTLE
U = V x T
Usuários
simultâneos
Vazão
Tempo de
resposta
Requisições pela rede já
garantem aumento do tempo
ProblemasTécnicos
ASPECTOS NÃO FUNCIONAIS
● Traduções diretas de monolito
para micro serviços normalmente
implicam em queda de
performance;
● Serviços centrais correm risco de
virar hotspots. Ex.: 1 requisição de
usuário vira 3 requisições para o
Autenticador.
https://blogs.msdn.microsoft.com/windowsazurestorage/2010/06/25/nagles-algorithm-is-not-friendly-towards-small-requests/
ProblemasTécnicos
ASPECTOS NÃO FUNCIONAIS
Como a arquitetura de micro serviços
afeta a disponibilidade e
escalabilidade?
ProblemasTécnicos
Disponibilidade
A disponibilidade de um serviço está
limitada a disponibilidade do
hardware. O fornecedor de hardware
(ou de solução de nuvem)
normalmente informa esse valor
ProblemasTécnicos
Disponibilidade
Um sistema para ser considerado de
alta disponibilidade precisa executar
em pelo menos 1 nó a mais do que o
necessário para atender o tráfego
(redundância), executando atrás de um
load balancer
ProblemasTécnicos
Disponibilidade
Exemplo: Serviço hospedado em 2
servidores mas precisa de apenas 1 para
atender demanda
ProblemasTécnicos
Disponibilidade
Exemplo: Serviço A depende dos
serviços B e C para funcionar
corretamente
P(S) = Σ ( ) (1 - p)p n - iinn
i i = k
● Disponibilidade de um nó: p
● Mínimo de nós para atender a demanda: k
● Total de nós executando o serviço: n
Disponibilidade do serviço S é:
P(S) = Σ (1 - p)p n - iin!n
(n - i)!i! i = k
● Disponibilidade de um nó: p
● Mínimo de nós para atender a demanda: k
● Total de nós executando o serviço: n
Disponibilidade do serviço S é:
P(C) = P(S)x
Disponibilidade de um caso de uso C que depende de x
serviços executando corretamente:
i = 1
i
ProblemasTécnicos
ANÁLISE MAIS COMPLEXA
● Servidor 99% de disponibilidade;
● Todo serviço que precisa de n
servidores para atender a demanda
está rodando em n + 1 servidores
● Todas as dependências vão utilizar
o mesmo número de serviços
ProblemasTécnicos
CONCLUSÕES
Para alcançar ou superar os requisitos
não funcionais de uma solução
utilizando arquitetura monolítica, uma
mudança dramática na forma de como
desenvolver é necessária
http://samnewman.io/talks/principles-of-microservices/
http://samnewman.io/talks/principles-of-microservices/
Imposições de
Micro Serviços
ProblemasTécnicos
CUSTOS EXTRAS
● Complexidade de configuração
● Complexidade de deploy
● Serviços consomem recursos de
hardware mesmo parados. Mais
serviços rodando (mesmo que sem
carga) implicam em maior
demanda de infraestrutura
ProblemasTécnicos
REFERÊNCIAS PARA IMPLEMENTAÇÃO
● http://microservices.io/patterns/microservices.html
● https://info.thoughtworks.com/livro-micro-servicos.html
● https://msdn.microsoft.com/en-us/library/dn568099.aspx:
“Simplicidade é
pré-requisito para
confiabilidade.”
Edsger W. Dijkstra
"Simplicidade é uma grande virtude
mas requer trabalho duro para ser
alcançada e educação para ser
apreciada. E o que é pior:
complexidade vende melhor."
Não Vale a Pena!
ANÁLISE DE CENÁRIOS - I
● Pouca evolução funcional e não
funcional
● Equipe pequena ou média
Quando a Conta
Fecha?
ANÁLISE DE CENÁRIOS - II
● Evolução funcional moderada
● Evolução não funcional moderada
● Equipe pequena ou média
Não Vale a Pena!
ANÁLISE DE CENÁRIOS - II
● Custo de desenvolver nova
funcionalidade: médio ou baixo
quando comparado com um
sistema recém-feito
Quando a Conta
Fecha?
ANÁLISE DE CENÁRIOS - III
● Evolução funcional moderada
● Evolução não funcional moderada
● Equipe pequena ou média
● Custo de adição de funcionalidades
muito alto
Quando a Conta
Fecha?
ANÁLISE DE CENÁRIOS - III
Motivadores
● Reestruturação arquitetural
gradual (rato roendo o queijo)
● Cada micro serviço pode ser visto
como um green field, acelerando a
produtividade
Quando a Conta
Fecha?
ANÁLISE DE CENÁRIOS - III
RISCOS
● Competência técnica da equipe
● Desestabilizar o sistema
● Migração pode ser muito lenta
● Quebra em micro serviços: débito
técnico X roadmap funcional
Quando a Conta
Fecha?
EXERCíCIO DE IMAGINAÇÃO
● Todos os desenvolvedores têm a
mesma produtividade
● As atividades são 100%
pré-determinadas independente da
equipe
T(n) =
T(1)n
● T(1): tempo gasto por 1 desenvolvedor para executar uma
tarefa
● T(n): tempo gasto por n desenvolvedores para executar a
mesma tarefa
Regra de três nos diria isso:
T(n) =
T(1)n
● T(1): tempo gasto por 1 desenvolvedor para executar uma
tarefa
● T(n): tempo gasto por n desenvolvedores para executar a
mesma tarefa
Regra de três nos diria isso:
Porém nem todas as atividades são paralelizáveis.
P.T(1)n
● T(1): tempo gasto por 1 desenvolvedor para executar uma
tarefa
● T(n): tempo gasto por n desenvolvedores para executar a
mesma tarefa
● P: percentual de atividades paralelizáveis
T(n) =
+ (1 - P).T(1)
T(1)T(n)
Quanto uma equipe com n desenvolvedores produz a mais do
que uma equipe com 1 desenvolvedor?
S(n) =
T(1)T(n)
Quanto uma equipe com n desenvolvedores produz a mais do
que uma equipe com 1 desenvolvedor?
S(n) =
Produtividade da equipe
Quando a Conta
Fecha?
ANÁLISE DE CENÁRIOS - IV
● Equipe pequena ou média
● Rápida evolução funcional
● Quantidade substancial de
investimentos
Quando a Conta
Fecha?
ANÁLISE DE CENÁRIOS - V
● Equipe muito grande
● Alguma evolução funcional
● Alguma evolução não funcional
Quando a Conta
Fecha?
ANÁLISE DE CENÁRIOS
Nestes cenários paralelizar o
desenvolvimento é uma necessidade. A
utilização de micro serviços é eficiente
para isso.
Minha Visão
SE FOR A ESCOLHA ERRADA
● Aumento do custo do projeto
● Aumento do custo de infra
● Pior performance
● Sistema mais instável
Minha Visão
SE FOR A ESCOLHA CERTAIMPLEMENTADA DA FORMA ERRADA
● Aumento do custo do projeto
● Aumento do custo de infra
● Pior performance
● Sistema mais instável
Minha Visão
SE FOR A ESCOLHA CERTA IMPLEMENTADA DA FORMA CERTA
● Os benefícios só vem a longo prazo
● O custo inicial será maior que o
benefício inicial
● Visão de longo prazo dos decisores
é fundamental no processo
Minha Visão
QUAIS SÃO OS GANHOS
● Independência entre equipes
● Aumento de produtividade
● Micro serviços existentes
potencializam novos produtos
(como brincar de lego)
● Aumento de maturidade técnica
● Email:
● Blog técnico da Direct Talk:
http://www.directtalk.com.br/tech
CONTATOS
PARA CONVERSARMOS MAIS