Desenvolvimento de Aplicativos Modernos - Mensagens
Aplicativos orientados a mensagens abrangem uma variedade de arquiteturas - a transferência de dados entre componentes pode fazer parte de um pipeline de processamento distribuído e convergido bem definido, ou os componentes podem publicar mensagens para vários sistemas downstream independentes que evoluem de forma independente. Há três modelos de mensagens modernos comuns, cada um com requisitos de aplicativos compartilhados e distintos:
Streaming de Eventos
Os aplicativos de Streaming de Eventos ingerem fluxos de dados de alto volume e alta velocidade que devem ser processados em tempo real. Os dados brutos devem ser processados para extrair insights que podem ser usados por outros componentes do aplicativo, para monitoramento ou podem ser armazenados para análise posterior.

Descrição da ilustração maf-messaging-streaming.png
maf-messaging-streaming-oracle.zip
Este exemplo de aplicativo de streaming de eventos usa o Oracle Cloud Infrastructure Streaming ou o Oracle Transactional Event Queues (TEQ) como a solução de mensagens subjacente, o Oracle Cloud Infrastructure Functions para processamento em tempo real e o Oracle Autonomous Database como armazenamento de backup.
Publicar-Inscrever
Publicar-assinar ou pub/sub é um padrão de comunicação no qual os produtores de dados publicam dados em tópicos específicos que podem ser consumidos por qualquer número de consumidores downstream assinando esses tópicos. O acoplamento entre produtores e consumidores é bastante fraco, de modo a que os consumidores possam evoluir de forma independente sem afectar os produtores a montante.

Descrição da ilustração maf-messaging-publishers-subscribers.png
maf-messaging-publishers-subscribers-oracle.zip
Este exemplo mostra como usar o Oracle Cloud Infrastructure Streaming ou o Oracle TEQ para implementar um padrão de mensagens pub/sub.
Fila de Mensagens
O enfileiramento de mensagens permite o processamento distribuído com monitoramento de estado em que componentes upstream e downstream estão estreitamente vinculados e implementam juntos um workflow de aplicativo. A solução de mensagens deve suportar semântica, como entrega pelo menos uma vez, para garantir que as mensagens não sejam perdidas antes de serem consumidas.

Descrição da ilustração maf-messaging-queuing.png
maf-messaging-queuing-oracle.zip
Este exemplo ilustra como usar o Oracle Cloud Infrastructure Queue ou o Oracle TEQ para implementar o enfileiramento de mensagens.
Princípios de Design
- Crie aplicativos como um conjunto de serviços que se comuniquem usando APIs REST
Use APIs padrão do setor, como Kafka e JMS, para oferecer interoperabilidade de aplicativos e criar perfeitamente aplicativos de mensagens híbridos e multicloud. O Oracle Cloud Infrastructure (OCI) Streaming fornece uma API de compatibilidade Kafka, e o Oracle Transaction Event Queues (TEQ) suporta APIs Kafka e JMS. Kafka e JMS são amplamente suportados por produtos de terceiros. Por exemplo, você pode usar o Conector Kafka JMS Confluent para transferir mensagens entre o Oracle TEQ e o Kafka. Você também pode usar o Kafka Connect implantado no cluster do Oracle Container Engine for Kubernetes para estabelecer conexão com produtos de terceiros. O Oracle Cloud Infrastructure Queue pode ser chamado usando a definição da API RESTful (com uma especificação OpenAPI) ou usando o protocolo STOMP padrão do setor.
- Use serviços gerenciados para eliminar a complexidade no desenvolvimento e nas operações de aplicativos
Use serviços totalmente gerenciados com manutenção de infraestrutura integrada e aplicação de patches de segurança, como OCI Streaming, OCI Queue e os recursos do Oracle TEQ e Advanced Queuing (AQ) do Oracle Autonomous Database (ADB). Esses serviços são altamente disponíveis com replicação automática entre domínios de disponibilidade e suportam automação de dimensionamento em resposta a alterações de cargas.
- Manter a camada do aplicativo sem monitoramento de estado
O estado relacionado a mensagens, como a posição em uma fila de mensagens, nunca deve ser armazenado no aplicativo ou no sistema de arquivos local, pois isso pode resultar em perda de dados se uma instância do aplicativo falhar. Os aplicativos podem armazenar no cache o conteúdo das mensagens para processamento, mas a solução de mensagens deve continuar sendo a única fonte confiável para todos os dados de mensagens. Metadados relacionados, como a posição em uma fila de mensagens, devem ser armazenados em um banco de dados ou no armazenamento de objetos para evitar mensagens perdidas e garantir a operação de idempotência. Isso ajuda com a recuperação de falhas e torna mais fácil ampliar ou reduzir um serviço sem perda de correção.
- Monitoramento e rastreamento completos do instrumento
Mantenha um entendimento autorizado da integridade, do desempenho e do estado operacional de seu aplicativo. Use o portfólio de serviços do Oracle Cloud Observability and Management Platform para obter visibilidade e insights acionáveis em todas as camadas da pilha de aplicativos, desde produtores de dados e consumidores até os próprios pipelines de mensagens. Monitore o tamanho da fila e a duração do processamento para detectar erros e gargalos e detectar problemas com serviços que assinam tópicos.
- Elimine pontos únicos de falha por meio de replicação automatizada de dados e recuperação de falhas
Faça backup de dados de mensagens para armazenamento persistente para atender às necessidades regulatórias e de conformidade. Use o backup entre regiões para recuperação de desastre. Incorpore a idempotência em seus aplicativos de mensagens, por exemplo, usando tempos limite de visibilidade de mensagens na Fila do OCI. Grave erros irrecuperáveis em um fluxo separado, uma fila de cartas inativas ou armazenamento persistente sem bloquear o pipeline de execução principal.
- Implemente uma abordagem automatizada de defesa em profundidade para proteger seu aplicativo e seus dados
Implemente políticas do Oracle Cloud Infrastructure Identity and Access Management (IAM) para permitir que apenas usuários autorizados criem, enviem ou recebam dados de fluxos e filas do OCI. Aplique o princípio de acessibilidade mínima protegendo o acesso a pontos finais de mensagens usando pontos finais privados e gateway de serviço, que limita o acesso da internet. Use o recurso pronto para uso do OCI Streaming, da OCI Queue e do TEQ para criptografar dados em repouso e em trânsito para obter a confidencialidade dos dados. No entanto, se você precisar de maior propriedade de rotação de chaves, use o serviço Oracle Cloud Infrastructure Vault para gerenciar com segurança suas chaves mestras.
Arquitetura

