Visão geral sobre Java em Aplicativos de Contêiner do Azure
Os Aplicativos de Contêiner do Azure podem executar qualquer aplicativo Java conteinerizado na nuvem e, ao mesmo tempo, oferecer opções flexíveis para a forma como você implanta seus aplicativos.
Ao usar Aplicativos de Contêiner para seus aplicativos Java conteinerizados, você obtém o seguinte:
Dimensionamento econômico: quando você usa o plano Consumo, seus aplicativos Java podem ser reduzidos a zero. Reduzir horizontalmente quando há pouca demanda para o seu aplicativo reduz automaticamente os custos para seus projetos.
Opções de implantação: os Aplicativos de Contêiner do Azure se integram ao Buildpacks, o que lhe permite implantar diretamente de um build do Maven por meio de arquivos de artefato ou com seu próprio Dockerfile.
Implantação de JAR (Visualização): você pode implantar seu aplicativo de contêiner diretamente a partir de um arquivo JAR.
Implantação de WAR (Visualização): você pode implantar seu aplicativo de contêiner diretamente a partir de um arquivo WAR.
Suporte ao IDE: você pode implantar seu aplicativo de contêiner diretamente do IntelliJ.
Ajuste automático de memória (Visualização): os Aplicativos de Contêiner otimizam a forma como a Máquina Virtual Java (JVM) gerencia a memória, disponibilizando o máximo de memória possível para seus aplicativos Java.
Compilação de variáveis de ambiente (Visualização): você pode configurar pares de chave-valor personalizados para controlar a compilação da imagem Java a partir do código-fonte.
Esse artigo detalha as informações de que você precisa para criar aplicativos Java nos Aplicativos de Contêiner do Azure.
Tipos de implantação
A execução de aplicativos conteinerizados costuma significar que você precisa criar um Dockerfile para o seu aplicativo, mas a execução de aplicativos Java em Aplicativos de Contêiner lhe oferece algumas opções.
Tipo | Descrição | Usa o Buildpacks | Usa um Dockerfile |
---|---|---|---|
Build do código-fonte | Você pode implantar diretamente nos Aplicativos de Contêiner a partir do seu código-fonte. | Sim | Não |
Compilação de artefato | Você pode criar um build do Maven para implantar nos Aplicativos de Contêiner | Sim | Não |
Dockerfile | Você pode criar seu Dockerfile manualmente e assumir um controle total de sua implantação. | Não | Sim |
Observação
As implantações do Buildpacks dão suporte às versões 8, 11, 17 e 21 do JDK.
Tipos de aplicativos
Diferentes tipos de aplicativos são implementados como um aplicativo de contêiner individual ou como um trabalho de Aplicativos de Contêiner. Use a tabela a seguir, que ajudará você a decidir qual tipo de aplicativo é melhor para o seu cenário.
Os exemplos listados nessa tabela não pretendem ser exaustivos, mas ajudar você a entender melhor a intenção dos diferentes tipos de aplicativo.
Tipo | Exemplos | Implementar como... |
---|---|---|
Aplicativos web e pontos de extremidade de API | Spring Boot, Quarkus, Apache Tomcat e Jetty | Um aplicativo de contêiner individual |
Aplicativos de console, tarefas agendadas, executores de tarefas, trabalhos em lote | SparkJobs, tarefas de ETL, Trabalho em Lote do Spring, trabalho de pipeline do Jenkins | Um trabalho de Aplicativos de Contêiner |
Depuração
Ao depurar seu aplicativo Java nos Aplicativos de Contêiner, certifique-se de inspecionar o agente dentro do processo do Java em busca de logs de fluxo e mensagens de depuração de console.
Solução de problemas
Tenha em mente os seguintes itens ao desenvolver seus aplicativos Java:
Recursos padrão: por padrão, um aplicativo tem meia CPU e 1 GB disponíveis.
Processos sem estado: à medida que seu aplicativo de contêiner é ampliado e reduzido, novos processos são criados e desligados. Certifique-se de planejar com antecedência para poder gravar dados no armazenamento compartilhado, como bancos de dados e compartilhamentos do sistema de arquivos. Não espere que nenhum arquivo gravado diretamente no sistema de arquivos de contêiner esteja disponível para qualquer outro contêiner.
Reduzir a zero é o padrão: se você precisar garantir que uma ou mais instâncias do seu aplicativo fiquem continuamente em execução, certifique-se de definir uma regra de dimensionamento para atender melhor às suas necessidades.
Comportamento inesperado: se o seu aplicativo de contêiner apresentar falha ao compilar, iniciar ou executar, verifique se o caminho do artefato está definido corretamente no seu contêiner.
Problemas de suporte do Buildpack: se o Buildpack não der suporte às dependências ou à versão do Java de que você precisa, crie seu próprio Dockerfile para implantar seu aplicativo. Você pode ver uma amostra de Dockerfile para sua referência.
Sinais SIGTERM e SIGINT: por padrão, a JVM lida com os sinais
SIGTERM
eSIGINT
e não os repassa para o aplicativo, a menos que você intercepte esses sinais e lide com eles no seu aplicativo adequadamente. Os Aplicativos de Contêiner usam tantoSIGTERM
quantoSIGINT
para o controle de processo. Se não capturar esses sinais e seu aplicativo for encerrado inesperadamente, você poderá perdê-los, a menos que os torne persistentes no armazenamento.Acesso a imagens de contêiner: se usar a implantação de artefatos ou código-fonte em combinação com o registro padrão, você não terá acesso direto às imagens do seu contêiner.
Monitoramento
Todas as ferramentas de observabilidade padrão funcionam com seu aplicativo Java. À medida que você cria seus aplicativos Java para serem executados nos Aplicativos de Contêiner, tenha em mente os seguintes itens:
Métricas: as métricas de Máquina Virtual Java (JVM) são críticas para monitorar a integridade e o desempenho de seus aplicativos Java. Os dados coletados incluem insights sobre uso de memória, coleta de lixo, contagem de threads de sua JVM. Você pode conferir as métricas para ajudar a garantir a integridade e a estabilidade de seus aplicativos.
Registro em log: envie mensagens do aplicativo e de erro para
stdout
oustderror
para que possam aparecer no fluxo de log. Evite fazer login diretamente no sistema de arquivos do contêiner, como é comum ocorrer quando você usa os serviços de registro em log mais populares.Configuração de monitoramento de desempenho: implante serviços de monitoramento de desempenho como um contêiner separado no seu ambiente de Aplicativos de Contêiner, para que ele possa acessar seu aplicativo diretamente.
Diagnósticos
Os Aplicativos de Contêiner do Azure oferecem ferramentas de diagnóstico integradas exclusivamente para desenvolvedores Java. Esse suporte simplifica a depuração e a solução de problemas de aplicativos Java em execução nos Aplicativos de Contêiner do Azure para maior eficiência e facilidade.
- Nível do agente dinâmico: permite que você acesse e verifique diferentes detalhes de logs sem modificar o código nem ser forçado a reiniciar seu aplicativo. Você pode conferir Definir o nível do agente dinâmico como referência.
Dimensionamento
Se precisar garantir que as solicitações de seus aplicativos de front-end cheguem ao mesmo servidor, ou se o aplicativo de front-end estiver dividido entre vários contêineres, certifique-se de habilitar as sessões adesivas.
Segurança
O runtime dos Aplicativos de Contêiner encerra o SSL para você dentro do seu ambiente de Aplicativos de Contêiner.
Gerenciamento de memória
Para ajudar a otimizar o gerenciamento de memória no seu aplicativo Java, você pode se certificar de que o ajuste de memória de JVM esteja habilitado no seu aplicativo.
A memória é medida em pares de gibibytes (Gi) e núcleo de CPU. A tabela a seguir mostra a gama de recursos disponíveis para o seu aplicativo de contêiner.
Limite | Núcleos de CPU | Memória em gibibytes (Gi) |
---|---|---|
Mínimo | 0,25 | 0.5 |
Máximo | 4 | 8 |
Os núcleos estão disponíveis em incrementos de 0,25 núcleo, com memória disponível a uma proporção de 2:1. Por exemplo, se você precisar de 1,25 núcleos, terá 2,5 Gi de memória disponíveis para o seu aplicativo de contêiner.
Observação
Para aplicativos que usam as versões 9 e inferiores do JDK, certifique-se de definir as configurações de memória personalizadas da JVM para corresponder à alocação de memória nos Aplicativos de Contêiner do Azure.
Suporte aos componentes Spring
Os Aplicativos de Contêiner do Azure oferecem suporte para os seguintes Componentes Spring como serviços gerenciados:
Servidor Eureka do Spring: o registro e a descoberta do serviço são requisitos fundamentais para manter uma lista de instâncias dinâmicas do aplicativo. Seu aplicativo usa essa lista para roteamento e balanceamento de carga de solicitações de entrada. Configurar manualmente cada cliente pode demorar e possibilitar o erro humano. O Servidor Eureka simplifica o gerenciamento da descoberta de serviços funcionando como um registro de serviço em que os microsserviços podem se registrar e descobrir outros serviços no sistema.
Servidor de Configuração do Spring: o Servidor de Configuração fornece gerenciamento de configuração externa centralizado para sistemas distribuídos. Esse componente projetado para enfrentar os desafios de gerenciamento de configurações em vários microsserviços em um ambiente nativo de nuvem.
Administrador do Spring: o componente gerenciado Administrador do Spring fornece uma interface administrativa projetada para aplicativos web do Spring Boot que têm pontos de extremidade de atuador. Um componente gerenciado fornece integração e gerenciamento ao seu aplicativo de contêiner ao permitir que você vincule seu aplicativo de contêiner ao componente Administrador do Spring.