Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Uma transformada de aceleração limita a frequência com que encaminha mensagens sobre um tópico MQTT. Em vez de eliminar mensagens com base no seu conteúdo, a transformação de aceleraçã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 limitação para proteger os sistemas a jusante de fontes de ráfagas ou de alta frequência sem alterar o conteúdo da mensagem.
Para uma visão geral dos gráficos de fluxo de dados e de como as transformações se compõem num pipeline, consulte Visão Geral dos Gráficos de Fluxo de Dados.
Pré-requisitos
- Uma instância do Operações IoT do Azure implementada num cluster Kubernetes. Para mais informações, consulte Deploy Operações IoT do Azure.
- A implementação cria automaticamente um endpoint de registo predefinido chamado
defaultque aponta paramcr.microsoft.com. As transformações incorporadas usam este endpoint.
Limitação de escalamento para grafos com estado
Importante
As transformadas de janela e de acelerador são com estado. Cada instância mantém o seu próprio estado e as instâncias não partilham esse estado entre si. Quando o número de instâncias do perfil de fluxo de dados é superior a um, as subscrições partilhadas distribuem mensagens entre instâncias, de modo que cada instância vê apenas um subconjunto das mensagens. Uma transformada de janela calcula então 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 de forma independente 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 utilize uma transformação de janela ou de aceleração. Grafos de fluxo de dados sem estado que utilizam apenas transformadas de mapeamento, filtro, ramificação e concatenação podem usar com segurança contagens de instâncias mais elevadas para aumentar o rendimento.
Como funciona a transformação do acelerador
A transformada de aceleração avalia o tema de cada mensagem recebida contra uma lista ordenada de regras por tópico:
- O primeiro jogo vence. A transformação avalia as regras por ordem. A primeira regra cujo
topicpadrão corresponde ao tema da mensagem determina se a transformação encaminha a mensagem. A transformação não verifica regras posteriores, mesmo que também coincidam. - Os tópicos sem correspondência passam adiante. Se nenhuma regra corresponder ao tema da mensagem, a transformação encaminha a mensagem sem qualquer limitação.
- O encaminhamento é feito com base no tempo, não na contagem. Para uma regra coincidente, a transformação encaminha a primeira mensagem que processa e, em seguida, elimina todas as mensagens subsequentes com esse padrão até que decorra o intervalo configurado (
1000 / maxMessagesPerSecondmilissegundos, arredondado para cima) desde a última mensagem encaminhada. Este comportamento limita a taxa máxima, mas não permite que os bursts compensem quedas anteriores. - Estado partilhado por padrão, não por tópico. Quando o padrão de
topicuma regra usa um coringa, todos os tópicos concretos que lhe correspondem partilham o mesmo estado de aceleração dentro de uma instância de transformação. Por exemplo, uma únicasensors/+regra limita a taxa combinada entresensors/temperatureesensors/humidity, não cada uma independentemente. -
0deixa cair tudo. DefinirmaxMessagesPerSecondpara0uma regra elimina todas as mensagens que correspondem ao padrão dessa regra. - O tempo baseia-se no tempo de processamento, não no conteúdo da mensagem. A transformação utiliza o seu relógio monotónico próprio quando processa cada mensagem. Não lê um campo de marca temporal da carga útil da mensagem.
Note
A transformação do acelerador decide apenas se encaminha ou deixa uma mensagem em falta. Nunca modifica o conteúdo da mensagem.
Configurar regras de aceleração por tópico
Defina regras de aceleração na throttle chave de configuração (não rules) como um objeto JSON com um perTopicThrottles array.
Na configuração de transformação de acelerador, adicione uma ou mais regras de aceleração. Para cada regra, especifique:
| Setting | Description |
|---|---|
| Topic | O padrão de tópicos do MQTT para corresponder. Suporta os carateres universais + (de nível único) e # (multinível). |
| Máximo de mensagens por segundo | A taxa máxima de reencaminhamento para tópicos que correspondem a este padrão. Defina para 0 eliminar todas as mensagens correspondentes. |
Com esta regra, a transformação encaminha a primeira sensors/temperature mensagem que processa, depois elimina quaisquer mensagens adicionais sobre esse tema que processe menos de 100 milissegundos depois (1000 / 10). Esta regra não afeta outros temas além sensors/temperaturede .
Cada entrada em perTopicThrottles tem as seguintes propriedades:
| Property | Required | Description |
|---|---|---|
topic |
Sim | Padrão de tópicos MQTT para corresponder. Suporta os + wildcards (de nível único) e # (multinível, apenas de retrocesso). |
maxMessagesPerSecond |
Sim | Taxa máxima de encaminhamento para tópicos que correspondem a este 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 correspondam ao padrão. A temporização tem precisão de 1 milissegundo, por isso valores superiores a 1000 têm o mesmo limite efetivo que 1000. |
Importante
Cada padrão topic em perTopicThrottles deve ser único. A transformação rejeita configurar a mesma cadeia de padrão mais do que uma vez durante a inicialização.
Use múltiplas regras por tema
Como a transformação avalia as regras por ordem e o primeiro jogo vence, liste padrões mais específicos antes dos mais gerais se quiseres que tenham o seu próprio limite de taxa:
Adicione duas regras, nesta ordem:
| Order | Topic | Máximo de mensagens por segundo |
|---|---|---|
| 1 | sensors/temperature |
10 |
| 2 | sensors/# |
1 |
As mensagens em sensors/temperature correspondem à primeira regra e estão limitadas a 10 mensagens por segundo. Mensagens sobre qualquer outro sensors/* tema (por exemplo, sensors/humidity) correspondem à segunda regra e partilham um limite combinado de 1 mensagem por segundo.
Importante
A ordem é relevante. Se a sensors/# regra fosse listada primeiro, também corresponderia sensors/temperature às mensagens, e a transformação nunca chegaria à regra mais específica.
Use coringas para limitar grupos de tópicos
O topic padrão suporta os mesmos curingas que os filtros de tópicos do MQTT:
| carácter universal | Resultados | Example |
|---|---|---|
+ |
Exatamente um nível de tópico |
sensors/+/status corresponde a sensors/line1/status mas não a sensors/line1/sub/status |
# |
Zero ou mais níveis temáticos restantes, e deve ser o último segmento |
sensors/# corresponde a sensors, sensors/temperature e sensors/line1/temperature |
Todos os tópicos concretos que correspondem à mesma regra do wildcard partilham um mesmo estado de aceleração.
Adicione uma regra com o tópico sensors/+ e o máximo de mensagens por segundo 1.
Com esta regra, uma mensagem no sensors/temperature e uma mensagem no sensors/humidity processadas com 500 milissegundos de intervalo não são ambas reencaminhadas — a segunda é descartada, porque conta para o mesmo intervalo partilhado de 1 segundo que a primeira, independentemente do tópico específico em que esteja.
Note
Um padrão nu # corresponde a todos os tópicos e aplica um único limite de taxa combinado em cada instância de transformação.
Eliminar todas as mensagens de um tópico
Defina maxMessagesPerSecond para 0 eliminar todas as mensagens que correspondam a um padrão, sem remover a regra ou o tópico do seu pipeline:
Adicione uma regra com o tópico debug/# e o máximo de mensagens por segundo 0.
Implemente um gráfico de fluxo de dados com potência
Para aplicar a limitação de ponta a ponta, implemente um grafo de fluxo de dados que ligue uma fonte, uma transformação de aceleração e um destino. Use a ferramenta que se adapte ao seu fluxo de trabalho.
Na experiência de Operações, crie-se um gráfico de fluxo de dados com uma transformada de aceleração:
- Adicione uma fonte que leia do seu tópico MQTT.
- Adiciona uma transformação de acelerador . Adicione uma ou mais regras por tema, ordenadas do mais ao menos específico.
- Adiciona um destino que envie para o tópico de saída.
Limitações
- Não modifica as mensagens. A transformação do acelerador apenas encaminha ou corta mensagens; Não altera o conteúdo da mensagem.
- O primeiro jogo vence. A transformação aplica-se apenas à primeira regra cujo
topicpadrão corresponde ao tema da mensagem. Lista padrões mais específicos antes dos mais gerais. - Estado partilhado por padrão. Uma regra wildcard partilha o seu limite de taxa em todos os temas concretos que corresponde. Não há um limite separado por tema.
- Sem autorização para explosões. A transformação impõe um tempo mínimo entre mensagens encaminhadas por padrão correspondente. 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, pelo que valores superiores a
1000paramaxMessagesPerSecondnão aumentam a taxa efetiva de encaminhamento para além de 1.000 mensagens por segundo. - O tempo baseia-se no tempo de processamento, não no conteúdo da mensagem. A transformação utiliza o tempo em que processa cada mensagem, não a hora em que o corretor a recebeu ou um campo de carimbo temporal na carga útil.
- O estado é local e é armazenado em memória. Cada instância do perfil de fluxo de dados mantém o seu próprio estado de aceleração. Reiniciar ou reconfigurar a transformação reinicia esse estado. Se um perfil tiver múltiplas instâncias, cada instância aplica a taxa configurada de forma independente.
- Não são permitidos padrões de tópicos duplicados. Configurar a mesma
topiccadeia de caracteres mais do que uma vez emperTopicThrottlesfalha quando a transformação é inicializada.