Este artigo apresenta um exemplo de uma solução de streaming que usa serviços de dados do Azure totalmente gerenciados.
Arquitetura
Baixe um [arquivo Visio][Visio versão do diagrama de arquitetura] desta arquitetura.
Fluxo de Trabalho
Os hubs de eventos do Apache Kafka apresentam eventos transmitidos por produtores de Kafka.
O Apache Spark consome eventos. O Serviço Kubernetes do Azure (AKS) fornece um ambiente gerenciado para os trabalhos do Apache Spark.
Um aplicativo que usa o Azure Cosmos DB para Apache Cassandra grava eventos em Cassandra. Esse banco de dados serve como uma plataforma de armazenamento para eventos. O AKS hospeda os microsserviços que escrevem para Cassandra.
O recurso de feed de alterações do Azure Cosmos DB processa eventos em tempo real.
Os aplicativos agendados executam processamento orientado a lote em eventos armazenados em Cassandra.
Os armazenamentos de dados de referência enriquecem as informações do evento. Aplicativos orientados a lote gravam as informações de evento enriquecidas no PostgreSQL. Os armazenamentos de dados de referência típicos incluem:
- [Armazenamento Azure Data Lake][Introdução ao Azure Data Lake Storage Gen2], que pode armazenar dados em formatos abertos, como [Parquet][Parquet].
- Armazenamentos de dados relacionais de código aberto como [PostgreSQL][O que é o Banco de Dados do Azure para PostgreSQL?] e [MySQL][O que é o Banco de Dados do Azure para MySQL?].
Um aplicativo orientado a lote processa dados Cassandra. Esse aplicativo armazena os dados processados no Banco de Dados do Azure para PostgreSQL. Esse armazenamento de dados relacional fornece dados para aplicativos downstream que exigem informações enriquecidas.
Aplicativos e ferramentas de relatórios analisam os dados do banco de dados PostgreSQL. Por exemplo, [Power BI][O que é o Power BI?] se conecta ao banco de dados usando o conector do Banco de Dados do Azure para PostgreSQL. Em seguida, esse serviço de relatório exibe visuais avançados dos dados.
O Cache Redis do Azure fornece um cache na memória. Nesta solução, o cache contém dados sobre eventos críticos. Um aplicativo armazena dados no cache e recupera dados do cache.
Sites e outros aplicativos usam os dados armazenados em cache para melhorar os tempos de resposta. Às vezes, os dados não estão disponíveis no cache. Nesses casos, esses aplicativos usam o padrão [cache-aside pattern][Cache-Aside pattern] ou uma estratégia semelhante para recuperar dados de Cassandra no Azure Cosmos DB.
Componentes
Os Hubs de Eventos são uma plataforma de streaming totalmente gerenciada que pode processar milhões de eventos por segundo. Os Hubs de Eventos fornecem um [endpoint][Use Azure Event Hubs from Apache Kafka applications] para o Apache Kafka, uma plataforma de processamento de fluxo de código aberto amplamente utilizada. Quando as organizações usam o recurso de ponto de extremidade, elas não precisam criar e manter clusters Kafka para processamento de fluxo. Em vez disso, eles podem se beneficiar da implementação Kafka totalmente gerenciada que os Hubs de Eventos oferecem.
[Azure Cosmos DB][Bem-vindo ao Azure Cosmos DB] é um banco de dados relacional e NoSQL totalmente gerenciado que oferece replicação multimestre. O Azure Cosmos DB dá suporte a APIs de código aberto para muitos bancos de dados, idiomas e plataformas. Exemplos incluem:
- Apache Cassandra.
- [Gremlin][Máquina e Linguagem de Travessia de Grafos de Gremlin].
- [MongoDB][MongoDB].
Por meio do [Azure Cosmos DB para Apache Cassandra][Introdução ao Azure Cosmos DB para Apache Cassandra], você pode acessar dados do Azure Cosmos DB usando ferramentas, idiomas e drivers do Apache Cassandra. O Apache Cassandra é um banco de dados NoSQL de código aberto que é adequado para cargas de trabalho pesadas de gravação intensiva.
O Serviço Kubernetes do Azure (AKS) é um serviço Kubernetes altamente disponível, seguro e totalmente gerenciado. [Kubernetes][Kubernetes] é uma plataforma de código aberto em rápida evolução para gerenciar cargas de trabalho em contêineres. O AKS hospeda mecanismos de processamento de big data de código aberto, como o Apache Spark. Usando o AKS, você pode executar trabalhos de processamento de fluxo em grande escala em um ambiente gerenciado.
O Banco de Dados do Azure para PostgreSQL é um serviço de banco de dados relacional totalmente gerenciado. Ele fornece [alta disponibilidade, dimensionamento elástico, aplicação de patches e outros recursos de gerenciamento][O que é o Banco de Dados do Azure para PostgreSQL?] para PostgreSQL. [PostgreSQL][PostgreSQL] é um sistema de gerenciamento de banco de dados relacional de código aberto amplamente adotado.
O Cache do Azure para Redis fornece um armazenamento de dados na memória baseado no software Redis. [Redis][Redis] é um popular armazenamento de dados na memória de código aberto. Armazenamentos de sessão, caches de conteúdo e outros componentes de armazenamento usam o Redis para melhorar o desempenho e a escalabilidade. O Cache Redis do Azure fornece recursos Redis de código aberto como uma oferta totalmente gerenciada.
Alternativas
Você pode substituir os produtos e serviços compatíveis com código aberto nesta solução por outros. Para obter detalhes sobre os serviços de código aberto disponíveis no Azure, consulte [Open source on Azure][Open source on Azure].
Detalhes do cenário
Os serviços de dados do Azure totalmente gerenciados que executam mecanismos de código aberto compõem esta solução de streaming:
- Os Hubs de Eventos do Azure oferecem uma implementação Kafka para ingestão de streaming.
- O Azure Cosmos DB dá suporte ao armazenamento de eventos em Cassandra.
- O AKS hospeda microsserviços [Kubernetes][Kubernetes] para processamento de fluxo.
- O Banco de Dados do Azure para PostgreSQL gerencia o armazenamento de dados relacionais em [PostgreSQL][PostgreSQL].
- O Cache Redis do Azure gerencia [Redis][Redis] armazenamentos de dados na memória.
As tecnologias de código aberto oferecem muitos benefícios. Por exemplo, as organizações podem usar tecnologias de código aberto para:
- Migre cargas de trabalho existentes.
- Aproveite a ampla comunidade de código aberto.
- Limite o bloqueio do fornecedor.
Ao tornar as tecnologias de código aberto acessíveis, as ferramentas e serviços do Azure ajudam as organizações a tirar partido destes benefícios e a desenvolver as soluções da sua escolha.
Esta solução utiliza [plataforma como serviço (PaaS)] totalmente gerida[O que é PaaS?] serviços. Como resultado, a Microsoft lida com patches, manutenção de contrato de nível de serviço (SLA) e outras tarefas de gerenciamento. Outro benefício é a integração nativa com a infraestrutura de segurança do Azure.
Potenciais casos de utilização
Esta solução aplica-se a vários cenários:
- Usando os serviços PaaS do Azure para criar soluções de streaming modernas que usam tecnologias de código aberto
- Migrando soluções de processamento de fluxo de código aberto para o Azure
Considerações
Essas considerações implementam os pilares do Azure Well-Architected Framework, que é um conjunto de princípios orientadores que podem ser usados para melhorar a qualidade de uma carga de trabalho. Para obter mais informações, consulte Microsoft Azure Well-Architected Framework.
Projete e implemente cada serviço com as melhores práticas em mente. Para obter diretrizes sobre cada serviço, consulte o site de documentação da Microsoft. Analise também as informações nas seguintes seções:
Desempenho
Implementar [pool de conexões para o Banco de Dados do Azure para PostgreSQL][Práticas recomendadas de desempenho para usar o Banco de Dados do Azure para PostgreSQL – Pool de Conexões]. Você pode usar uma biblioteca de pool de conexões dentro do aplicativo. Ou você pode usar um pool de conexões como [PgBouncer][PgBouncer] ou [Pgpool][Pgpool Wiki]. Estabelecer uma conexão com o PostgreSQL é uma operação cara. Com o pool de conexões, você pode evitar a degradação do desempenho do aplicativo. PgBouncer é [built-in][PgBouncer no Banco de Dados do Azure para Servidor Flexível PostgreSQL] no Banco de Dados do Azure para Servidor Flexível PostgreSQL.
Configure o Azure Cosmos DB para Apache Cassandra para obter o melhor desempenho usando uma [estratégia de particionamento][Particionamento no Azure Cosmos DB para Apache Cassandra]. Decida se deseja usar uma chave primária de campo único, uma chave primária composta ou uma chave de partição composta ao particionar tabelas.
Escalabilidade
Leve em consideração seus requisitos de streaming ao escolher um [nível de Hubs de Eventos][Preço dos Hubs de Eventos]:
- Para requisitos de taxa de transferência de médio alcance inferiores a 120 MBps, considere o [Nível Premium][Visão geral dos Hubs de Eventos Premium (Visualização)]. Essa camada é dimensionada de forma elástica para atender aos requisitos de streaming.
- Para cargas de trabalho de streaming high-end com uma entrada de gigabytes de dados, considere a [Camada dedicada][Visão geral dos Hubs de Eventos dedicados]. Este nível é uma oferta de inquilino único com capacidade garantida. Você pode dimensionar clusters dedicados para cima e para baixo.
Considere [taxa de transferência provisionada em escala automática][Criar contêineres e bancos de dados do Azure Cosmos com taxa de transferência de escala automática] para o Azure Cosmos DB se suas cargas de trabalho forem imprevisíveis e espinhosas. Você pode configurar o Azure Cosmos DB para usar a taxa de transferência provisionada manualmente ou a taxa de transferência provisionada em escala automática. Com o dimensionamento automático, o Azure dimensiona automática e instantaneamente as unidades de solicitação por segundo de acordo com o seu uso.
Segurança
A segurança oferece garantias contra ataques deliberados e o abuso de seus valiosos dados e sistemas. Para obter mais informações, consulte Visão geral do pilar de segurança.
Use o [Azure Private Link][O que é o Azure Private Link?] para tornar os serviços do Azure parte da sua rede virtual. Quando você usa o Private Link, o tráfego entre os serviços e sua rede flui pelo backbone do Azure sem atravessar a Internet pública. Os serviços do Azure nesta solução dão suporte ao Private Link para SKUs selecionados.
Verifique as políticas de segurança da sua organização. Com o Azure Cosmos DB para Apache Cassandra, as chaves fornecem acesso a recursos como espaços de chave e tabelas. A instância do Azure Cosmos DB armazena essas chaves. Suas políticas de segurança podem exigir que você [propague essas chaves para um serviço de gerenciamento de chaves][Proteja as chaves do Azure Cosmos usando o Azure Key Vault], como o Azure Key Vault. Certifique-se também de [girar chaves][Rotação e regeneração de chaves] de acordo com as políticas da sua organização.
Resiliência
Considere o uso de zonas de disponibilidade para proteger aplicativos críticos para os negócios contra falhas no datacenter. Os serviços desta solução suportam zonas de disponibilidade para SKUs selecionadas em regiões habilitadas para zona de disponibilidade. Para obter informações atualizadas, consulte a lista de serviços que suportam zonas de disponibilidade.
Otimização de custos
A otimização de custos consiste em procurar formas de reduzir despesas desnecessárias e melhorar a eficiência operacional. Para obter mais informações, consulte Visão geral do pilar de otimização de custos.
Para estimar o custo dessa solução, use a calculadora de preços do Azure. Tenha também estes pontos em mente:
[Hubs de Eventos][A definição de preço dos Hubs de Eventos] está disponível nos níveis Básico, Standard, Premium e Dedicado. O nível Premium ou Dedicado é melhor para cargas de trabalho de streaming em grande escala. Você pode dimensionar a taxa de transferência, portanto, considere começar pequeno e, em seguida, aumentar à medida que a demanda aumenta.
O Azure Cosmos DB oferece dois modelos:
- Um modelo de taxa de transferência provisionada ideal para cargas de trabalho exigentes. Este modelo está disponível em duas opções de gerenciamento de capacidade: padrão e dimensionamento automático.
- Um modelo sem servidor que é adequado para executar cargas de trabalho pequenas e espinhosas.
Um cluster AKS consiste em um conjunto de nós, ou máquinas virtuais (VMs), que são executados no Azure. O custo dos componentes de computação, armazenamento e rede compõem os custos principais de um cluster.
O Banco de Dados do Azure para PostgreSQL está disponível nas camadas Servidor Único e Servidor Flexível. Diferentes níveis atendem a diferentes cenários, como cargas de trabalho predicáveis, intermitíveis e de alto desempenho. Os custos dependem principalmente da escolha dos nós de computação e da capacidade de armazenamento. Para novas cargas de trabalho, considere escolher a camada de Servidor Flexível, pois ela tem uma gama mais ampla de [recursos suportados][Comparação entre Servidor Único e Servidor Flexível] em relação à camada de Servidor Único. Observe também que o Servidor Único está no caminho para a descontinuação.
O Cache Redis do Azure está disponível em várias camadas. Essas camadas acomodam caches que variam de 250 megabytes a vários terabytes. Além do tamanho, outros requisitos também afetam a escolha do nível:
- Clustering
- Persistência
- Georreplicação ativa
Implementar este cenário
Tenha estes pontos em mente ao implantar esta solução:
Ao implantar Hubs de Eventos para Kafka, consulte [Guia de início rápido: streaming de dados com Hubs de Eventos usando o protocolo Kafka][Guia de início rápido: streaming de dados com Hubs de Eventos usando o protocolo Kafka]. Este artigo fornece as seguintes informações:
- Como enviar e receber mensagens com Kafka em Hubs de Eventos
- Código de exemplo para um aplicativo de publicação
- Como alternar aplicativos Kafka existentes para Hubs de Eventos para Kafka fazendo alterações de configuração
Sobre o Apache Spark:
- Para obter informações sobre como criar um aplicativo Spark básico, consulte [Conectar seu aplicativo Apache Spark com Hubs de Eventos do Azure][Conectar seu aplicativo Apache Spark com Hubs de Eventos do Azure].
- Para hospedar o aplicativo Spark no AKS, consulte [Executando trabalhos do Apache Spark no AKS][Executando trabalhos do Apache Spark no AKS].
Considere o uso de um aplicativo Java para escrever eventos no Cassandra. Para obter mais informações, consulte [Guia de início rápido: criar um aplicativo Java para gerenciar dados do Azure Cosmos DB para Apache Cassandra (driver v4)][Guia de início rápido: criar um aplicativo Java para gerenciar dados do Azure Cosmos DB para Apache Cassandra (driver v4)].
Quando você usa o [Azure Cosmos DB change feed][Change feed in Azure Cosmos DB], consulte [Change feed in Azure Cosmos DB for Apache Cassandra][Change feed in Azure Cosmos DB for Apache Cassandra] para obter estas informações:
- Como usar predicados de consulta em [Cassandra Query Language (CQL)][Cassandra Query Language] para consultar a API de feed de alterações
- Código de exemplo para uma aplicação Java
Para obter informações sobre como processar os eventos que você armazenou em Cassandra, consulte [Tutorial: Consultar dados do Azure Cosmos DB para Apache Cassandra][Tutorial: Consultar dados do Azure Cosmos DB para Apache Cassandra]. Este artigo também contém código Java de exemplo para usar comandos CQL para recuperar dados de tabelas.
Para obter informações sobre como gravar dados no Banco de Dados do Azure para PostgreSQL com um aplicativo orientado a lotes, consulte [Guia de início rápido: usar Java e JDBC com o Banco de Dados do Azure para PostgreSQL][Guia de início rápido: usar Java e JDBC com o Banco de Dados do Azure para PostgreSQL]. Este artigo também contém código Java de exemplo para armazenar dados.
Para obter informações sobre armazenamento e recuperação de dados com o Cache do Azure para Redis, consulte [Guia de início rápido: usar o Cache do Azure para Redis em Java][Guia de início rápido: usar o Cache do Azure para Redis em Java]. Este artigo também contém código Java de exemplo para acessar um cache.
Contribuidores
Este artigo está sendo atualizado e mantido pela Microsoft. Foi originalmente escrito pelos seguintes contribuidores.
Autor principal:
- Ajit Ananthram - Brasil | Arquiteto de Soluções Cloud
Próximos passos
- Guia do desenvolvedor do Apache Kafka para Hubs de Eventos do Azure
- [Perguntas frequentes sobre o Azure Cosmos DB para Apache Cassandra][Perguntas frequentes sobre o Azure Cosmos DB para Apache Cassandra]
- Práticas recomendadas para criar um aplicativo com o Banco de Dados do Azure para PostgreSQL
- Perguntas frequentes sobre o Cache do Azure para Redis
Recursos relacionados
Para saber mais sobre soluções relacionadas, consulte as seguintes informações:
- Design de arquitetura do Google Analytics
- [Escolha um armazenamento de dados analíticos no Azure][Escolha um armazenamento de dados analíticos no Azure]
- [Escolha uma tecnologia de análise de dados no Azure][Escolha uma tecnologia de análise de dados no Azure]
- Azure Kubernetes no processamento de fluxo de eventos
- [Streaming de dados com AKS][Streaming de dados com AKS]
[Padrão Cache-Side]: .. /.. /patterns/cache-aside.yml A [Cassandra Query Language (CQL)]: https://cassandra.apache.org/doc/latest/cassandra/cql/index.html [Cassandra Query Language]: https://cassandra.apache.org/doc/latest/cassandra/cql/index.html [Change feed in Azure Cosmos DB]: /azure/cosmos-db/change-feed [Change feed in Azure Cosmos DB for Apache Cassandra]: /azure/cosmos-db/cassandra/cassandra-change-feed?tabs=java [Escolha um armazenamento de dados analíticos no Azure]: .. /.. /data-guide/technology-choices/analytical-data-stores.md [Escolha uma tecnologia de análise de dados no Azure]: .. /.. /data-guide/technology-choices/analysis-visualizations-reporting.md [Conecte seu aplicativo Apache Spark aos Hubs de Eventos do Azure]: /azure/event-hubs/event-hubs-kafka-spark-tutorial [Criar contêineres e bancos de dados do Azure Cosmos com taxa de transferência de escala automática]: /azure/cosmos-db/provision-throughput-autoscale [Streaming de dados com AKS]: .. /.. /solution-ideas/articles/data-streaming-scenario.yml [Preços dos Hubs de Eventos]: https://azure.microsoft.com/pricing/details/event-hubs [Perguntas frequentes sobre o Azure Cosmos DB para Apache Cassandra]: /azure/cosmos-db/cassandra/cassandra-faq O [Gremlin Graph Traversal Machine and Language]: https://tinkerpop.apache.org/gremlin.html [Gremlin Graph Traversal Machine and Language]: https://tinkerpop.apache.org/gremlin.html [Introdução ao Azure Cosmos DB para Apache Cassandra]: /azure/cosmos-db/cassandra/cassandra-introduction [Introdução ao Azure Data Lake Storage Gen2]: /azure/storage/blobs/data-lake-storage-introduction [Rotação e regeneração de chaves]: /azure/cosmos-db/secure-access-to-data?tabs=using-primary-key#key-rotation [Kubernetes]: https://kubernetes.io [MongoDB]: https://www.mongodb.com [Open source on Azure]: https://azure.microsoft.com/overview/open-source/ [Visão geral dos Hubs de Eventos Dedicados]: /azure/event-hubs/event-hubs-dedicated-overview [Visão geral dos Hubs de Eventos Premium (Visualização)]: /azure/event-hubs/event-hubs-premium-overview [Parquet]: https://parquet.apache.org [Particionamento no Azure Cosmos DB para Apache Cassandra]: /azure/cosmos-db/cassandra/cassandra-partitioning [Práticas recomendadas de desempenho para usar o Banco de Dados do Azure para PostgreSQL – Pool de Conexões]: https://azure.microsoft.com/blog/performance-best-practices-for-using-azure-database-for-postgresql-connection-pooling [PgBouncer]: https://www.pgbouncer.org [PgPool Wiki]: https://www.pgpool.net/mediawiki/index.php/Main_Page [PostgreSQL]: https://www.postgresql.org [Guia de início rápido: criar um aplicativo Java para gerenciar dados do Azure Cosmos DB para Apache Cassandra (driver v4)]: /azure/cosmos-db/cassandra/manage-data-java-v4-sdk [Guia de início rápido: streaming de dados com Hubs de Eventos usando o protocolo Kafka]: /azure/event-hubs/event-hubs-quickstart-kafka-enabled-event-hubs [Guia de início rápido: usar o Cache Redis do Azure em Java]: /azure/azure-cache-for-redis/cache-java-get-started [Guia de início rápido: usar Java e JDBC com o Banco de Dados do Azure para PostgreSQL]: /azure/postgresql/flexible-server/connect-java?tabs=passwordless [Redis]: https://redis.io [Executando trabalhos do Apache Spark no AKS]: /azure/aks/spark-job [Proteger chaves do Azure Cosmos usando o Azure Key Vault]: /azure/cosmos-db/access-secrets-from-keyvault [Tutorial: Consultar dados do Azure Cosmos DB para Apache Cassandra]: /azure/cosmos-db/cassandra/query-data [Usar Hubs de Eventos do Azure a partir de aplicativos Apache Kafka]: /azure/event-hubs/event-hubs-for-kafka-ecosystem-overview [Versão do diagrama de arquitetura do Visio]: https://arch-center.azureedge.net/US-1874059-open-source-data-engine-stream-processing-architecture.vsdx [Bem-vindo ao Azure Cosmos DB]: /azure/cosmos-db/introduction [O que é o Banco de Dados do Azure para MySQL?]: /azure/mysql/overview [O que é o Banco de Dados do Azure para PostgreSQL?]: /azure/postgresql/overview [O que é o Azure Private Link?]: /azure/private-link/private-link-overview [O que é PaaS?]: https://azure.microsoft.com/overview/what-is-paas/ [O que é o Power BI?]: /power-bi/fundamentals/power-bi-overview [Comparação entre Servidor Único e Servidor Flexível]: /azure/postgresql/flexible-server/concepts-compare-single-server-flexible-server#comparison-table [PgBouncer no Banco de Dados do Azure para Servidor Flexível PostgreSQL]: /azure/postgresql/flexible-server/concepts-pgbouncer