Descrição da ilustração maf-messaging.png
Use o OCI Streaming para implementar o streaming de eventos e os padrões de mensagens pub/sub e o Oracle Cloud Infrastructure Queue para implementar o enfileiramento de mensagens. Use o Oracle Autonomous Database para persistir dados de evento processados. As Funções do OCI podem ser usadas para processar dados de evento antes de serem consumidos por componentes de aplicativo downstream ou persistidos no banco de dados.
Implemente o isolamento da rede usando sub-redes dedicadas para seu aplicativo e para o banco de dados e para os serviços de mensagens. Proteja o acesso aos seus fluxos usando pontos finais privados. Usar políticas do Oracle Cloud Infrastructure Identity and Access Management (IAM) para limitar o acesso às filas
Use o Oracle Cloud Infrastructure Object Storage para retenção de mensagens de longo prazo. Use um serviço como o Service Connector sem servidor para mover dados do OCI Streaming para o Object Storage de forma integrada e ativar o backup entre regiões do Object Storage para obter backup entre várias partes. Implemente uma estratégia de recuperação de desastres entre regiões usando o Kafka MirrorMaker 2.0 implantado em um ambiente Oracle Container Engine for Kubernetes (OKE) tolerante a falhas para replicar dados de forma assíncrona entre fluxos. Essa configuração ativa o RTO (Recovery Time Objective) e o RPO (Recovery Point Objective) de minutos. Use pareamento remoto de VCN para garantir latência mínima durante a transferência de dados.
Use filas de cartas inativas para isolar mensagens problemáticas. As filas de cartas mortas são criadas automaticamente quando você cria uma fila. As filas de cartas mortas ajudam a evitar que mensagens com falha bloqueiem o pipeline de execução principal. As mensagens na fila de cartas inativas podem ser analisadas para determinar por que elas falharam.
Incorpore idempotency em aplicativos armazenando os offsets das mensagens processadas no armazenamento externo, como o Object Storage. Detecte e descarte duplicatas consultando a loja externa. Categorize os erros que sejam facilmente recuperáveis e permita uma repetição de mensagens.
Essa arquitetura usa os seguintes serviços e tecnologias:
- Streaming
O Oracle Cloud Infrastructure Streaming oferece uma solução de armazenamento totalmente gerenciada, escalável e durável para a ingestão de fluxos de dados contínuos em alto volume, os quais você pode consumir e processar em tempo real. Você pode usar o Streaming para ingerir dados de alto volume, como logs de aplicativo, telemetria operacional, sequência de cliques na web ou para outros casos de uso nos quais os dados sejam produzidos e processados de modo contínuo e sequencial em um modelo de mensagem de publicação-assinatura.
- Fila
O Oracle Cloud Infrastructure Queue fornece um sistema escalável para processar mensagens enquanto lida com tarefas de gerenciamento complexas, como processamento garantido pelo menos uma vez, rastreamento e isolamento do cliente. Esse serviço centralizado também gerencia a ordenação e o estado de processamento de mensagens, o que permite que processos clientes sem monitoramento de estado descarreguem o rastreamento do cursor.
- Funções
O Oracle Cloud Infrastructure Functions é uma plataforma Functions-as-a-Service (FaaS) totalmente gerenciada, multitenant, altamente escalável e sob demanda. É alimentado pelo mecanismo de código aberto do Fn Project. As funções permitem que você implante seu código e o chame diretamente ou acione em resposta a eventos. O Oracle Functions usa contêineres Docker hospedados no Oracle Cloud Infrastructure Registry.
- Conectores de serviço
O Oracle Cloud Infrastructure Service Connector Hub é uma plataforma de barramento de mensagens na nuvem que orquestra a movimentação de dados entre serviços no OCI. Você pode usar conectores de serviço para mover dados de um serviço de origem para um serviço de destino. Os conectores de serviço também permitem que você especifique opcionalmente uma tarefa (como uma função) a ser executada nos dados antes de serem entregues ao serviço de destino.
Você pode usar o Oracle Cloud Infrastructure Service Connector Hub para criar rapidamente uma estrutura de agregação de logs para sistemas de informações de segurança e gerenciamento de eventos (SIEM).
Arquitetura alternativa centrada no banco de dados
Essa arquitetura usa Filas de Eventos Transacionais (TEQ) para implementar padrões de mensagens em aplicativos modernos. TEQ é um recurso incorporado do Oracle Autonomous Database.

