Na última década, os microsserviços mudaram a forma como os desenvolvedores e as organizações criam e enviam aplicativos. De acordo com Pesquisa de desenvolvedores do Stack Overflow de 2023Em um estudo realizado em 2008, cerca de 49% de profissionais de software usam microsserviços diariamente. Para entender melhor como os microsserviços ganharam popularidade, analisaremos o cenário do Java e exploraremos como e quando você deve criar e enviar microsserviços usando Java.
O que são microsserviços em Java?
Microsserviços são um padrão de arquitetura de sistema que permite aos desenvolvedores criar e implementar aplicativos de forma modular. Uma arquitetura modular significa que um serviço pode ser alterado e implementado independentemente do restante dos serviços do sistema. Cada microsserviço é projetado para executar uma função comercial específica e pode ser desenvolvido, implantado e dimensionado separadamente.
Os microsserviços em Java permitem que os programadores usem o Java para criar e enviar serviços pequenos e grandes usando os recursos fornecidos pelo Máquina virtual Java (JVM) e o ecossistema Java.
Como funcionam os microsserviços Java?
Os microsserviços Java funcionam como componentes separados e autônomos que trabalham juntos para atender aos requisitos de um aplicativo específico. Essa separação de preocupações faz com que cada microsserviço seja responsável por um único recurso comercial e se comunique com outros microsserviços e sistemas externos por meio de interfaces bem definidas.
Como os microsserviços se comunicam entre si em Java?
Os microsserviços Java podem se comunicar uns com os outros principalmente por meio de protocolos da Web existentes, como HTTP/REST e filas de mensagens, pub/sub sistemas como RabbitMQ ou Apache Kafka, ou até mesmo protocolos de comunicação mais recentes, como GraphQL e gRPC. A escolha do método de comunicação depende de fatores como requisitos de desempenho, escalabilidade e complexidade do aplicativo. Muitas arquiteturas de microsserviços usam uma combinação dessas abordagens para se comunicar dentro do sistema.
Microsserviços Java vs. Monolito
Aqui estão algumas das principais diferenças entre o uso de uma arquitetura de microsserviços e uma arquitetura monolítica:
-
- Escalabilidade: Os microsserviços oferecem melhor escalabilidade porque cada serviço pode ser dimensionado de forma independente à medida que os usuários ativos do produto aumentam. No entanto, o dimensionamento de um aplicativo monolítico normalmente envolve o dimensionamento de todo o aplicativo, mesmo que apenas módulos específicos exijam recursos adicionais.
- Capacidade de manutenção e desenvolvimento: Os microsserviços permitem que equipes de desenvolvimento menores e focadas trabalhem de forma independente em diferentes serviços. Cada equipe pode definir limites claros entre os serviços, resultando em ciclos de desenvolvimento mais rápidos e depuração e teste mais fáceis de serviços individuais. Em arquiteturas monolíticas, os aplicativos podem se tornar complexos e difíceis de manter à medida que crescem em tamanho e funcionalidade. Nos estágios iniciais de seu produto, é uma boa aposta ter um sistema monolítico e adaptar-se aos microsserviços à medida que sua organização cresce.
- Resiliência: Os microsserviços são mais resistentes a falhas, pois os problemas em um serviço não afetam necessariamente todo o aplicativo. Com os monólitos, um único ponto de falha em um aplicativo pode derrubar todo o sistema. Nesses casos, o ideal é contar com mecanismos de tolerância a falhas ao escrever aplicativos Java.
O Java é bom para microsserviços?
O Java é ideal para a criação de microsserviços devido a suas extensas bibliotecas, otimizações de desempenho e vasto ecossistema. Vamos explicar melhor o motivo abaixo:
-
- Bibliotecas extensas: Bibliotecas como a Spring Cloud Netflix fornecem componentes essenciais para a criação de sistemas distribuídos, incluindo descoberta de serviços (Eureka), tolerância a falhas (Hystrix) e balanceamento de carga no lado do cliente (Ribbon). Essas bibliotecas se integram perfeitamente aos aplicativos Java, permitindo que os desenvolvedores implementem arquiteturas de microsserviços resilientes e dimensionáveis. Alguns outros microsserviços Java amplamente usados pelos desenvolvedores são Spring Boot, Jersey, Dropwizard e Spark.
- Otimizações de desempenho: O JVM evoluiu significativamente para dar suporte à arquitetura de microsserviços. Com inovações como o GraalVM e aprimoramentos no tempo de execução da JVM, os aplicativos Java podem alcançar melhores desempenho e eficiênciao que é fundamental para os microsserviços que lidam com requisitos de alta taxa de transferência e baixa latência. Além disso, os recursos de multithreading do Java permitem que os desenvolvedores lidem com eficiência com solicitações simultâneas, um requisito comum em microsserviços.
Alguns grandes produtos voltados para o usuário são a prova da adequação do Java para microsserviços. Por exemplo:
-
- Netflix: A Netflix usa Java de forma extensiva para sua arquitetura de microsserviços, aproveitando bibliotecas como Hystrix e RxJava para garantir a tolerância a falhas e o balanceamento de carga.
- Uber: Os serviços de back-end da Uber são predominantemente desenvolvidos em Java, o que demonstra sua capacidade de lidar com sistemas distribuídos em grande escala.
- Amazon: O AWS Lambda da Amazon, um serviço de computação sem servidor, oferece suporte ao Java como um ambiente de tempo de execução, demonstrando a adaptabilidade do Java às arquiteturas modernas nativas da nuvem.
Casos de uso de microsserviços Java
-
- Análise em tempo real: Os microsserviços podem processar grandes quantidades de dados em tempo real, o que os torna ideais para aplicativos que exigem análise rápida de dados.
- Autenticação do usuário: Um serviço separado em seu sistema pode lidar com a autenticação e a autorização do usuário, permitindo que outros serviços se concentrem em suas funcionalidades principais.
- Gerenciamento de inventário: Os microsserviços podem gerenciar os níveis de estoque em várias lojas ou depósitos, permitindo maior escalabilidade e flexibilidade.
- Aplicativos de IoT: Quando vários dispositivos geram grandes volumes de dados, os microsserviços Java podem lidar com o processamento de dados, o gerenciamento de dispositivos e a análise em tempo real.
Tutorial de microsserviços Java
Vamos ver como usar o Java para iniciar um simples microsserviço "Hello World" usando a ferramenta de compilação Gradle.
Etapa 1: Configurar o repositório ou diretório do projeto
Se estiver em sua estação de trabalho, crie um diretório vazio para hospedar o serviço de amostra. Recomendamos criar um repositório privado do GitHub visitando repo.new em seu navegador da Web. Depois de fazer isso, inicie um espaço de código do GitHub no repositório recém-criado.
Etapa 2: Inicializar um projeto Gradle
Quando você estiver dentro do espaço de trabalho do código, execute os seguintes comandos para verificar se o Java e o Gradle estão instalados no terminal:
1 2 |
java --versão gradil -versão |
Use o comando a seguir para criar um projeto Java usando o Gradle:
1 |
gradil inicial --tipo java-aplicativo |
Etapa 3: Implementar a classe do aplicativo
Vamos criar um servidor HTTP simples usando Servidor http.
Crie um novo diretório (src/main/java) se ele não existir e, em seguida, crie uma estrutura de diretório de pacote Java (com.example.microservice) no interior src/main/java. Depois disso, crie um arquivo de código-fonte Java chamado App.java dentro do diretório do pacote.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
pacote org.exemplo; importação com.sol.rede.servidor https.Servidor http; importação com.sol.rede.servidor https.HttpHandler; importação com.sol.rede.servidor https.HttpExchange; importação java.io.IOException; importação java.io.Fluxo de saída; público classe Aplicativo { público estático vazio principal(Cordas[] argumentos) lançamentos IOException { int porto = 8080; Servidor http servidor = Servidor http.criar(novo java.rede.InetSocketAddress(porto), 0); servidor.createContext("/hello", novo OláHandler()); servidor.setExecutor(nulo); // executor padrão Sistema.fora.println("Servidor iniciado na porta " + porto); servidor.iniciar(); } estático classe OláHandler implementa HttpHandler { @Override público vazio manuseio(HttpExchange troca) lançamentos IOException { Cordas resposta = "Olá do Microservice!"; troca.sendResponseHeaders(200, resposta.getBytes().comprimento); Fluxo de saída os = troca.getResponseBody(); os.escrever(resposta.getBytes()); os.próximo(); } } } |
O Servidor http escuta as solicitações HTTP de entrada e delega o tratamento para o OláHandlerque envia de volta uma resposta simples. Você pode estender esse exemplo para lidar com mais pontos de extremidade e lógica de solicitação/resposta mais complexa com base em seus requisitos.
Etapa 4: teste o microsserviço
Para iniciar o microsserviço, use o comando execução do gradle comando. Em seguida, abra um navegador da Web ou use uma ferramenta como o cURL para testar seu microsserviço acessando http://localhost:8080/hello. Você verá a resposta: Olá da Microservice!
Conclusão
Nesta publicação do blog, exploramos como os microsserviços podem ser a arquitetura de solução certa a ser usada quando as necessidades do seu aplicativo Web se tornam mais complexas com mais usuários e tempo. Também analisamos o lugar do Java nesse cenário e apresentamos seus casos de uso no mundo nativo da nuvem. Por fim, analisamos como criar um microsserviço básico em Java usando apenas os recursos padrão do servidor HTTP Java (Servidor http e HttpHandler) sem usar uma estrutura da Web externa.
Para continuar aprendendo sobre microsserviços, consulte estes recursos do Couchbase:
-
- 4 padrões para arquitetura de microsserviços no Couchbase
- Crie uma arquitetura de microsserviço Java de nível de produção com o JHipster e o Couchbase
- Refatoração de aplicativos de microsserviços do Spring para trabalhar com o Couchbase
- Criação de microsserviços elásticos com Kubernetes e Spring Boot
- O que é desenvolvimento moderno de aplicativos? Um guia
- SDKs do Couchbase - Java