Conceitos de espaço de nomes do Azure Event Grid

Este artigo descreve os principais conceitos e funcionalidades associados aos tópicos de namespace.

Eventos

Um evento é a menor quantidade de informação que descreve completamente algo que aconteceu em um sistema. Um evento é frequentemente chamado de evento discreto porque representa um facto distinto e autónomo sobre um sistema que fornece uma visão acionável. Cada evento tem informações comuns, como source o evento, time o evento ocorrido e um identificador único. Cada evento também tem um type, que normalmente é um identificador único que descreve o tipo de anúncio para o qual o evento é utilizado.

Por exemplo, um evento sobre um novo ficheiro que está a ser criado no Armazenamento do Azure inclui detalhes sobre o ficheiro, tal como o valor lastTimeModified. Um evento de Hubs de Eventos tem a URL do arquivo capturado. Um evento sobre uma nova encomenda no seu microsserviço Orders pode ter um atributo orderId e um atributo de URL para a representação do estado da encomenda. Mais alguns exemplos de tipos de eventos incluem: com.yourcompany.Orders.OrderCreated, org.yourorg.GeneralLedger.AccountChanged, io.solutionname.Auth.MaximumNumberOfUserLoginAttemptsReached.

Aqui está um exemplo de evento:

{
    "specversion" : "1.0",
    "type" : "com.yourcompany.order.created",
    "source" : "/orders/account/123",
    "subject" : "O-28964",
    "id" : "A234-1234-1234",
    "time" : "2018-04-05T17:31:00Z",
    "comexampleextension1" : "value",
    "comexampleothervalue" : 5,
    "datacontenttype" : "application/json",
    "data" : {
       "orderId" : "O-28964",
       "URL" : "https://com.yourcompany/orders/O-28964"
    }
}

Outro tipo de evento

A comunidade de utilizadores também se refere a mensagens que transportam um ponto de dados, como a leitura de um único dispositivo ou um clique numa página de aplicação web, como "eventos". Normalmente analisas este tipo de evento ao longo de uma janela temporal para obter insights e tomar uma ação. Na documentação do Event Grid, este tipo de evento é chamado de ponto de dados, dados em fluxo, ou simplesmente telemetria. A funcionalidade broker Message Queuing Telemetry Transport (MQTT) da Event Grid utiliza este tipo de evento, entre outros tipos de mensagens.

Suporte para CloudEvents

Os tópicos de espaço de nomes do Event Grid aceitam eventos que cumprem a especificação da norma aberta CloudEvents 1.0 da Cloud Native Computing Foundation (CNCF), utilizando a associação do protocolo HTTP com formato JSON. Um CloudEvent é um tipo de mensagem que contém o que está sendo comunicado, conhecido como dados de evento e metadados sobre ele. Os dados de evento em arquiteturas controladas por eventos normalmente carregam as informações anunciando uma alteração de estado do sistema. Os metadados CloudEvents consistem num conjunto de atributos que fornecem informação contextual sobre a mensagem, como a sua origem (o sistema de origem) e o seu tipo.

Para obter mais informações, consulte Suporte para o esquema CloudEvents.

Editores

Um publicador é a aplicação que envia eventos para o Event Grid. Pode ser a mesma aplicação onde os eventos se originaram, a fonte do evento. Você pode publicar eventos de seu próprio aplicativo ao usar tópicos de namespace.

Origens de eventos

A origem do evento é onde o evento ocorre. Cada fonte de evento oferece suporte a um ou mais tipos de evento. Por exemplo, seu aplicativo é a fonte de eventos personalizados que seu sistema define. Ao usar tópicos de namespace, as fontes de eventos suportadas são seus próprios aplicativos.

Espaços de nomes

Um namespace de Grade de Eventos é um contêiner de gerenciamento para os seguintes recursos:

Recurso Protocolo suportado
Tópicos de namespace HTTP
Espaços Temáticos MQTT
Clientes MQTT
Grupos de Clientes MQTT
Certificados de CA MQTT
Ligações de permissão MQTT

Ao usar um namespace Azure Event Grid, pode agrupar recursos relacionados e geri-los como uma única unidade na sua subscrição do Azure. Dá-lhe um nome de domínio totalmente qualificado (FQDN) exclusivo.

Um namespace expõe dois extremos:

  • Um endpoint HTTP para suportar requisitos gerais de mensagens usando tópicos de namespace.
  • Um ponto terminal MQTT para mensagens de IoT ou soluções que utilizam MQTT.

Um espaço de nomes também fornece pontos finais de rede integrados com o DNS. Ele também fornece uma gama de controle de acesso e recursos de gerenciamento de integração de rede, como filtragem de entrada de IP público e links privados. É também o contêiner de identidades gerenciadas usado para recursos contidos no namespace.

