Restringir dados em gráficos de fluxo de dados

Uma transformada de aceleração limita a frequência com que ele encaminha mensagens sobre um tópico MQTT. Em vez de descartar mensagens com base no conteúdo, a transformação de limitação elimina mensagens com base no momento em que as processa, encaminhando no máximo uma mensagem por padrão de tópico dentro de cada intervalo configurado. Use a redução de potência para proteger sistemas a jusante de fontes de rajada ou alta frequência sem alterar o conteúdo da mensagem.

Para obter uma visão geral dos grafos de fluxo de dados e como as transformações compõem em um pipeline, consulte a visão geral dos grafos de fluxo de dados.

Prerequisites

  • Uma instância de Operações do Azure IoT implantada em um cluster do Kubernetes. Para obter mais informações, consulte Deploy Operações do Azure IoT.
  • A implantação cria automaticamente um endpoint padrão de registro chamado default que aponta para mcr.microsoft.com. As transformações integradas utilizam este ponto de extremidade.

Limitação de escalabilidade para grafos com estado

Importante

As transformadas de janela e de acelerador são com estado. Cada instância mantém seu próprio estado e as instâncias não compartilham esse estado entre si. Quando a contagem de instâncias do perfil de fluxo de dados é maior que uma, assinaturas compartilhadas distribuem mensagens entre instâncias, de modo que cada instância vê apenas um subconjunto das mensagens. Uma transformada de janela então calcula agregações como médias, somas e contagens sobre um conjunto de dados parcial, e uma transformada de aceleração impõe o limite de taxa configurado independentemente em cada instância, em vez de em todo o pipeline.

Defina a contagem de instâncias do perfil de fluxo de dados para 1 para qualquer grafo de fluxo de dados que use uma transformação de janela ou de aceleração. Grafos de fluxo de dados sem estado que usam apenas transformadas de mapeamento, filtro, desvio e concatenação podem usar com segurança contagens maiores de instâncias para aumentar a taxa de transferência.

Como funciona a transformação do acelerador

A transformação de limitação avalia o tópico de cada mensagem recebida em relação a uma lista ordenada de regras por tópico:

  • Quem ganhar a primeira partida vence. A transformação avalia as regras em ordem. A primeira regra cujo topic padrão corresponde ao tema da mensagem determina se a transformação encaminha a mensagem. A transformação não verifica regras posteriores, mesmo que elas também correspondam.
  • Tópicos não correspondidos passam. Se nenhuma regra corresponder ao tópico da mensagem, a transformação encaminha a mensagem sem qualquer limitação.
  • O encaminhamento é baseado em tempo, não em contagem. Para uma regra correspondente, a transformação encaminha a primeira mensagem que processa e, em seguida, descarta todas as mensagens subsequentes que correspondam a esse padrão até que tenha decorrido, desde a última mensagem encaminhada, o intervalo configurado (1000 / maxMessagesPerSecond milissegundos, arredondado para cima). Esse comportamento limita a taxa máxima, mas não permite que rajadas compensem quedas anteriores.
  • Estado compartilhado por padrão, não por tópico. Quando o padrão topic de uma regra usa um caractere curinga, todos os tópicos concretos que correspondem a ele compartilham o mesmo estado de limitação dentro de uma instância de transformação. Por exemplo, uma única sensors/+ regra limita a taxa combinada entre sensors/temperature e sensors/humidity, não cada uma independentemente.
  • 0 deixa tudo de lado. Definir maxMessagesPerSecond para 0 uma regra elimina todas as mensagens que correspondem ao padrão dessa regra.
  • O tempo é baseado no tempo de processamento, não no conteúdo da mensagem. A transformação usa seu relógio monotônico quando processa cada mensagem. Ele não lê um campo de carimbo de data/hora no payload da mensagem.

Note

A transformação de limitação apenas decide se deve encaminhar ou descartar uma mensagem. Ele nunca modifica o conteúdo da mensagem.

Configure regras de limitação por tópico

Defina regras de limitação na chave de configuração throttle (não rules) como um objeto JSON com uma matriz perTopicThrottles.

Na configuração de transformação de limitação, adicione uma ou mais regras de limitação. Para cada regra, especifique:

Setting Description
Topic O padrão de tópico do MQTT para correspondência. Dá suporte aos curingas + (nível único) e # (vários níveis).
Máximo de mensagens por segundo A taxa máxima de encaminhamento para tópicos que correspondem a esse padrão. Defina para 0 eliminar todas as mensagens correspondentes.

Com essa regra, a transformação encaminha a primeira sensors/temperature mensagem processada e depois elimina quaisquer mensagens adicionais sobre esse tema que processe menos de 100 milissegundos depois (1000 / 10). Essa regra não afeta outros temas além sensors/temperaturede .

Cada entrada em perTopicThrottles possui as seguintes propriedades:

