Delen via


Grafiekdefinities van WebAssembly (WASM) configureren voor gegevensstroomgrafieken

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"

Aanbeveling

Zie wasi-nn voor hulp bij het inschakelen van in-band ONNX-deductie met de functie.

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:

  1. Bronbewerking: ontvangt temperatuurgegevens van het broneindpunt van de gegevensstroom
  2. Toewijzingsbewerking: verwerkt gegevens met de TEMPERATUUR WASM-module (temperature:1.0.0)
  3. 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:

Diagram met een voorbeeld van een grafiek met complexe gegevensstromen met meerdere modules.

Zoals in het diagram wordt weergegeven, stromen gegevens van één bron via meerdere verwerkingsfasen:

  1. Venstermodule: inkomende gegevens vertragen voor verwerking op basis van tijd
  2. Vertakkingsbewerking: routeert gegevens op basis van het inhoudstype (sensorgegevens versus momentopnamen)
  3. Pad voor temperatuurverwerking:
    • Converteert Fahrenheit naar Celsius
    • Ongeldige metingen filteren
    • Hiermee worden statistische samenvattingen in de loop van de tijdvensters berekend
  4. Pad voor vochtigheidsverwerking:
    • Verzamelt vochtigheidsmetingen met statistische analyse
  5. Pad naar afbeeldingsverwerking:
    • Afbeeldingsgegevens opmaken voor verwerking
    • Objectdetectie op cameramomentopnamen uitvoeren
  6. 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:

Diagram met 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.

Volgende stappen