DEV Community

Cover image for Cloud Events: Padronizando o Futuro de Arquiteturas Orientadas a Eventos
Rafael Andrade
Rafael Andrade

Posted on

Cloud Events: Padronizando o Futuro de Arquiteturas Orientadas a Eventos

Introdução

Tenho me dedicado a contribuir para o Brighter, um framework .NET/C# para construção de aplicações de mensagens. Ele foi projetado para lidar desde comunicação simples em memória até interoperabilidade complexa em sistemas distribuídos, como microsserviços. Esse percurso me expôs a uma ampla variedade de tecnologias e especificações. Agora, com a versão 10, o Brighter está dando um passo significativo: estamos introduzindo suporte nativo ao Cloud Events. Isso não é apenas uma atualização menor; é sobre possibilitar uma integração verdadeiramente contínua entre os mais diversos ambientes heterogêneos.

Contexto

Pense no que acontece quando você escolhe uma biblioteca ou framework de mensagens. É essencial que ela serialize mensagens para publicação e, posteriormente, as desserialize com confiabilidade para consumo. Crucialmente, todos os metadados importantes – coisas como ID da mensagem, informações do inquilino ou o nome do tipo – devem ser preservados durante todo o processo. O desafio? Quase todas as frameworks por aí lidam com isso de forma diferente, usando seus próprios cabeçalhos personalizados, payloads ou formatos únicos.

Embora isso seja perfeitamente gerenciável em sistemas homogêneos, organizações em expansão (especialmente por meio de fusões ou mudanças em licenciamento) enfrentam rapidamente obstáculos de integração devido a essas incompatibilidades de formato. De repente, você está construindo camada após camada de adaptadores apenas para conseguir que os sistemas se comuniquem entre si. Torna-se uma verdadeira dor de cabeça.

Foi aí que a Cloud Native Computing Foundation (CNCF) entrou em cena, reconhecendo esse problema disseminado. Eles desenvolveram o Cloud Events – uma especificação neutra a fornecedores que oferece uma abordagem padronizada para formatação e comunicação de eventos. É uma mudança significativa porque simplifica a integração, definindo uma única estrutura consistente para dados e metadados de eventos.

Cloud Events

O Cloud Events não é apenas outra especificação; ele fornece um formato unificado para arquiteturas orientadas a eventos, desbloqueando interoperabilidade genuína entre diferentes linguagens, frameworks e plataformas. A adoção do Cloud Events pelo Brighter na V10 se alinha perfeitamente à nossa missão principal: abstrair a complexidade da mensageria enquanto adota práticas reconhecidas e testadas pela indústria.

Atributos de contexto

O Cloud Events define sábiamente atributos obrigatórios e opcionais para garantir consistência. Eles podem estar tanto nos cabeçalhos/metadados da mensagem quanto no corpo. Vale destacar que, quando armazenados nos cabeçalhos, os nomes dos atributos podem variar um pouco dependendo do protocolo de ligação utilizado (como Kafka, AWS SNS & SQS etc.).

Vamos rapidamente aos principais:

id (Obrigatório)

Um identificador único para o evento. Produtores precisam garantir a unicidade, geralmente combinando source + id. Se um evento for reenviado (por exemplo, devido a uma interrupção de rede), ele pode compartilhar o mesmo id.

Uma simples string (geralmente um UUID).

source (Obrigatório)

A origem do evento – pode ser um sistema, um processo específico ou até uma organização como https://github.com/cloudevents ou

urn:uuid:6e8bc430-9c3a-11d9-9669-0800200c9a66.

Expresso como um URI-reference.

specversion (Obrigatório)

Especifica qual versão da especificação do Cloud Events está em uso. Fundamental para compatibilidade, sempre 1.0.

type (Obrigatório)

Descreve a natureza do evento em si (por exemplo, com.github.pull_request.opened).

Excelente para roteamento, obter observabilidade no sistema e aplicar políticas.

datacontenttype (Opcional)

Especifica o tipo MIME da carga de dados.

Recomendo sempre incluir isso (ex.: application/json). Isso torna tudo mais claro.

dataschema (Opcional)

Faz referência ao esquema que rege a carga de dados.

Expresso como um URI.

subject (Opcional)

O assunto do evento dentro do contexto próprio do produtor (ex.: meuarquivo.jpg).

Ajuda bastante em filtros eficientes em configurações de publicação-assinatura.

time (Opcional)

O timestamp do momento em que o evento ocorreu.

Modos de mensagem

O Cloud Events oferece alguns modos distintos para enviar mensagens, cada um projetado para diferentes necessidades de integração.

Modo binário

No modo binário, os dados reais do evento estão no corpo da mensagem, enquanto todos aqueles atributos de evento discutidos anteriormente são armazenados como parte dos metadados ou cabeçalhos. Este modo frequentemente é escolhido por oferecer transporte eficiente e baixa sobrecarga.

specversion: 1.0
type: com.example.someevent
source: /mycontext
id: A234-1234-1234
time: 2018-04-05T17:31:00Z
comexampleextension1: value
comexampleothervalue: 5
content-type: application/vnd.apache.thrift.binary
Enter fullscreen mode Exit fullscreen mode

O corpo:

{
  "appinfoA" : "abc",
  "appinfoB" : 123,
  "appinfoC" : true
}
Enter fullscreen mode Exit fullscreen mode

Modo estruturado

Por outro lado, no modo estruturado, o evento completo – dados, atributos, tudo – é totalmente codificado usando um formato independente de evento e simplesmente colocado no corpo da mensagem. Esta abordagem oferece uma representação completa e autossuficiente do evento.

{
    "specversion" : "1.0",
    "type" : "com.example.someevent",
    "source" : "/mycontext",
    "subject": null,
    "id" : "C234-1234-1234",
    "time" : "2018-04-05T17:31:00Z",
    "comexampleextension1" : "value",
    "comexampleothervalue" : 5,
    "datacontenttype" : "application/json",
    "data" : {
        "appinfoA" : "abc",
        "appinfoB" : 123,
        "appinfoC" : true
    }
}
Enter fullscreen mode Exit fullscreen mode

Conclusão

A chegada do Cloud Events transforma fundamentalmente a paisagem das arquiteturas orientadas a eventos. Ao estabelecer um formato padronizado e neutro a fornecedores para dados e metadados de eventos, o Cloud Events resolve diretamente os desafios históricos de interoperabilidade entre sistemas diversos. Essa especificação crucial elimina complexidades e ineficiências associadas a formatos proprietários de mensageria e integrações personalizadas, promovendo uma linguagem universalmente compreendida para eventos. Em última instância, o Cloud Events capacita desenvolvedores e organizações a construir sistemas distribuídos mais resilientes, escaláveis e adaptáveis, pavimentando o caminho para comunicação contínua e integração sem fricção em ambientes nativos da nuvem heterogêneos. Sua adoção representa um passo crítico rumo um futuro mais unificado e eficiente no design orientado a eventos.

Referências

Especificação do Cloud Events

Repositório do Cloud Events no Github

Top comments (1)

Some comments may only be visible to logged-in visitors. Sign in to view all comments.