Dela via


Konfigurera WASM-grafdefinitioner (WebAssembly) för dataflödesdiagram (förhandsversion)

Viktigt!

WebAssembly-grafdefinitioner (WASM) för dataflödesdiagram är i förhandsversion. Den här funktionen har begränsningar och gäller inte för produktionsarbetsbelastningar.

Se kompletterande användningsvillkor för Förhandsversioner av Microsoft Azure för juridiska villkor som gäller för Azure-funktioner som är i betaversion, förhandsversion eller som ännu inte har släppts i allmän tillgänglighet.

Diagramdefinitioner är centrala för WASM-utveckling eftersom de definierar hur dina moduler ansluter till bearbetningsarbetsflöden. Att förstå relationen mellan grafdefinitioner och dataflödesdiagram hjälper dig att utveckla effektivt.

Den här artikeln fokuserar på att skapa och konfigurera YAML-grafdefinitionerna. Information om hur du distribuerar och testar WASM-dataflödesdiagram finns i Använda WebAssembly med dataflödesdiagram.

Viktigt!

Dataflödesdiagram stöder för närvarande endast MQTT-, Kafka- och OpenTelemetry-slutpunkter. Andra slutpunktstyper som Data Lake, Microsoft Fabric OneLake, Azure Data Explorer och Local Storage stöds inte. Mer information finns i Kända problem.

Diagramdefinitionsstruktur

Diagramdefinitioner följer ett formellt JSON-schema som validerar strukturen och säkerställer kompatibilitet. Konfigurationen omfattar:

  • Modulkrav för API- och värdbiblioteksversionskompatibilitet
  • Modulkonfigurationer för körningsparametrar och operatörsanpassning
  • Åtgärder som definierar bearbetningsnoder i arbetsflödet
  • Anslutningar som anger dataflödesroutning mellan åtgärder
  • Scheman för valfri dataverifiering

Grundläggande grafstruktur

moduleRequirements:
  apiVersion: "0.2.0"
  hostlibVersion: "0.2.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" }

Versionskompatibilitet

Avsnittet moduleRequirements garanterar kompatibilitet med semantisk versionshantering:

moduleRequirements:
  apiVersion: "0.2.0"          # WASI API version for interface compatibility
  hostlibVersion: "0.2.0"     # Host library version providing runtime support
  features:                    # Optional features required by modules
    - name: "wasi-nn"

Tips/Råd

Vägledning om hur du aktiverar ONNX-slutsatsdragning i band med wasi-nn funktionen finns i Köra ONNX-slutsatsdragning i WebAssembly-dataflödesdiagram.

Exempel 1: Enkel grafdefinition

Den enkla grafdefinitionen visar en grundläggande pipeline i tre steg som konverterar temperaturdata från Fahrenheit till Celsius:

moduleRequirements:
  apiVersion: "0.2.0"
  hostlibVersion: "0.2.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"

Stegvisa distributionsinstruktioner och testvägledning för det här exemplet finns i Exempel 1: Grundläggande distribution med en WASM-modul.

Så här fungerar det enkla diagrammet

Det här diagrammet skapar en enkel pipeline för databearbetning:

  1. Källåtgärd: Tar emot temperaturdata från dataflödets källslutpunkt
  2. Kartåtgärd: Bearbetar data med wasm-modulen temperature (temperature:1.0.0)
  3. Mottagaråtgärd: Skickar konverterade data till dataflödets målslutpunkt

Temperaturmodulen konverterar Fahrenheit till Celsius med hjälp av standardformeln (F - 32) × 5/9 = C.

Indataformat:

{"temperature": {"value": 100.0, "unit": "F"}}

Utdataformat:

{"temperature": {"value": 37.8, "unit": "C"}}

Exempel 2: Komplex grafdefinition

Den komplexa grafdefinitionen visar ett avancerat arbetsflöde för bearbetning av flera sensorer som hanterar temperatur, luftfuktighet och bilddata med avancerad analys:

moduleRequirements:
  apiVersion: "0.2.0"
  hostlibVersion: "0.2.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

Stegvisa distributionsinstruktioner och testvägledning för det här exemplet finns i Exempel 2: Distribuera ett komplext diagram.

Så här fungerar det komplexa diagrammet

Det komplexa diagrammet bearbetar tre dataströmmar och kombinerar dem till berikad sensoranalys:

Diagram som visar ett komplext dataflödesdiagramexempel med flera moduler.