Descrição da ilustração maf-messaging-alternate.png
maf-messaging-alternate-oracle.zip
Essa arquitetura oferece simplicidade, eliminando a necessidade de utilizar serviços externos de streaming ou filas e fornece recursos de mensagens transacionais que simplificam padrões comuns de microsserviços.
O TEQ combina dados e processamento de mensagens em uma infraestrutura escalável que simplifica o gerenciamento do ciclo de vida, a segurança e a recuperação de desastres, ao mesmo tempo em que oferece alto desempenho. O TEQ suporta padrões comuns de mensagens, incluindo streaming, enfileiramento e publicação/sub. Você pode implementar transações em operações de mensagens e banco de dados usando TEQ e implementar facilmente padrões de mensagens, como caixa de saída transacional e mensagens exatamente uma vez com pouco ou nenhum código adicional. O Oracle TEQ fornece mensagens exatamente uma vez para aplicativos em execução no banco de dados. Isso significa que você não precisa manter IDs de mensagem para verificar as mensagens duplicadas ou criar consumidores idempotentes no nível do aplicativo. O TEQ suporta pequenas mensagens típicas do processamento de eventos, bem como cargas úteis maiores associadas a workflows de negócios, e também pode funcionar como uma malha de eventos segura.
A eliminação de streaming externo ou serviços de fila simplifica o gerenciamento do estado. Eventos e mensagens são armazenados no mesmo banco de dados usado pelo aplicativo. Isso permite que você alcance e mantenha facilmente a consistência entre seus eventos, mensagens e alterações de aplicativos. Se houver uma falha que exija uma recuperação pontual ou uma recuperação de desastres, tudo (eventos, mensagens e dados do aplicativo) será recuperado automaticamente para um estado consistente.
O TEQ se beneficia da alta disponibilidade do Autonomous Database. Os dados de mensagens no TEQ são automaticamente submetidos a backup e protegidos pela replicação entre regiões do ADB usando o Autonomous Data Guard. Você pode implantar o Oracle TEQ de forma altamente disponível usando o Oracle Real Application Clusters e o Oracle Active Data Guard, ambos recursos incorporados do Oracle Autonomous Database. O Oracle Real Application Clusters fornece disponibilidade em uma região, enquanto o Oracle Active Data Guard fornece proteção de recuperação de desastres entre regiões.
Use essa arquitetura se seu aplicativo fizer o seguinte:
- Necessita implementar filas de mensagens e requer semântica como caixa de saída transacional
- Não precisa de escalonamento independente do banco de dados e da substrato de mensagens
Essa arquitetura usa os seguintes serviços e tecnologias:
- Filas de Eventos Transacionais (TEQ) e Enfileiramento Avançado (AQ)
As Filas de Eventos Transacionais (TEQ) e o Advanced Queuing (AQ) são sistemas de enfileiramento de mensagens robustos e ricos em recursos integrados ao Oracle Database. As Filas de Eventos Transacionais (TEQ) são uma implementação de alto desempenho particionada na memória com vários fluxos de eventos por fila. O AQ (Advanced Queuing) é adequado para casos de uso de workflow mais simples. Esses recursos aproveitam o Oracle Database para persistir mensagens e fornecer alto throughput e escalabilidade.
- Funções
O Oracle Cloud Infrastructure Functions é uma plataforma Functions-as-a-Service (FaaS) totalmente gerenciada, multitenant, altamente escalável e sob demanda. É alimentado pelo mecanismo de código aberto do Fn Project. As funções permitem que você implante seu código e o chame diretamente ou acione em resposta a eventos. O Oracle Functions usa contêineres Docker hospedados no Oracle Cloud Infrastructure Registry.
Arquiteturas Não Recomendadas
-
Aplicativos Monolíticos de Mensagens e Service Bus
Soluções de mensagens como RabbitMQ podem dar suporte à integração com outros componentes por meio de padrões abertos e APIs. No entanto, essas soluções exigem um esforço administrativo significativo para as PME e podem não oferecer redundância distribuída e alta disponibilidade sem topologias complexas autogerenciadas.
-
Clusters Kafka em uma Nuvem Autogerenciada ou em um Ambiente Local
Essa solução, embora ofereça escalabilidade e alta disponibilidade, exige conhecimento especializado do desenvolvedor e extensa sobrecarga de administração operacional do SME. Dê uma boa consideração antes de selecionar essa opção devido ao lead time para produção e ao risco de TCO (Total Cost of Ownership, Custo total de propriedade).
Considerações
Ao implementar o padrão de design de Mensagens, considere estas opções de implementação.
Escolha a plataforma de mensagens certa, com base nos requisitos do seu aplicativo
As plataformas e serviços da base podem parecer semelhantes e compartilhar recursos comuns. No entanto, cada plataforma tem recursos e pontos fortes exclusivos que podem estar mais alinhados com os requisitos do seu aplicativo. Por exemplo:
- Use o OCI Streaming ou Filas de Eventos Transacionais se seus aplicativos exigirem uma plataforma de mensagens de alto rendimento em tempo real que ofereça repetição de mensagens e recursos pub-sub.
- Use Filas de Eventos Transacionais se precisar de um buffer ponto a ponto escalável e confiável para mover dados de forma assíncrona.
- Use o SH (Service Connector Hub) para permitir a integração com recursos de infraestrutura.
- Use Filas de Eventos Transacionais (TEQ) no banco de dados ao projetar novos microsserviços com mensagens integradas ao Oracle Autonomous Database.
Estudos de Caso Público
Arquitetura baseada no Oracle Streaming
Tango Eye converte o vídeo de vigilância em informações úteis para a indústria de varejo.
- O Oracle Cloud Infrastructure (OCI) Streaming é um sistema de mensagens de publicação e assinatura de baixa manutenção para vários microsserviços.
- O Oracle Cloud Infrastructure Functions executa jobs sem servidor sem supervisão de engenharia.
- As políticas de ciclo de vida do Oracle Cloud Infrastructure Object Storage arquivam e expurgam dados automaticamente, reduzindo custos sem diminuir o valor da análise baseada em IA da Tango Eye.
Arquitetura baseada no Oracle TEQ
FedEx usa o Oracle E-Business Suite e o gerente de eventos de negócios criado com o Oracle TEQ, para contas a receber dos seus 15,5 milhões de pacotes entregues todos os dias.
- FedEx transferiu o E-Business Suite para o Oracle Cloud Infrastructure Object Storage usando o Exadata Cloud Service. Os fluxos de trabalho e o sistema de eventos de negócios do E-Business Suite são criados inteiramente nas mensagens do Oracle Advanced Queuing (AQ).
- O Oracle AQ é simples de usar e adequado para orquestração de workflow. Para eventos de alto throughput, o Oracle TEQ é a substituição drop-in de alto desempenho por vários fluxos de eventos por fila, interoperável com o apache Kafka.
Implantar
- Vá para GitHub.
- Clone ou faça download do repositório para seu computador local.
- Siga as instruções no documento
README
.
Alterar Log
Esse log lista alterações significativas:
21 de setembro de 2023 |
|
27 de abril de 2023 |
|
12 de julho de 2022 |
|