Visão geral do Java on Azure Container Apps
Os Aplicativos de Contêiner do Azure podem executar qualquer aplicativo Java em contêiner na nuvem, oferecendo opções flexíveis para como você implanta seus aplicativos.
Ao usar Aplicativos de Contêiner para seus aplicativos Java em contêineres, você obtém:
Dimensionamento econômico: quando você usa o plano de consumo, seus aplicativos Java podem ser dimensionados para zero. O dimensionamento quando há pouca demanda para seu aplicativo reduz automaticamente os custos de seus projetos.
Opções de implantação: os Aplicativos de Contêiner do Azure integram-se ao Buildpacks, o que permite implantar diretamente de uma compilação do Maven, por meio de arquivos de artefato ou com seu próprio Dockerfile.
Implantação JAR (Visualização): Você pode implantar seu aplicativo de contêiner diretamente de um arquivo JAR.
Implantação do WAR (Visualização): você pode implantar seu aplicativo de contêiner diretamente de um arquivo WAR.
Suporte IDE: você pode implantar seu aplicativo de contêiner diretamente do IntelliJ.
Ajuste automático de memória (Preview): Container Apps otimiza a forma como a Java Virtual Machine (JVM) gerencia a memória, disponibilizando o máximo de memória possível para seus aplicativos Java.
Variáveis de ambiente de construção (Visualização): Você pode configurar pares chave-valor personalizados para controlar a compilação de imagem Java a partir do código-fonte.
Este artigo detalha as informações que você precisa saber ao criar aplicativos Java em Aplicativos de Contêiner do Azure.
Tipos de implementação
Executar aplicativos em contêineres geralmente significa que você precisa criar um Dockerfile para seu aplicativo, mas executar aplicativos Java em aplicativos de contêiner oferece algumas opções.
Tipo | Description | Usa Buildpacks | Usa um Dockerfile |
---|---|---|---|
Compilação do código-fonte | Você pode implantar diretamente em Container Apps a partir do seu código-fonte. | Sim | No |
Construção de artefactos | Você pode criar uma compilação do Maven para implantar em aplicativos de contêiner | Sim | No |
Dockerfile | Você pode criar seu Dockerfile manualmente e assumir o controle total sobre sua implantação. | Não | Sim |
Nota
As implantações do Buildpacks suportam as versões 8, 11, 17 e 21 do JDK.
Tipos de aplicação
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 para ajudá-lo a decidir qual tipo de aplicativo é melhor para seu cenário.
Os exemplos listados nesta tabela não se destinam a ser exaustivos, mas a ajudá-lo a entender melhor a intenção de diferentes tipos de aplicativos.
Type | Exemplos | Implementar como... |
---|---|---|
Aplicativos Web e pontos de extremidade de API | Bota de primavera, Quarkus, Apache Tomcat e Jetty | Um aplicativo de contêiner individual |
Aplicativos de console, tarefas agendadas, executores de tarefas, trabalhos em lote | SparkJobs, tarefas ETL, Spring Batch Job, Jenkins pipeline job | Um trabalho de aplicativos de contêiner |
Depuração
Ao depurar seu aplicativo Java em Aplicativos de Contêiner, certifique-se de inspecionar o agente Java em processo em busca de mensagens de depuração de fluxo de log e console.
Resoluçã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ível.
Processos sem monitoração de estado: à medida que seu aplicativo de contêiner entra e sai, novos processos são criados e encerrados. Certifique-se de planejar com antecedência para gravar dados no armazenamento compartilhado, como bancos de dados e compartilhamentos de sistema de arquivos. Não espere que nenhum arquivo gravado diretamente no sistema de arquivos do contêiner esteja disponível para qualquer outro contêiner.
Dimensionar para zero é o padrão: se você precisar garantir que uma ou mais instâncias do seu aplicativo estejam em execução contínua, certifique-se de definir uma regra de escala para melhor atender às suas necessidades.
Comportamento inesperado: se o aplicativo de contêiner falhar ao criar, iniciar ou executar, verifique se o caminho do artefato está definido corretamente no contêiner.
Problemas de suporte do Buildpack: Se o seu Buildpack não suportar dependências ou a versão do Java que você precisa, crie seu próprio Dockerfile para implantar seu aplicativo. Você pode exibir um Dockerfile de exemplo para referência.
Sinais SIGTERM e SIGINT: Por padrão, a JVM manipula
SIGTERM
eSIGINT
sinaliza e não os passa para o aplicativo, a menos que você intercete esses sinais e os manipule em seu aplicativo de acordo. Container Apps usa eSIGTERM
SIGINT
para controle de processo. Se você não capturar esses sinais e seu aplicativo for encerrado inesperadamente, você poderá perdê-los, a menos que os persista no armazenamento.Acesso a imagens de contêiner: se você usar a implantação de artefato ou código-fonte em combinação com o registro padrão, não terá acesso direto às imagens de contêiner.
Monitorização
Todas as ferramentas de observabilidade padrão funcionam com sua aplicação Java. Ao construir seus aplicativos Java para serem executados em Aplicativos de Contêiner, lembre-se dos seguintes itens:
Métricas: as métricas da Java Virtual Machine (JVM) são críticas para monitorar a integridade e o desempenho de seus aplicativos Java. Os dados coletados incluem informações sobre o uso de memória, coleta de lixo, contagem de threads da JVM. Você pode verificar métricas para ajudar a garantir a integridade e a estabilidade de seus aplicativos.
Log: envie mensagens de erro e de aplicativo para
stdout
oustderror
para que elas possam aparecer no fluxo de log. Evite registrar diretamente no sistema de arquivos do contêiner, como é comum ao usar serviços de log populares.Configuração de monitoramento de desempenho: implante serviços de monitoramento de desempenho como um contêiner separado em seu ambiente de Aplicativos de Contêiner para que ele possa acessar diretamente seu aplicativo.
Diagnóstico
Os Aplicativos de Contêiner do Azure oferecem ferramentas de diagnóstico internas 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 registrador dinâmico: permite que você acesse e verifique diferentes níveis de detalhes de log sem modificações de código ou forçando você a reiniciar seu aplicativo. Você pode visualizar Definir nível de registrador dinâmico para referência.
Dimensionamento
Se você precisar garantir que as solicitações de seus aplicativos front-end cheguem ao mesmo servidor ou que seu aplicativo front-end esteja dividido entre vários contêineres, certifique-se de habilitar sessões adesivas.
Segurança
O tempo de execução de Aplicativos de Contêiner encerra TLS/SSL para você dentro de seu ambiente de Aplicativos de Contêiner.
Gestão da memória
Para ajudar a otimizar o gerenciamento de memória em seu aplicativo Java, você pode garantir que o ajuste de memória JVM esteja habilitado em seu aplicativo.
A memória é medida em gibibytes (Gi) e pares de núcleo da CPU. A tabela a seguir mostra o intervalo de recursos disponíveis para seu aplicativo de contêiner.
Threshold | 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úcleos, com memória disponível em uma proporção de 2:1. Por exemplo, se você precisar de 1,25 núcleos, terá 2,5 Gi de memória disponível para seu aplicativo de contêiner.
Nota
Para aplicativos que usam JDK versões 9 e inferiores, certifique-se de definir configurações de memória JVM personalizadas para corresponder à alocação de memória nos Aplicativos de Contêiner do Azure.
Suporte a componentes Java
Os Aplicativos de Contêiner do Azure oferecem suporte para os seguintes componentes Java como serviços gerenciados:
Eureka Server for Spring: O registro e a descoberta de serviços são requisitos fundamentais para manter uma lista de instâncias de aplicativos ativos. Seu aplicativo usa essa lista para roteamento e balanceamento de carga de solicitações de entrada. Configurar cada cliente manualmente leva tempo e introduz a possibilidade de erro humano. O Eureka Server simplifica a gestão da descoberta de serviços, funcionando como um registo de serviços onde os microsserviços podem registar-se e descobrir outros serviços dentro do sistema.
Config Server for Spring: O Config Server fornece gerenciamento de configuração externo centralizado para sistemas distribuídos. Este componente foi projetado para enfrentar os desafios de gerenciar definições de configuração em vários microsserviços em um ambiente nativo da nuvem.
Gateway for Spring: O Gateway for Spring oferece uma maneira eficiente e poderosa de rotear, gerenciar e lidar com solicitações de API como parte de uma arquitetura de microsserviços. Ele serve como um API Gateway que roteia solicitações externas para diferentes serviços, adicionando vários recursos, como filtragem, balanceamento de carga e muito mais.
Admin for Spring: O componente gerenciado Admin for Spring fornece uma interface administrativa projetada para aplicativos Web Spring Boot que possuem pontos de extremidade atuadores. Um componente gerenciado fornece integração e gerenciamento ao seu aplicativo de contêiner, permitindo que você vincule seu aplicativo de contêiner ao componente Admin for Spring.