Property Obrigatório Description
topic Yes Padrão de tópico do MQTT para correspondência. Dá suporte aos curingas + (nível único) e # (vários níveis, à direita).
maxMessagesPerSecond Yes Taxa máxima de encaminhamento para tópicos que correspondem a esse padrão, em mensagens por segundo. A transformada permite valores fracionários. Por exemplo, 0.1 permite uma mensagem a cada 10 segundos. Deve ser zero ou um número positivo e finito. Defina para 0 eliminar todas as mensagens que correspondem ao padrão. O tempo tem precisão de 1 milissegundo, então valores maiores que 1000 têm o mesmo limite efetivo que 1000.

Importante

Cada padrão em topic deve ser único. A transformação rejeita a configuração da mesma string de padrão mais de uma vez durante a inicialização.

Use múltiplas regras por tema

Como a transformação avalia as regras em ordem e a primeira partida vence, liste padrões mais específicos antes dos mais gerais se quiser que eles tenham seu próprio limite de taxa:

Adicione duas regras, nesta ordem:

Order Tópico Máximo de mensagens por segundo
1 sensors/temperature 10
2 sensors/# 1

Mensagens em sensors/temperature correspondem à primeira regra e são limitadas a 10 mensagens por segundo. Mensagens sobre qualquer outro sensors/* tema (por exemplo, sensors/humidity) correspondem à segunda regra e compartilham um limite combinado de 1 mensagem por segundo.

Importante

A ordem é importante. Se a sensors/# regra fosse listada primeiro, ela também corresponderia sensors/temperature às mensagens, e a transformação nunca alcançaria a regra mais específica.

Use coringas para limitar grupos de tópicos

O padrão topic dá suporte aos mesmos curingas dos filtros de tópico do MQTT:

Curinga Partidas Example
+ Exatamente um nível de tópico sensors/+/status corresponde a sensors/line1/status, mas não a sensors/line1/sub/status
# Nenhum ou mais níveis restantes do tópico e deve ser o último segmento sensors/# corresponde a sensors, sensors/temperaturee sensors/line1/temperature

Todos os tópicos concretos que correspondem à mesma regra do curinga compartilham um mesmo estado de limitação.

Adicione uma regra com o tema sensors/+ e o máximo de mensagens por segundo 1.

Com essa regra, uma mensagem em sensors/temperature e uma mensagem em sensors/humidity, processadas com 500 milissegundos de intervalo, não são ambas encaminhadas — a segunda é descartada, porque é contabilizada no mesmo intervalo compartilhado de 1 segundo que a primeira, independentemente de em qual tópico específico ela esteja.

Note

Um padrão nu # corresponde a cada tópico e aplica um único limite de taxa combinado dentro de cada instância de transformação.

Descartar todas as mensagens de um tópico

Defina maxMessagesPerSecond para 0 eliminar toda mensagem que corresponda a um padrão, sem remover a regra ou o tópico do seu pipeline:

Adicione uma regra com o tema debug/# e o máximo de mensagens por segundo 0.

Implante um gráfico de fluxo de dados com limitação

Para aplicar a redução de velocidade de ponta a ponta, implante um gráfico de fluxo de dados que conecte uma fonte, uma transformação de aceleração e um destino. Use a ferramenta que combine com seu fluxo de trabalho.

Na experiência de Operações, crie um gráfico de fluxo de dados com uma transformação de limitação:

  1. Adicione uma fonte que lê do tópico MQTT.
  2. Adicione uma transformação de limitação. Adicione uma ou mais regras por tópico, ordenadas do mais ao menos específico.
  3. Adicione um destino que direciona ao seu tópico de saída.

Limitações

  • Não modifica mensagens. A transformação de limitação apenas encaminha ou descarta mensagens; ela não altera o conteúdo da mensagem.
  • Quem ganhar a primeira partida vence. A transformação aplica apenas a primeira regra cujo topic padrão corresponde ao tema da mensagem. Liste padrões mais específicos antes dos mais gerais.
  • Estado compartilhado por padrão. Uma regra coringa compartilha seu limite de taxa em todos os tópicos concretos que ela aborda. Não existe um limite separado por tema.
  • Sem permissão para intermitência. A transformação impõe um intervalo mínimo de tempo entre mensagens encaminhadas para cada padrão correspondente. Ela não acumula capacidade não utilizada de períodos anteriores e mais lentos.
  • Precisão de milissegundos. O intervalo mínimo de aceleração é de 1 milissegundo, então valores maiores que 1000 para maxMessagesPerSecond não aumentam a taxa efetiva de encaminhamento além de 1.000 mensagens por segundo.
  • O tempo é baseado no tempo de processamento, não no conteúdo da mensagem. A transformação usa o tempo que processa cada mensagem, não o momento em que o corretor a recebeu ou um campo de carimbo de data no payload.
  • O estado é local e fica na memória. Cada instância do perfil de fluxo de dados mantém seu próprio estado de limitação. Reiniciar ou reconfigurar a transformação reinicia esse estado. Se um perfil possui múltiplas instâncias, cada instância aplica a taxa configurada de forma independente.
  • Padrões de tópicos duplicados não são permitidos. Configurar a mesma cadeia de caracteres topic mais de uma vez em perTopicThrottles falha quando a transformação é inicializada.