Aqui estão mais alguns pontos sobre namespaces:

  • Um espaço de nomes é um recurso controlado com as propriedades tags e location. Depois de o criar, pode encontrá-lo em resources.azure.com.
  • O nome do namespace pode ter de 3 a 50 caracteres. Pode incluir caracteres alfanuméricos, hífens (-) e nenhum espaço.
  • O nome precisa ser exclusivo por região.

Unidades de débito

As unidades de taxa de transferência (TUs) definem a capacidade da taxa de eventos de entrada e saída em namespaces. Para obter mais informações, consulte Cotas e limites da Grade de Eventos do Azure.

Escala automática

O Autoscale ajusta automaticamente o número de unidades de capacidade de processamento atribuídas a um espaço de nomes do Event Grid com base no tráfego em tempo real e na utilização de recursos. Monitoriza continuamente os principais indicadores de desempenho e escala a capacidade dentro dos limites mínimos e máximos que configura. Este comportamento ajuda a manter um desempenho consistente durante picos de carga de trabalho e reduz custos em períodos de baixa atividade sem necessidade de intervenção manual.

Para usar o Autoscale, ativa-o no namespace e especifica:

  • Unidades mínimas de débito: O limite mínimo da capacidade. O namespace não escala abaixo deste valor.
  • Unidades de máximo rendimento: O teto de capacidade. O namespace não escala acima deste valor.

O Event Grid avalia a utilização com base na ingestão e saída de eventos, nas taxas de publicação MQTT de entrada e de saída e no número de clientes MQTT registados. Quando qualquer categoria ultrapassa o limiar de escalonamento, são disponibilizadas mais TUs. Quando todas as categorias caem abaixo do limiar de redução, as UTs são libertadas. Períodos de arrefecimento entre operações de escalonamento evitam oscilações rápidas.

O escalonamento automático é útil para cargas de trabalho com MQTT, em que a distribuição de mensagens e o crescimento das subscrições podem mudar rapidamente à medida que os dispositivos se ligam e desligam. Também é útil para cargas de trabalho de intermediários de eventos com padrões de tráfego irregulares.

Para detalhes de configuração e limites de capacidade por TU, consulte a visão geral e o guiaprático do Autoscale.

Tópicos

Um tópico contém eventos que foram publicados na Grade de Eventos. Normalmente, você usa um recurso de tópico para uma coleção de eventos relacionados. Os tópicos dentro de um namespace são frequentemente chamados de tópicos de namespace.

Tópicos de namespace

Os tópicos de espaço de nomes são tópicos criados dentro de um espaço de nomes do Event Grid. A sua aplicação publica eventos num ponto final HTTP de um espaço de nomes, especificando um tópico do espaço de nomes no qual os eventos publicados ficam logicamente contidos. Quando desenhares a tua aplicação, decide quantos temas criar. Para soluções relativamente grandes, crie um tópico de namespace para cada categoria de eventos relacionados. Por exemplo, considere um aplicativo que gerencia contas de usuário e outro aplicativo sobre pedidos de clientes. É improvável que todos os assinantes de eventos queiram eventos de ambos os aplicativos. Para segregar preocupações, crie dois tópicos de namespace: um para cada aplicativo. Permita que os consumidores de eventos se inscrevam no tópico de acordo com suas necessidades. Para soluções pequenas, você pode preferir enviar todos os eventos para um único tópico.

Os tópicos de namespace suportam entrega por pull e entrega por push. Veja quando usar a entrega pull ou push para o ajudar a decidir se a entrega pull é a abordagem adequada face aos seus requisitos.

Subscrições de eventos

Uma assinatura de evento é um recurso de configuração associado a um único tópico. Entre outras coisas, utilize uma subscrição de evento para definir os critérios de seleção do evento e definir a coleção de eventos disponível para um assinante a partir do conjunto total de eventos disponíveis num tema. Você pode filtrar eventos de acordo com os requisitos do assinante. Por exemplo, você pode filtrar eventos por tipo de evento. Também pode definir critérios de filtro para as propriedades dos dados do evento se usar um objeto JSON como valor da propriedade dos dados . Para mais informações sobre propriedades de recursos, consulte a documentação da API REST do Event Grid.

Diagrama mostrando um tópico e assinaturas de eventos associados.

Para obter um exemplo de criação de assinaturas para tópicos de namespace, consulte Publicar e consumir mensagens usando tópicos de namespace usando CLI.

Nota

As subscrições de eventos sob um tema de namespace apresentam um modelo de recursos simplificado quando comparado com o modelo usado para tópicos personalizados, de domínio, parceiros e de sistema (Event Grid Basic). Para obter mais informações, consulte Criar, exibir e gerenciar assinaturas de eventos.

Entrega puxada

Com a entrega pull, seu aplicativo se conecta à Grade de Eventos para ler mensagens usando semântica semelhante a uma fila. À medida que as aplicações se ligam à Grade de Eventos para consumir eventos, controlam a taxa de consumo e o momento de consumo. As aplicações consumidoras também podem utilizar pontos finais privados ao ligarem-se ao Event Grid para ler eventos através de espaço de endereçamento IP privado.

