Tradução e adaptação de microsserviços Java: um guia prático . Link para a primeira parte do guia . Qualquer programa Java do lado do servidor e, portanto, qualquer microsserviço, é apenas um arquivo com extensão .jar ou .war. Há uma coisa excelente sobre o ecossistema Java, ou melhor, sobre a JVM: você só precisa escrever código Java uma vez e ele pode ser executado em praticamente qualquer sistema operacional, desde que você não tenha compilado seu código com uma versão mais recente do Java que a sua. versão da JVM de destino. É importante entender isso, especialmente quando se trata de tópicos como Docker, Kubernetes ou (rufar os tambores!) A nuvem. Por que? Vejamos diferentes cenários de implantação.
Exemplo minimalista de implantação de microsserviço Java
Continuemos com o exemplo do banco. Portanto, temos um arquivo monobank.jar (monolith) e nosso recém-extraído Riskengine.jar (o primeiro microsserviço de verificação de risco). Vamos supor também que ambos os aplicativos, como qualquer outro aplicativo no mundo, precisem de um arquivo .properties. No nosso caso, conterá apenas a URL e as credenciais do banco de dados. Uma implantação mínima pode consistir em dois diretórios parecidos com isto: Primeiro:
-r-r------ 1 ubuntu ubuntu 2476 Nov 26 09:41 application.properties
-r-x------ 1 ubuntu ubuntu 94806861 Nov 26 09:45 monobank-384.jar
ubuntu@somemachine:/var/www/www.monobank.com/java$ java -jar monobank-384.jar
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
...
Segundo:
-r-r------ 1 ubuntu ubuntu 2476 Nov 26 09:41 application.properties
-r-x------ 1 ubuntu ubuntu 94806861 Nov 26 09:45 risk-engine-1.jar
ubuntu@someothermachine:/var/www/risk.monobank.com/java$ java -jar risk-engine-1.jar
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
...
Isso deixa a questão em aberto: como os arquivos .properties e .jar chegarão ao servidor? Infelizmente, pode haver muitas respostas.
Como usar ferramentas de compilação, SSH e Ansible para implantar microsserviços Java
Conselhos enfadonhos, mas não menos excelentes sobre como implantar microsserviços Java... Na verdade, exatamente da mesma forma que os administradores de sistema implantaram qualquer programa de servidor Java nas empresas nos últimos 20 anos. Esta é a mistura:- sua ferramenta de construção favorita (Maven, Gradle)
- bom e velho SSH/SCP para copiar .jars para servidores
- Scripts Bash para gerenciar scripts e servidores de implantação
- ou melhor ainda: alguns scripts Ansible.
Como usar o Docker para implantar microsserviços Java
Voltemos à doce agonia da escolha. Há alguns anos, o Docker entrou em cena e, com ele, a conteinerização. Se você nunca trabalhou com isso, aqui está uma breve descrição voltada para usuários finais e desenvolvedores:- Um container (simplificado) é parecido com a boa e velha máquina virtual, porém “mais leve”. Se você não tiver certeza do que significa “mais fácil” neste contexto, verifique esta resposta no Stackoverflow .
- O contêiner garante sua própria portabilidade. Ou seja, funciona em qualquer lugar. Parece familiar, não é?
- agrupar seu arquivo jar em uma imagem Docker
- envie esta imagem para um registro Docker privado
- puxe e execute esta imagem em sua plataforma de destino
- ou copie a imagem do Docker diretamente para o seu sistema de produção e execute-a.
Como usar Docker Swarm ou Kubernetes para implantar microsserviços Java
Digamos que você decida experimentar o Docker. Cada vez que você implanta um microsserviço Java, você cria uma imagem Docker que agrupa seu arquivo .jar. Digamos que você tenha alguns desses microsserviços Java e queira implantá-los em várias máquinas (em um cluster). Surge a pergunta: como gerenciar esse cluster? Executar contêineres Docker, verificar desempenho, implantar atualizações, dimensionar o sistema (brrr)? Duas respostas possíveis para esta pergunta são Docker Swarm e Kubernetes. Entrar em detalhes sobre ambas as opções tornaria este tutorial já longo demais, mas achamos importante mencionar que ambas as opções dependem, em última análise, de você escrever arquivos YAML (consulte Histórias de recuo do Yaml ) para gerenciar seu cluster. Se você quiser saber quais sentimentos isso evoca na prática, basta digitar uma consulta semelhante na busca do Twitter. Portanto, o processo de implantação de seus microsserviços Java agora é mais ou menos assim:- Configurando e gerenciando Docker Swarm/Kubernetes
- Todas as etapas para Docker (veja acima)
- Escreva e execute YAML
até seus olhos sangrarematé que tudo funcione.
Como testar microsserviços Java
Digamos que você decida implementar microsserviços em produção. Como podemos testar a integração de n microsserviços durante o desenvolvimento agora? Como você pode ver se todo o fluxo de trabalho está funcionando, e não apenas partes dele? Na prática, você pode usar um dos três métodos:- Com um pouco de trabalho (se você estiver usando frameworks como Spring Boot), você pode combinar todos os seus microsserviços em uma classe de inicialização e carregar todos os microsserviços usando uma única classe Wrapper.java - dependendo se você tem memória suficiente em sua máquina para execute todos os seus microsserviços.
- Você pode copiar as configurações do Docker Swarm ou Kubernetes localmente.
- Apenas não execute mais testes de integração localmente. Em vez disso, implante um ambiente DEV/TEST dedicado. Isso é algo que algumas equipes realmente fazem quando sucumbem ao incômodo das configurações de microsserviços locais.
GO TO FULL VERSION