Desenvolvimento de Aplicativos Modernos - Mensagens

As soluções de mensagens conectam os componentes do seu aplicativo, permitindo que eles troquem dados de forma confiável, escalem de forma transparente e obtenham um alto nível de disponibilidade.Eles permitem separar o processamento dos produtores de dados, armazenar mensagens não processadas em buffer de forma eficiente e fornecer durabilidade de mensagens, escalabilidade de processamento e resiliência de aplicativos.

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.

Veja a seguir a descrição da ilustração maf-messaging-streaming.png
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.

Veja a seguir a descrição da ilustração maf-messaging-publishers-subscribers.png
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.

Veja a seguir a descrição da ilustração maf-messaging-queuing.png
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

Use os princípios de design a seguir para criar seus aplicativos ou plataforma de mensagens.
  • 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

O diagrama a seguir mostra como você pode usar o OCI Streaming para implementar o streaming de eventos
Veja a seguir a descrição da ilustração maf-messaging.png
Descrição da ilustração maf-messaging.png

maf-messaging-oracle.zip

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.

Veja a seguir a descrição da ilustração maf-messaging-alternate.png
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

Universal Health Organization (UHO) é uma aplicação de amostra que segue os princípios da Modern App Development Framework. Especificamente, ele implementa elementos dos padrões de arquitetura orientados a Web ou Dispositivos Móveis, Mensagens e Eventos e está disponível em GitHub.
  1. Vá para GitHub.
  2. Clone ou faça download do repositório para seu computador local.
  3. Siga as instruções no documento README.

Alterar Log

Esse log lista alterações significativas:

Confirmações

Authors: Harshad Kasture, Randall Barnes, Matthias Brantner

Contributors: Hassan Ajan, James Emerson, Parvez Syed Mohamed, Sajan Parihar, Wei Hu, Sreya Dutta, Joshua Stanley