Dimensione com segurança, monitoramento e automação de ponta a ponta

Ao projetar aplicativos, precisamos determinar como nos adaptar às mudanças na carga de trabalho, recuperar de falhas inesperadas, minimizar os riscos de segurança e assim por diante. Embora se possa começar com uma abordagem de tentativa e erro, isso tira tempo de outros objetivos organizacionais e pode afetar negativamente nossa reputação. O Azure fornece a orientação arquitetônica necessária para acertar as coisas desde o início. Você também tem tudo o que precisa para criar um aplicativo escalável - desde segurança de última geração e dimensionamento automático até serviços de suporte para dados, mensagens, cache, monitoramento de desempenho e automação. Muitos desses serviços de suporte também são baseados em software de código aberto popular - como PostgreSQL, Redis, JMS e Kafka - para que você não fique preso a soluções proprietárias.

Diagrama com o título

Agora vamos dar uma olhada em alguns dos principais serviços e recursos do Azure - e como você pode usá-los para criar aplicativos Java escaláveis.

Estenda os recursos para aplicativos Java - bancos de dados e mensagens

Além de fornecer várias opções para executar seu código Java, o Azure oferece uma ampla gama de serviços totalmente gerenciados para dar suporte às suas necessidades de banco de dados - incluindo Banco de Dados do Azure para PostgreSQL, Banco de Dados do Azure para MySQL, MongoDB Atlas, Azure Cosmos DB, Banco de Dados SQL do Azure e Instância Gerenciada SQL do Azure. O mesmo vale para mensagens, com opções que incluem o Barramento de Serviço do Azure, Hubs de Eventos do Azure e Apache Kafka para Confluent Cloud.

A camada Premium do Barramento de Serviço do Azure dá suporte ao JMS, o modelo de programação do Java Messaging Service. Independentemente de seus aplicativos estarem sendo executados em VMs, em Kubernetes ou em serviços PaaS totalmente gerenciados, você pode provisionar e usar rapidamente esses dados e serviços de mensagens totalmente gerenciados usando clientes de código aberto, SDKs Java do Azure, Spring starters e integrações de servidor de aplicativos. Todos eles fornecem as garantias de conformidade, disponibilidade e confiabilidade que você esperaria da Microsoft e do Azure. Muitos desenvolvedores Java e Spring querem usar bibliotecas idiomáticas para simplificar as conexões com seus serviços de nuvem preferidos. A Microsoft mantém uma lista abrangente de bibliotecas, drivers e módulos que permitem que você interaja facilmente com os serviços do Azure em gerenciamento de dados, mensagens, cache, armazenamento, eventos, diretório e segredos. Para obter mais informações, consulte o Guia do desenvolvedor do Spring Cloud Azure.

Diagrama que lista os recursos do Spring Cloud Azure e os serviços do Azure associados.

Diagrama que mostra as categorias de recursos e os serviços associados da plataforma Azure suportados por várias bibliotecas Java, drivers e módulos Spring.

Zero-Trust - Rede segura

Você pode proteger seus aplicativos Java implantando-os em uma Rede Virtual do Azure - o bloco de construção fundamental para suas próprias redes privadas no Azure. As redes virtuais permitem que muitos tipos de recursos do Azure se comuniquem com segurança entre si, com a Internet e com suas redes e sistemas locais. Você pode usar uma rede virtual para isolar seus aplicativos e serviços de back-end de suporte da Internet e colocá-los em suas redes privadas. Você pode assumir o controle total de entrada e saída para seus aplicativos e sistemas de back-end.

Diagrama do Acelerador de Zona de Aterrissagem de Aplicativos de Contêiner do Azure.

Zero-Trust - Comunicações seguras de ponta a ponta

A implementação de comunicações seguras como parte de uma arquitetura de solução pode ser um desafio. Muitas empresas alternam manualmente seus certificados ou criam suas próprias soluções para automatizar o provisionamento e a configuração. Mesmo assim, ainda existem riscos de exfiltração de dados, como cópia ou transferência não autorizadas de dados.

Com o Azure, você pode proteger as comunicações de ponta a ponta ou encerrar a segurança no nível de transporte em qualquer ponto de comunicação. Você também pode automatizar o provisionamento e a configuração de todos os recursos do Azure necessários para proteger as comunicações.

