Share via


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 softwares populares de código aberto - como PostgreSQL, Redis, JMS e Kafka - para que você não fique preso a soluções proprietárias.

Diagrama com o título 'Serviços da Plataforma' e os logotipos dos serviços descritos neste artigo.

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 escalonáveis.

Estender 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 o Banco de Dados do Azure para PostgreSQL, o Banco de Dados do Azure para MySQL, o MongoDB Atlas, o Azure Cosmos DB, o Banco de Dados SQL do Azure e a 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 Nuvem Confluente.

A camada Premium do Barramento de Serviço do Azure oferece suporte a JMS, o modelo de programação do Java Messaging Service. Independentemente de seus aplicativos estarem sendo executados em VMs, no Kubernetes ou em serviços de 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, inicializadores Spring 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 desejam 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 com suporte em 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 da arquitetura de referência do Azure Spring Apps.

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

Implementar 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 há riscos de exfiltração de dados, como cópia não autorizada ou transferência de dados.

Com o Azure, você pode proteger as comunicações de ponta a ponta ou encerrar a segurança em nível de transporte em qualquer ponto de comunicação. Também é possível automatizar o provisionamento e a configuração de todos os recursos do Azure necessários para proteger as comunicações. Para ver como ele funciona para os Aplicativos Spring do Azure, consulte Comunicações seguras de ponta a ponta para aplicativos Spring Boot – no ambiente Zero Trust. O processo é semelhante para os outros serviços de computação do Azure que você pode usar para executar seus aplicativos Java.

Com base no princípio de "nunca confiar, sempre verificar e sem 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 Cofre de Chaves do Azure (discutido a seguir). Com o Azure Key Vault, você controla o armazenamento e a distribuição de certificados para reduzir os vazamentos acidentais. Aplicativos e serviços podem acessar certificados com segurança usando identidades gerenciadas, controle de acesso baseado em função e o princípio de privilégio mínimo. Esse carregamento seguro é alimentado usando o Provedor JCA (Java Cryptography Architecture) do Cofre de Chaves do Azure.

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. A incorporação dessas informações em um aplicativo em si apresenta um enorme risco de segurança por muitas razões, 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 Cofre de Chaves do Azure' e incluindo um resumo dos recursos descritos nesta seção.

O Cofre de Chaves do Azure 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 de privilégio mínimo para limitar o acesso. Você mantém o controle sobre os segredos de seus aplicativos - basta conceder permissão para que seus aplicativos os usem conforme necessário. Na inicialização do aplicativo, antes de conceder acesso a segredos, o aplicativo se autentica com a ID do Microsoft Entra e o Cofre de Chaves do Azure autoriza o uso do RBAC do Azure. O Cofre de Chaves do Azure 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 por HSM (módulo de segurança de hardware).

Autenticação e autorização do usuário 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 Active 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.

Monitoramento completo

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 APM (monitoramento de desempenho do aplicativo) - usando o Application Insights, um recurso do Azure Monitor. Ele fornece forte suporte para Java, Spring e frameworks 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 controle 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 localmente.

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, conforme necessário para identificar uma tendência específica. Se você trabalha com os resultados de suas consultas interativamente ou os usa com outros recursos do Azure Monitor, como alertas de consulta de log ou pastas de trabalho, o Log Analytics é uma boa ferramenta a ser usada 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 Spring 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 de 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 'Monitorar de ponta a ponta usando qualquer ferramenta e plataforma', uma captura de tela de exemplo e logotipos para as ferramentas descritas neste artigo.

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 conectá-las 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 aplicativo (APM) com serviços de computação do Azure, como o Serviço de Aplicativo do Azure, os Aplicativos de Primavera do Azure, o Serviço de Kubernetes do Azure, o Splunk, o Datadog e as Máquinas Virtuais do Azure.

Acelere aplicativos Java usando cache

À medida que as cargas de trabalho de seus aplicativos Java crescem, você pode aumentar o desempenho usando o Cache do Azure para Redis 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 precisar rearquitetar seu banco de dados subjacente. O Cache do Azure para camadas Redis Enterprise, desenvolvido em parceria com o Redis e totalmente gerenciado pela Microsoft, é a opção de implantação mais altamente disponível e escalonável para executar o Redis no Azure - incluindo recursos como replicação geográfica ativa, gerenciamento de sessão externalizada 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 adaptar-se à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 'Aumentar a utilização de aplicativos com o Autoscale' e incluindo um resumo dos recursos descritos nesta seção.

Você pode escalar automaticamente 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 expandidos com base em um cronograma e limites definidos. O modo baseado em agendamento é útil para cargas de trabalho que seguem um padrão previsível e pode ser usado para estabelecer uma linha de base para mais dimensionamento baseado em carga.

Automação da ideia à produção

Ao mover 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 da ideia à produção usando uma ampla variedade 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 o Terraform, modelos do Azure Resource Manager (ARM), modelos do Bicep ou a CLI do Azure, conforme necessário para criar scripts repetíveis para ambientes de rotação e rotação consistentes.

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

  • Pipelines de implantação - Você pode usar GitHub Actions, Azure Pipelines, Jenkins Pipelines, GitLab Pipelines 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 usar práticas e sistemas existentes

À medida que você migra ou cria e, em seguida, dimensiona seus aplicativos Java no Azure, você pode usar seus investimentos existentes em rede, monitoramento, automação, provedores de identidade, sistemas locais, ferramenta 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, Ponto de Verificação, Infoblox
Monitoramento Nova Relíquia, Dynatrace, AppDynamics, Elastic, Splunk
Automação Ações do GitHub, Azure Pipelines, Jenkins, GitLab
Provedores 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 desenvolvimento 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 colocar esses recursos em uso. Essas arquiteturas de referência são baseadas no que aprendemos com os compromissos com os clientes, levando em consideração a otimização de custos, a excelência operacional, a eficiência de desempenho, a confiabilidade, a escalabilidade, a segurança, o monitoramento, os testes 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 corporativa.

Por exemplo, aqui está um acelerador de zona de aterrissagem para Aplicativos Spring do Azure, mostrando como implementar um design de hub e spoke no qual os Aplicativos Spring do Azure são implantados em um único spoke que depende de serviços compartilhados hospedados no hub. Este projeto é criado com componentes para alcançar os princípios no Microsoft Azure Well-Architected Framework. Para explorar uma implementação dessa arquitetura, consulte o repositório do Azure Spring 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, os Aplicativos de Contêiner do Azure ou o Serviço de 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 'Dimensionar com segurança, monitoramento e automação de ponta a ponta' e logotipos para as ferramentas descritas neste artigo.

Próxima etapa

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