Som du ser i diagrammet flödar data från en enda källa via flera bearbetningssteg:

  1. Fönstermodul: Fördröjer inkommande data för tidsbaserad bearbetning
  2. Grenåtgärd: Dirigerar data baserat på innehållstyp (sensordata jämfört med ögonblicksbilder)
  3. Sökväg för temperaturbearbetning:
    • Konverterar Fahrenheit till Celsius
    • Filtrerar ogiltiga avläsningar
    • Beräknar statistiska sammanfattningar över tidsfönster
  4. Bearbetningssökväg för luftfuktighet:
    • Ackumulerar fuktighetsmätningar med statistisk analys
  5. Sökväg för bildbearbetning:
    • Formaterar bilddata för bearbetning
    • Utför objektidentifiering på ögonblicksbilder av kameran
  6. Slutlig aggregering:
    • Sammanfogar alla bearbetade dataströmmar
    • Aggregerar resultat för flera sensorer
    • Lägger till metadata och aviseringar om övertemperatur

Diagrammet använder specialiserade moduler från Rust-exemplen:

  • Fönstermodul för tidsbaserade bearbetningsfördröjningar
  • Temperaturmoduler för konvertering, filtrering och statistisk analys
  • Fuktighetsmodul för bearbetning av miljödata
  • Ögonblicksbildmoduler för routning av bilddata och objektidentifiering
  • Formatera modulen för bildförberedelse för bearbetning
  • Insamlingsmodul för dataaggregering med flera sensorer
  • Berikningsmodul för tillägg av metadata och aviseringsgenerering

Grenåtgärder möjliggör parallell bearbetning av olika sensorindata, vilket gör att grafen effektivt kan hantera flera datatyper i ett enda arbetsflöde.

Hur grafdefinitioner blir dataflöden

Så här relaterar diagramdefinitioner och Dataflödesdiagram för Azure IoT Operations:

YAML-filen definierar den interna bearbetningslogiken med käll-/mottagaråtgärder som abstrakta slutpunkter. Detta blir grafdefinitionsartefakten. Refererade moduler implementerar de faktiska bearbetningsoperatorerna som WASM-moduler. Både diagramdefinitioner och WASM-moduler laddas upp till ett containerregister (till exempel Azure Container Registry) som OCI-artefakter för registerlagring.

Azure Resource Manager- eller Kubernetes-resursen "omsluter" grafdefinitionen och ansluter den till verkliga slutpunkter som dataflödesgrafresurs. Under körningsdistributionen hämtar dataflödesmotorn artefakterna från registret och distribuerar dem. För slutpunktsmappning ansluter de abstrakta käll-/mottagaråtgärderna i diagrammet till faktiska MQTT-ämnen, Azure Event Hubs eller andra datakällor.

Det här diagrammet illustrerar till exempel relationen mellan grafdefinitioner, WASM-moduler och dataflödesdiagram:

Diagram som visar relationen mellan diagramdefinitioner, WASM-moduler och dataflödesdiagram.

Registerdistribution

Både diagramdefinitioner och WASM-moduler måste laddas upp till ett containerregister som OCI-artefakter (Open Container Initiative) innan dataflödesdiagram kan referera till dem:

  • Diagramdefinitioner paketeras som OCI-artefakter med medietyp application/vnd.oci.image.config.v1+json
  • WASM-moduler paketeras som OCI-artefakter som innehåller den kompilerade WebAssembly-binärfilen
  • Använd semantisk versionshantering (till exempel my-graph:1.0.0, temperature-converter:2.1.0) för korrekt beroendehantering
  • Registerstöd är kompatibelt med Azure Container Registry, Docker Hub och andra OCI-kompatibla register

Separationen möjliggör återanvändbar logik där samma grafdefinition distribueras med olika slutpunkter. Det ger en oberoende miljö där utveckling, mellanlagring och produktion använder olika datakällor. Den stöder även modulär distribution där du uppdaterar slutpunktskonfigurationer utan att ändra bearbetningslogik.

Detaljerade anvisningar om hur du laddar upp diagramdefinitioner och WASM-moduler till register finns i Använda WebAssembly med dataflödesdiagram. Fullständiga distributionsarbetsflöden, inklusive registerkonfiguration, autentisering och testning, finns i exemplen i den guiden.

Modulkonfigurationsparametrar

Diagramdefinitioner kan ange körningsparametrar för WASM-operatorer via modulkonfigurationer:

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

Dessa parametrar skickas till WASM-operatorns init funktion vid körning, vilket aktiverar dynamisk konfiguration utan att moduler återskapas. Detaljerade exempel på hur du kommer åt och använder dessa parametrar i rust- och Python-koden finns i Modulkonfigurationsparametrar.

Ett fullständigt implementeringsexempel finns i grenmodulen, som visar parameteranvändning för logik för villkorsstyrd routning.

Nästa steg