Com base no princípio de "nunca confiar, sempre verificar e livre de credenciais", o Zero Trust ajuda a proteger todas as comunicações, eliminando certificados desconhecidos e não gerenciados e confiando apenas em certificados que são compartilhados, verificando a identidade antes de conceder acesso a esses certificados. Você pode usar qualquer tipo de certificado TLS/SSL, incluindo certificados emitidos por uma autoridade de certificação, certificados de validação estendida, certificados curinga com suporte para qualquer número de subdomínios ou certificados autoassinados para ambientes de desenvolvimento e teste.

Os aplicativos Java ou Spring Boot podem carregar certificados com segurança do Azure Key Vault (discutido a seguir). Com o Azure Key Vault, você controla o armazenamento e a distribuição de certificados para reduzir vazamentos acidentais. Os aplicativos e serviços podem acessar certificados com segurança usando identidades gerenciadas, controle de acesso baseado em função e o princípio do menor privilégio. Esse carregamento seguro é alimentado usando o Provedor JCA (Java Cryptography Architecture) do Azure Key Vault.

Diagrama da arquitetura para comunicações seguras de ponta a ponta para aplicativos Spring Boot.

Zero-Trust - Gerencie segredos

Muitos aplicativos Java se conectam a serviços de suporte usando URLs e credenciais - informações que, se expostas, podem ser usadas para obter acesso não autorizado a dados confidenciais. Incorporar essas informações em um aplicativo em si apresenta um enorme risco de segurança por muitos motivos, incluindo a descoberta por meio de um repositório de código. Muitos desenvolvedores externalizam essas credenciais usando variáveis de ambiente, para que vários aplicativos possam carregá-las, mas isso apenas desloca o risco do próprio código para o ambiente de execução.

Diagrama com o título 'Zero Trust - gerenciar segredos usando o Azure Key Vault' e incluindo um resumo dos recursos descritos nesta seção.

O Azure Key Vault fornece uma maneira melhor, mais segura e mais segura de proteger segredos. Ele oferece controle total sobre o armazenamento e a distribuição de segredos de aplicativos, usando o RBAC (Controle de Acesso Baseado em Função) e o princípio do menor privilégio para limitar o acesso. Você mantém o controle sobre os segredos do seu aplicativo - basta conceder permissão para seus aplicativos usá-los conforme necessário. Após a inicialização do aplicativo, antes de conceder acesso a segredos, o aplicativo se autentica com o Microsoft Entra ID e o Azure Key Vault autoriza usando o Azure RBAC. O Azure Key Vault inclui recursos completos de auditoria e tem duas camadas de serviço: Standard, que criptografa com uma chave de software, e uma camada Premium, que inclui chaves protegidas pelo módulo de segurança de hardware (HSM).

Autenticação e autorização do utilizador final

A maioria dos aplicativos Java corporativos requer autenticação e autorização do usuário, que você pode implementar usando o Microsoft Entra ID - uma solução completa de gerenciamento de identidade e acesso com segurança integrada. As contas de usuário final podem ser identidades organizacionais ou identidades sociais do Facebook, Twitter ou Gmail usando o Microsoft Entra ID e o Azure Ative Directory B2C. Você pode implementar soluções baseadas no Microsoft Entra ID usando a Biblioteca de Autenticação da Microsoft para Java ou o Spring Boot Starter para Microsoft Entra. Você também pode usar qualquer provedor de identidade de sua escolha - como ForgeRock, Auth0, Ping ou Okta.

Monitore de ponta a ponta

Com o Azure, você pode monitorar seus aplicativos Java de ponta a ponta, usando qualquer ferramenta e plataforma. Como alternativa, você pode implementar o monitoramento nativo totalmente gerenciado - incluindo o monitoramento de desempenho de aplicativos (APM) - usando o Application Insights, um recurso do Azure Monitor. Ele fornece suporte forte para Java, Spring e estruturas como Micrometer e Spring Boot, permitindo que você identifique e solucione problemas rapidamente. Os recursos incluem streaming de métricas ao vivo, taxa de solicitação e rastreamento de tempo de resposta, rastreamento de eventos e taxas de dependência externa - tudo o que você precisa para monitorar a disponibilidade, o desempenho, a confiabilidade e o uso de seus aplicativos Java em execução no Azure ou no local.