A entrega pull suporta as seguintes operações para ler mensagens e controlar o estado da mensagem: receber, reconhecer, liberar, rejeitar e renovar bloqueio. Para mais informações, consulte Descrição geral da entrega por solicitação.

Estrutura dos dados ao receber eventos usando entrega por solicitação

Quando entrega eventos usando pull delivery, o Event Grid inclui um conjunto de objetos que, por sua vez, inclui os objetos event e brokerProperties . O valor da propriedade event é o CloudEvent fornecido no modo de conteúdo estruturado. O objeto brokerProperties contém o token de bloqueio associado ao CloudEvent entregue. O seguinte objeto JSON é uma resposta de exemplo de uma operação de receção que devolve dois eventos:

{
    "value": [
        {
            "brokerProperties": {
                "lockToken": "CiYKJDUwNjE4QTFFLUNDODQtNDZBQy1BN0Y4LUE5QkE3NjEwNzQxMxISChDXYS23Z+5Hq754VqQjxywE",
                "deliveryCount": 2
            },
            "event": {
                "specversion": "1.0",
                "id": "A234-1234-1235",
                "source": "/mycontext",
                "time": "2018-04-05T17:31:00Z",
                "type": "com.example.someeventtype",
                "data": "some data"
            }
        },
        {
            "brokerProperties": {
                "lockToken": "CiYKJDUwNjE4QTFFLUNDODQtNDZBQy1BN0Y4LUE5QkE3NjEwNzQxMxISChDLeaL+nRJLNq3/5NXd/T0b",
                "deliveryCount": 1
            },
            "event": {
                "specversion": "1.0",
                "id": "B688-1234-1235",
                "source": "/mycontext",
                "type": "com.example.someeventtype",
                "time": "2018-04-05T17:31:00Z",
                "data": {
                    "somekey" : "value",
                    "someOtherKey" : 9
                }
            }
        }
    ]
}

Entrega automática

Com a entrega por push, o Event Grid envia eventos para um destino configurado numa subscrição de eventos push (modo de entrega). Fornece um mecanismo robusto de repetição caso o destino não consiga receber eventos.

Importante

Atualmente, a entrega por push dos namespaces da Grade de Eventos suporta o Hubs de Eventos do Azure como destino. No futuro, os namespaces da Grade de Eventos darão suporte a mais destinos, incluindo todos os destinos suportados pelo Event Grid Basic.

Entrega de eventos do Event Hubs

O Event Grid utiliza o SDK Event Hubs para enviar eventos para Event Hubs usando AMQP. Os eventos são enviados como uma matriz de bytes com cada elemento na matriz contendo um CloudEvent.

Entrega por push e pull

A Grade de Eventos oferece suporte à entrega de eventos push e pull usando HTTP. Com a entrega push, define um destino numa subscrição de eventos, num webhook ou num serviço do Azure, na qual o Event Grid envia eventos. Com a entrega por pedido, as aplicações subscritoras ligam-se ao Event Grid para consumir eventos. A entrega pull é suportada para tópicos em um namespace Event Grid.

Importante

Os Hubs de Eventos são suportados como um destino para assinaturas de tópicos de namespace. Nas próximas versões, os espaços de nomes do Event Grid suportarão todos os destinos atualmente disponíveis no Event Grid Basic, bem como destinos adicionais.

Diagrama de alto nível mostrando push delivery e pull delivery com o tipo de recursos envolvidos.

Quando usar a entrega por push vs. entrega por pull

Seguem-se orientações gerais para o ajudar a decidir quando utilizar a entrega por pull ou push.

Entrega puxada

  • Você precisa de controle total sobre quando receber eventos. Por exemplo, seu aplicativo pode não estar ativo o tempo todo, não ser estável o suficiente ou você processar dados em determinados momentos.
  • Você precisa de controle total sobre o consumo de eventos. Por exemplo, um serviço ou camada downstream em seu aplicativo de consumidor tem um problema que impede que você processe eventos. Nesse caso, a API de entrega pull permite que o aplicativo do consumidor libere um evento já lido de volta ao corretor para que possa ser entregue posteriormente.
  • Você deseja usar links privados ao receber eventos, o que só é possível com a entrega pull, não com a entrega push.
  • Não pode expor um ponto final nem utilizar entrega push, mas pode ligar-se ao Event Grid para consumir eventos.

Entrega automática

  • Você deseja evitar sondagens constantes para determinar se ocorreu uma alteração no estado do sistema. Em vez disso, utilize o Event Grid para lhe enviar eventos quando ocorrerem alterações de estado.
  • Você tem um aplicativo que não pode fazer chamadas de saída. Por exemplo, sua organização pode estar preocupada com a exfiltração de dados. No entanto, a sua aplicação pode receber eventos através de um ponto terminal público.