Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Grafiekdefinities zijn centraal in WASM-ontwikkeling omdat ze definiëren hoe uw modules verbinding maken met verwerkingswerkstromen. Inzicht in de relatie tussen grafiekdefinities en gegevensstroomgrafieken helpt u effectief te ontwikkelen.
Grafiekdefinities van WebAssembly (WASM) voor gegevensstroomgrafieken zijn algemeen beschikbaar.
Dit artikel is gericht op het maken en configureren van de YAML-grafiekdefinities. Zie WebAssembly gebruiken met gegevensstroomgrafieken voor informatie over het implementeren en testen van WASM-gegevensstroomgrafieken.
Belangrijk
Gegevensstroomgrafieken ondersteunen momenteel alleen MQTT-, Kafka- en OpenTelemetry-eindpunten. Andere eindpunttypen, zoals Data Lake, Microsoft Fabric OneLake, Azure Data Explorer en Lokale opslag, worden niet ondersteund. Zie Bekende problemen voor meer informatie.
Grafiekdefinitiestructuur
Grafiekdefinities volgen een formeel JSON-schema dat structuur valideert en compatibiliteit garandeert. De configuratie omvat:
- Modulevereisten voor compatibiliteit met API- en hostbibliotheekversies
- Moduleconfiguraties voor runtimeparameters en aanpassing van operatoren
- Bewerkingen waarmee verwerkingsknooppunten in uw werkstroom worden gedefinieerd
- Verbindingen waarmee gegevensstroomroutering tussen bewerkingen wordt opgegeven
- Schema's voor optionele gegevensvalidatie
Basisgrafiekstructuur
metadata:
$schema: "https://www.schemastore.org/aio-wasm-graph-config-1.0.0.json"
name: "Simple graph"
description: "A simple graph with a source, a map module, and a sink"
version: "1.0.0"
vendor: "Microsoft"
moduleRequirements:
apiVersion: "1.1.0"
runtimeVersion: "1.1.0"
operations:
- operationType: "source"
name: "data-source"
- operationType: "map"
name: "my-operator/map"
module: "my-operator:1.0.0"
- operationType: "sink"
name: "data-sink"
connections:
- from: { name: "data-source" }
to: { name: "my-operator/map" }
- from: { name: "my-operator/map" }
to: { name: "data-sink" }
Versiecompatibiliteit
De moduleRequirements sectie zorgt voor compatibiliteit met behulp van semantische versiebeheer:
moduleRequirements:
apiVersion: "1.1.0" # WASI API version for interface compatibility
runtimeVersion: "1.1.0" # Runtime version providing runtime support
features: # Optional features required by modules
- name: "wasi-nn"
Voorbeeld 1: Eenvoudige grafiekdefinitie
De eenvoudige grafiekdefinitie demonstreert een eenvoudige pijplijn met drie fasen waarmee temperatuurgegevens van Fahrenheit worden geconverteerd naar Celsius:
metadata:
name: "Simple graph"
description: "A graph that transforms temperature from Fahrenheit to Celsius"
version: "1.0.0"
$schema: "https://www.schemastore.org/aio-wasm-graph-config-1.0.0.json"
vendor: "Microsoft"
moduleRequirements:
apiVersion: "1.1.0"
runtimeVersion: "1.1.0"
moduleConfigurations:
- name: module-temperature/map
parameters:
key1:
name: key2
description: key2
operations:
- operationType: "source"
name: "source"
- operationType: "map"
name: "module-temperature/map"
module: "temperature:1.0.0"
- operationType: "sink"
name: "sink"
connections:
- from:
name: "source"
to:
name: "module-temperature/map"
- from:
name: "module-temperature/map"
to:
name: "sink"
Zie voorbeeld 1: Basisimplementatie met één WASM-module voor stapsgewijze implementatie-instructies en testrichtlijnen voor dit voorbeeld.
Hoe de eenvoudige grafiek werkt
Met deze grafiek maakt u een eenvoudige pijplijn voor gegevensverwerking:
- Bronbewerking: ontvangt temperatuurgegevens van het broneindpunt van de gegevensstroom
-
Toewijzingsbewerking: verwerkt gegevens met de TEMPERATUUR WASM-module (
temperature:1.0.0) - Sink-bewerking: converteert geconverteerde gegevens naar het doeleindpunt van de gegevensstroom
De temperatuurmodule converteert Fahrenheit naar Celsius met behulp van de standaardformule (F - 32) × 5/9 = C.
Invoerindeling:
{"temperature": {"value": 100.0, "unit": "F"}}
Uitvoerindeling:
{"temperature": {"value": 37.8, "unit": "C"}}
Voorbeeld 2: Complexe grafiekdefinitie
De complexe grafiekdefinitie demonstreert een geavanceerde werkstroom voor multisensorverwerking die temperatuur-, vochtigheids- en afbeeldingsgegevens verwerkt met geavanceerde analyses:
metadata:
name: "Complex graph"
description: "A graph that processes temperature and humidity data from sensors, along with snapshot data. The graph performs filtering, accumulation, and enrichment operations before sending the processed data to the sink."
version: "1.0.0"
$schema: "https://www.schemastore.org/aio-wasm-graph-config-1.0.0.json"
vendor: "Microsoft"
moduleRequirements:
apiVersion: "1.1.0"
runtimeVersion: "1.1.0"
moduleConfigurations:
- name: module-temperature/map
parameters:
key1:
name: key2
description: key2
- name: module-snapshot/branch
parameters:
snapshot_topic:
name: snapshot_topic
description: Transform app snapshot_topic in snapshot branch's init routine
operations:
- operationType: "source"
name: "source"
- operationType: delay
name: module-window/delay
module: window:1.0.0
- operationType: "map"
name: "module-format/map"
module: "format:1.0.0"
- operationType: map
name: module-snapshot/map
module: snapshot:1.0.0
- operationType: branch
name: module-snapshot/branch
module: snapshot:1.0.0
- operationType: accumulate
name: module-snapshot/accumulate
module: snapshot:1.0.0
- operationType: map
name: module-temperature/map
module: temperature:1.0.0
- operationType: branch
name: module-temperature/branch
module: temperature:1.0.0
- operationType: filter
name: module-temperature/filter
module: temperature:1.0.0
- operationType: accumulate
name: module-temperature/accumulate
module: temperature:1.0.0
- operationType: accumulate
name: module-humidity/accumulate
module: humidity:1.0.0
- operationType: concatenate
name: concatenate1
module:
- operationType: accumulate
name: module-collection/accumulate
module: collection:1.0.0
- operationType: map
name: module-enrichment/map
module: enrichment:1.0.0
- operationType: "sink"
name: "sink"
connections:
- from:
name: source
to:
name: module-window/delay
- from:
name: module-window/delay
to:
name: module-snapshot/branch
- from:
name: module-snapshot/branch
arm: "False"
to:
name: module-temperature/branch
- from:
name: module-snapshot/branch
arm: "True"
to:
name: module-format/map
- from:
name: module-format/map
to:
name: module-snapshot/map
- from:
name: module-snapshot/map
to:
name: module-snapshot/accumulate
- from:
name: module-snapshot/accumulate
to:
name: concatenate1
- from:
name: module-temperature/branch
arm: "True"
to:
name: module-temperature/map
- from:
name: module-temperature/branch
arm: "False"
to:
name: module-humidity/accumulate
- from:
name: module-humidity/accumulate
to:
name: concatenate1
- from:
name: module-temperature/map
to:
name: module-temperature/filter
- from:
name: module-temperature/filter
to:
name: module-temperature/accumulate
- from:
name: module-temperature/accumulate
to:
name: concatenate1
- from:
name: concatenate1
to:
name: module-collection/accumulate
- from:
name: module-collection/accumulate
to:
name: module-enrichment/map
- from:
name: module-enrichment/map
to:
name: sink
Zie voorbeeld 2: Een complexe grafiek implementeren voor stapsgewijze implementatie-instructies en testrichtlijnen voor dit voorbeeld.
Hoe de complexe grafiek werkt
De complexe grafiek verwerkt drie gegevensstromen en combineert deze in verrijkte sensoranalyses:
Zoals in het diagram wordt weergegeven, stromen gegevens van één bron via meerdere verwerkingsfasen:
- Venstermodule: inkomende gegevens vertragen voor verwerking op basis van tijd
- Vertakkingsbewerking: routeert gegevens op basis van het inhoudstype (sensorgegevens versus momentopnamen)
-
Pad voor temperatuurverwerking:
- Converteert Fahrenheit naar Celsius
- Ongeldige metingen filteren
- Hiermee worden statistische samenvattingen in de loop van de tijdvensters berekend
-
Pad voor vochtigheidsverwerking:
- Verzamelt vochtigheidsmetingen met statistische analyse
-
Pad naar afbeeldingsverwerking:
- Afbeeldingsgegevens opmaken voor verwerking
- Objectdetectie op cameramomentopnamen uitvoeren
-
Uiteindelijke aggregatie:
- Voegt alle verwerkte gegevensstromen samen
- Voegt resultaten van meerdere sensoren samen
- Hiermee worden metagegevens en waarschuwingen voor overtemperature toegevoegd
In de grafiek worden gespecialiseerde modules uit de Rust-voorbeelden gebruikt:
- Venstermodule voor tijdgebaseerde verwerkingsvertragingen
- Temperatuurmodules voor conversie, filtering en statistische analyse
- Vochtigheidsmodule voor gegevensverwerking
- Momentopnamemodules voor routering van afbeeldingsgegevens en objectdetectie
- Indelingsmodule voor afbeeldingsvoorbereiding voor verwerking
- Verzamelingsmodule voor gegevensaggregatie met meerdere sensoren
- Verrijkingsmodule voor het toevoegen van metagegevens en het genereren van waarschuwingen
Vertakkingsbewerkingen maken parallelle verwerking van verschillende sensorinvoer mogelijk, zodat de grafiek meerdere gegevenstypen efficiënt binnen één werkstroom kan verwerken.
Hoe grafiekdefinities gegevensstromen worden
Hier ziet u hoe grafiekdefinities en Azure IoT Operations-gegevensstroomgrafieken zich verhouden:
Uw YAML-bestand definieert de interne verwerkingslogica met bron-/sinkbewerkingen als abstracte eindpunten. Dit wordt het artefact voor de grafiekdefinitie. Met modules waarnaar wordt verwezen, worden de werkelijke verwerkingsoperators geïmplementeerd als WASM-modules. Zowel grafiekdefinities als WASM-modules worden geüpload naar een containerregister (zoals Azure Container Registry) als OCI-artefacten voor registeropslag.
De Azure Resource Manager- of Kubernetes-resource 'verpakt' de grafiekdefinitie en verbindt deze met echte eindpunten als de gegevensstroomgrafiekresource. Tijdens de runtime-implementatie haalt de gegevensstroomengine de artefacten op uit het register en implementeert deze. Voor eindpunttoewijzing maken de abstracte bron-/sinkbewerkingen in uw grafiek verbinding met werkelijke MQTT-onderwerpen, Azure Event Hubs of andere gegevensbronnen.
In dit diagram ziet u bijvoorbeeld de relatie tussen grafiekdefinities, WASM-modules en gegevensstroomgrafieken:
Registerimplementatie
Zowel grafiekdefinities als WASM-modules moeten worden geüpload naar een containerregister als OCI-artefacten (Open Container Initiative) voordat er naar gegevensstroomgrafieken kan worden verwezen:
- Grafiekdefinities worden verpakt als OCI-artefacten met mediatype
application/vnd.oci.image.config.v1+json - WASM-modules worden verpakt als OCI-artefacten die het gecompileerde binaire webassembly-bestand bevatten
- Semantische versiebeheer (zoals
my-graph:1.0.0,temperature-converter:2.1.0) gebruiken voor het juiste afhankelijkheidsbeheer - Registerondersteuning is compatibel met Azure Container Registry, Docker Hub en andere OCI-compatibele registers
De scheiding maakt herbruikbare logica mogelijk waarbij dezelfde grafiekdefinitie wordt geïmplementeerd met verschillende eindpunten. Het biedt omgevingsafhankelijkheid waarbij ontwikkeling, fasering en productie verschillende gegevensbronnen gebruiken. Het biedt ook ondersteuning voor modulaire implementatie waarbij u eindpuntconfiguraties bijwerkt zonder de verwerkingslogica te wijzigen.
Zie WebAssembly gebruiken met gegevensstroomgrafieken voor gedetailleerde instructies over het uploaden van grafiekdefinities en WASM-modules naar registers. Zie de voorbeelden in die handleiding voor volledige implementatiewerkstromen, waaronder registerinstallatie, verificatie en testen.
Moduleconfiguratieparameters
Grafiekdefinities kunnen runtimeparameters voor WASM-operators opgeven via moduleconfiguraties:
moduleConfigurations:
- name: my-operator/map
parameters:
threshold:
name: temperature_threshold
description: "Temperature threshold for filtering"
required: true
unit:
name: output_unit
description: "Output temperature unit"
required: false
Deze parameters worden tijdens runtime doorgegeven aan de functie van init uw WASM-operator, waardoor dynamische configuratie wordt ingeschakeld zonder modules opnieuw te bouwen. Zie Moduleconfiguratieparameters voor gedetailleerde voorbeelden van hoe u deze parameters kunt openen en gebruiken in uw Rust- en Python-code.
Zie de vertakkingsmodule voor een volledig implementatievoorbeeld, waarin het parametergebruik voor voorwaardelijke routeringslogica wordt gedemonstreert.