Você pode monitorar de ponta a ponta agregando logs e métricas no Log Analytics, uma ferramenta no portal do Azure, que pode ser usada para editar e executar consultas em logs e dados de métricas no Azure Monitor. Você pode escrever uma consulta que retorna um conjunto de registros e, em seguida, usar o Log Analytics para classificá-los, filtrá-los e analisá-los. Ou você pode escrever uma consulta mais avançada para realizar análises estatísticas e visualizar os resultados em um gráfico, como pode ser necessário para identificar uma tendência específica. Quer você trabalhe com os resultados de suas consultas interativamente ou use-os com outros recursos do Azure Monitor, como alertas de consulta de log ou pastas de trabalho, o Log Analytics é uma boa ferramenta para usar para escrever e testar suas consultas.

Dito isso, percebemos que os clientes que estão trazendo seus aplicativos Java para o Azure podem querer continuar usando as mesmas ferramentas de APM que estão usando para monitorar seus aplicativos locais. Para dar suporte a esse uso, fizemos uma parceria com a New Relic, AppDynamics, Dynatrace e Elastic para integrar suas soluções de monitoramento com o Serviço de Aplicativo do Azure e os Aplicativos de Contêiner do Azure. Os agentes de monitoramento são executados lado a lado com seu código, e nós instalamos e mantemos os agentes atualizados para você. Ao implantar em Aplicativos de Contêiner do Azure, Serviço Kubernetes do Azure ou Máquinas Virtuais, você pode executar qualquer um desses agentes (incluindo New Relic, AppDynamics, Dynatrace, Elastic e Datadog) junto com seus aplicativos, mas precisa instalá-los e gerenciá-los por conta própria. Da mesma forma, você pode monitorar de ponta a ponta agregando logs e métricas no Elastic e no Splunk.

Diagrama com o título

Também percebemos que muitos clientes querem continuar usando o Grafana para consultar, visualizar, alertar e entender suas métricas. Por esse motivo, fizemos uma parceria com a Grafana Labs para fornecer o Azure Managed Grafana, um serviço totalmente gerenciado que permite que os clientes executem o Grafana nativamente no Azure. O serviço facilita a implantação de instâncias Grafana seguras e escaláveis e a conexão a fontes de dados de código aberto, nuvem e de terceiros para visualização e análise. O serviço é otimizado para fontes de dados nativas do Azure, como o Azure Monitor e o Azure Data Explorer, e inclui integrações de monitoramento de desempenho de aplicativos (APM) com serviços de computação do Azure, como o Serviço de Aplicativo do Azure, Aplicativos de Contêiner do Azure, Serviço Kubernetes do Azure, Splunk, Datadog e Máquinas Virtuais do Azure.

Acelere aplicativos Java usando cache

À medida que as cargas de trabalho para seus aplicativos Java crescem, você pode aumentar o desempenho usando o Cache Redis do Azure para implementar uma camada de cache na memória para resultados de consulta, estados de sessão e conteúdo estático. É uma ótima maneira de melhorar a taxa de transferência do aplicativo e reduzir a latência sem ter que rearquitetar seu banco de dados subjacente. As camadas do Cache do Azure para Redis Enterprise, desenvolvidas em parceria com o Redis e totalmente gerenciadas pela Microsoft, são a opção de implantação mais altamente disponível e escalável para executar o Redis no Azure - incluindo recursos como replicação geográfica ativa, gerenciamento de sessão externalizado e pesquisa e indexação de alta velocidade.

Diagrama com o título 'Acelerar e dimensionar aplicativos Java com cache Redis' e incluindo um resumo dos recursos descritos nesta seção.

Dimensionamento automático

Todos os serviços de "computação" do Azure para executar aplicativos Java oferecem suporte ao dimensionamento automático (dimensionamento automático), que pode ajudá-lo a maximizar a eficiência de custos e se adaptar às cargas de trabalho em constante mudança sem pagar por mais capacidade do que você precisa. Uma vez habilitado, você pode ter certeza de que o dimensionamento automático cuida da infraestrutura subjacente e das cargas de trabalho do aplicativo.

Diagrama com o título

Você pode aumentar ou diminuir automaticamente a escala com base na carga ou na programação. No modo baseado em carga (ou baseado em métrica), seus aplicativos são dimensionados horizontalmente para os recursos necessários para lidar com a carga, até os limites definidos. Da mesma forma, quando a carga diminui, os recursos são dimensionados horizontalmente, nunca ficando abaixo dos mínimos definidos.

No modo baseado em agenda, seus aplicativos são dimensionados e dimensionados com base em um cronograma e limites definidos. O modo baseado em agenda é útil para cargas de trabalho que seguem um padrão previsível e pode ser usado para estabelecer uma linha de base para um dimensionamento mais baseado em carga.

