tdc2016sp - trilha quebrando um monolítico j2ee, uma história de trás das trincheiras
TRANSCRIPT
pen4education
Trilha – Arquitetura JavaDiego de Oliveira
Quebrando um monolítico J2EE, uma história de trás das trincheiras
pen4education
Monolítico…?
• Um único grande sistema que contém todas as funcionalidades
• Sistemas monolíticos podem ser modulares(kernel do linux)
• Sistemas monolíticos podem parar de funcionar se houver problemas em um subsistema(kernel do linux)
Globalcode – Open4education
Monolítico…?
19801991 2005 ~ 2007
Globalcode – Open4education
Quebrar um monolítico
• Redução no time to market• Cabe na sua cabeça• Menos código/mais fácil de testar• Permite usar a melhor solução para o problema
(Cassandra, Go, Java, C++, etc)• Tratamento diferente para componentes com
criticidades diferentes (escala, uptime,etc)
http://philcalcado.com/2015/09/08/how_we_ended_up_with_microservices.html
Globalcode – Open4education
Qual o tamanho correto..?
• Não tem resposta exata• Comece com “macro serviços”• Diminua o tamanho conforme for entendendo
melhor os pontos de corteNetflix Twitter
Globalcode – Open4education
Limites de contextos
● Visibilidade das áreas de atuação dos objetos de domínio
Globalcode – Open4education
Estratégias
Core, infra, etc
Cobrança
Estoque
Envio de Email
e-commerce
Sugestão e reviews
Globalcode – Open4education
Estratégia 1
● Prepare e saia de uma vez só○ Crie um novo pacote ou projeto que guardará o novo
sistema○ Mova o código que está sendo modularizado para lá○ Refatore conforme necessário○ Transforme as chamadas locais (RMI/EJB/ETC) em
chamadas de Api○ Separe código de apoio em bibliotecas, use nos dois
projetos○ Mova o projeto de repositório e entregue separado
Globalcode – Open4education
Estratégia 1
● Prepare e saia de uma vez só
○ Vantagens■ Não precisa de infra adicional no início■ Não muda muito o stack tecnológico■ Quase não tem código duplicado
○ Desvantagens■ Se o modelo antigo estava ruim o novo continuará ruim■ Será necessário outra rodada para atualização tecnológica
Globalcode – Open4education
Estratégia 2
● Comece fora mantendo a basea. Crie um novo serviço que aponte para o mesmo banco
do antigob. Desenvolva o fluxo de escrita, mantendo a estrutura e
regra de banco de dados (camada anticorrupção)c. Coloque um liga e desliga no código velhod. Migre a escrita aos poucos e observe, corrija
problemas caso haja, migre tudo. Se der erro desligue e volte para o antigo até corrigir.
e. Apague o código velhof. Faça a mesma sequencia b, c e d para o fluxo de
leitura
Globalcode – Open4education
Estratégia 2
● Comece fora mantendo a base
○ Vantagens■ Permite usar outras tecnologias desde o início■ As entregas podem ser feitas em ritmo diferente do monolítico
○ Desvantagens■ É preciso uma infra inicial■ Pode demorar um pouco mais
Globalcode – Open4education
Estratégia 3
● Faça um sistema do zeroa. Desenvolva normalmenteb. Elabore um plano de migração de dados incrementalc. Adeque o sistema antigo para chamar o novo, deixe
desligadod. Confira se está tudo certoe. Ligue a utilização do novo
Globalcode – Open4education
Estratégia 3
● Faça um sistema do zero
○ Vantagens■ Liberdade total de modelagem
○ Desvantagens■ Talvez seja necessário replicar desenvolvimento no sistema
velho e no novo até ele ser todo desenvolvido
Globalcode – Open4education
Como escolher o módulo
● Pondere ganho real vs ganho visível● Comece pelo menos crítico e mais fácil
○ Irá gerar infraestrutura de apoio● Escolha módulos de maior criticidade ● Escolha módulos de maior dificuldade
○ Pode ser que o que sobra nem valha a pena ser modularizado
Globalcode – Open4education
Desafios
● JTA● Contexto transacional● Processamento síncrono● Uptime● Cascateamento de falhas
Globalcode – Open4education
Outras preocupações
● Monitoração● Tracking de problemas e falhas● Degradação de funcionalidade● Cuidado com as surpresas● Desenvolver/monitorar 1 / 10 / 100 sistemas são
desafios diferentes● Coisas irão falhar(servidor, NFS, rede, memória,
etc)