Automação da ideia à produção

À medida que você move seus aplicativos para a nuvem, você deseja automatizar tudo - conforme necessário para o desenvolvimento Java em escala empresarial. Você precisa considerar o dimensionamento automático para lidar com cargas de trabalho de aplicativos, conforme abordado anteriormente. Mas você também precisa dimensionar e automatizar seu ambiente de nuvem como um todo - idealmente da ideia à produção - incluindo como provisionar rapidamente novos ambientes para teste, controle de qualidade, produção, implantações azuis/verdes, expansão geográfica e assim por diante.

Diagrama que mostra caixas para categorias Provisionar, Criar e Implantar com logotipos associados para as ferramentas descritas nesta seção.

O Azure permite automatizar desde a ideia até a produção usando uma ampla gama de ferramentas e plataformas. Em um alto nível, esses pipelines de automação podem ser divididos em três categorias:

  • Pipelines de provisionamento - Você pode provisionar recursos do Azure usando Terraform, modelos do Azure Resource Manager (ARM), modelos Bicep ou a CLI do Azure, conforme necessário para criar scripts repetíveis para ambientes de rotação e rotação consistentes.

  • Construir pipelines - Com base em ferramentas como Maven ou Gradle, conforme discutido anteriormente nesta documentação.

  • Pipelines de implantação - Você pode usar Ações do GitHub, Pipelines do Azure, Pipelines Jenkins, Pipelines do GitLab ou a CLI do Azure para automatizar implantações de código, incluindo implantações azuis/verdes que mantêm sistemas críticos em produção à medida que você implanta atualizações de código.

Continuar a utilizar as práticas e sistemas existentes

Ao migrar ou criar e, em seguida, dimensionar seus aplicativos Java no Azure, você pode usar seus investimentos existentes em rede, monitoramento, automação, provedores de identidade, sistemas locais, ferramentas de desenvolvimento e compilação e bibliotecas de aplicativos. A tabela a seguir fornece alguns exemplos:

Categoria Produtos e serviços do ecossistema Java
Rede F5, Palo Alto, Cloudflare, Checkpoint, Infoblox
Monitorização Nova Relíquia, Dynatrace, AppDynamics, Elástico, Splunk
Automatização Ações do GitHub, Azure Pipelines, Jenkins, GitLab
Fornecedores de identidade Microsoft Entra ID, ForgeRock, Auth0, Ping, Okta
Sistema local Bancos de dados (como Oracle DB ou IBM DB2), mensagens (como IBM MQ ou TIBCO EMS), eventos (como Kafka), diretórios (como Microsoft Entra ID, OpenLDAP ou IBM ID)
Ferramentas de programação IntelliJ, Visual Studio Code, Eclipse, Spring Tool Suite, Maven, Gradle

Arquiteturas de referência

O Centro de Arquitetura do Azure fornece orientação para criar soluções no Azure usando padrões e práticas estabelecidos, incluindo como usar esses recursos. Essas arquiteturas de referência são baseadas no que aprendemos com os compromissos com os clientes, levando em consideração otimização de custos, excelência operacional, eficiência de desempenho, confiabilidade, escalabilidade, segurança, monitoramento, teste de fumaça e muito mais. Eles também abordam componentes de design de solução, como zonas de aterrissagem do Azure - ambientes para hospedar suas cargas de trabalho que são pré-provisionadas por meio de infraestrutura como código, conforme necessário para habilitar migrações de aplicativos Java e desenvolvimento greenfield em escala empresarial.

Por exemplo, aqui está um acelerador de zona de aterrissagem para Aplicativos de Contêiner do Azure, mostrando como implementar um design hub-and-spoke no qual os Aplicativos de Contêiner do Azure são implantados em um único raio que depende de serviços compartilhados hospedados no hub. Este projeto é construído com componentes para alcançar os princípios do Microsoft Azure Well-Architected Framework. Para explorar uma implementação dessa arquitetura, consulte o repositório do Azure Container Apps Landing Zone Accelerator no GitHub. Você pode aplicar a mesma abordagem a qualquer aplicativo Java implantado em qualquer destino de "computação" do Azure - como o Serviço de Aplicativo do Azure ou o Serviço Kubernetes do Azure. Além disso, se você estiver procurando migrar aplicativos Java existentes para o Azure, temos um conjunto abrangente de guias de migração e estratégias recomendadas.

Diagrama com o título

Próximo passo

Escolha os serviços do Azure certos para seus aplicativos Java