Sdílet prostřednictvím


Konfigurace definic grafů WebAssembly (WASM) pro grafy toku dat

Definice grafů jsou centrální pro vývoj WASM, protože definují, jak se moduly připojují ke zpracování pracovních postupů. Pochopení vztahu mezi definicemi grafu a grafy toku dat vám pomůže efektivně vyvíjet.

Definice grafů WebAssembly (WASM) pro grafy toku dat jsou obecně dostupné.

Tento článek se zaměřuje na vytváření a konfiguraci definic grafu YAML. Informace o nasazení a testování grafů toku dat WASM najdete v tématu Použití WebAssembly s grafy toku dat.

Důležité

Grafy toku dat aktuálně podporují pouze koncové body MQTT, Kafka a OpenTelemetry. Jiné typy koncových bodů, jako jsou Data Lake, Microsoft Fabric OneLake, Azure Data Explorer a Local Storage, se nepodporují. Další informace najdete v tématu Známé problémy.

Struktura definice grafu

Definice grafu se řídí formálním schématem JSON , které ověřuje strukturu a zajišťuje kompatibilitu. Konfigurace zahrnuje:

  • Požadavky na moduly pro kompatibilitu verzí rozhraní API a knihovny hostitelů
  • Konfigurace modulů pro parametry modulu a přizpůsobení operátorů
  • Operace definující uzly zpracování v pracovním postupu
  • Připojení, která určují směrování toku dat mezi operacemi
  • Schémata pro volitelné ověření dat

Základní struktura grafu

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" }

Kompatibilita verzí

Tato moduleRequirements část zajišťuje kompatibilitu pomocí sémantické správy verzí:

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"

Návod

Pokyny k povolení vnitřního odvozování ONNX pomocí funkce wasi-nn najdete v článku Spuštění odvozování ONNX v grafech toku dat WebAssembly.

Příklad 1: Jednoduchá definice grafu

Jednoduchá definice grafu ukazuje základní třífázový kanál, který převádí data o teplotě z Fahrenheita na stupně Celsia:

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"

Podrobné pokyny k nasazení a pokyny k testování pro tento příklad najdete v příkladu 1: Základní nasazení s jedním modulem WASM.

Jak funguje jednoduchý graf

Tento graf vytvoří jednoduchý kanál zpracování dat:

  1. Zdrojová operace: Přijímá data o teplotě ze zdrojového koncového bodu toku dat.
  2. Operace mapování: Zpracovává data pomocí modulu WASM (temperature:1.0.0temperature WASM)
  3. Operace jímky: Odesílá převedená data do cílového koncového bodu toku dat.

Modul teploty převede Fahrenheita na stupně Celsia pomocí standardního vzorce (F - 32) × 5/9 = C.

Vstupní formát:

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

Výstupní formát:

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

Příklad 2: Komplexní definice grafu

Komplexní definice grafu ukazuje sofistikovaný pracovní postup zpracování více snímačů, který zpracovává data o teplotě, vlhkosti a obrázku s pokročilými analýzami:

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

Podrobné pokyny k nasazení a pokyny k testování pro tento příklad najdete v příkladu 2: Nasazení složitého grafu.

Jak funguje složitý graf

Složitý graf zpracovává tři datové proudy a kombinuje je do rozšířené analýzy senzorů:

Diagram znázorňující příklad komplexního grafu toku dat s několika moduly

Jak je znázorněno v diagramu, data proudí z jednoho zdroje do několika fází zpracování:

  1. Modul okna: Zpoždění příchozích dat pro zpracování na základě času
  2. Operace větve: Směruje data na základě typu obsahu (data snímačů vs. snímky)
  3. Cesta zpracování teploty:
    • Převede Fahrenheita na Stupně Celsia.
    • Filtry neplatných čtení
    • Vypočítá statistické souhrny v časových oknech.
  4. Cesta zpracování vlhkosti:
    • Shromažďuje měření vlhkosti pomocí statistické analýzy.
  5. Cesta ke zpracování obrázků:
    • Formátuje obrazová data pro zpracování.
    • Provádí detekci objektů na snímcích fotoaparátu.
  6. Konečná agregace:
    • Zřetězí všechny zpracovávané datové proudy.
    • Agreguje výsledky s více senzory.
    • Přidá upozornění na metadata a přetěžky.

Graf používá specializované moduly z příkladů Rustu:

  • Modul okna pro zpoždění zpracování na základě času
  • Moduly teploty pro převod, filtrování a statistickou analýzu
  • Modul vlhkosti pro zpracování dat v prostředí
  • Moduly snímků pro směrování dat obrázků a detekci objektů
  • Formátovací modul pro přípravu obrázků ke zpracování
  • Modul shromažďování pro agregaci dat s více senzory
  • Modul rozšiřování pro přidání metadat a generování upozornění

Operace větví umožňují paralelní zpracování různých vstupů snímačů, což grafu umožňuje efektivně zpracovávat více datových typů v rámci jednoho pracovního postupu.

Jak se z definic grafu stanou toky dat

Tady je postup, jak souvisí definice grafů a grafy toku dat Azure IoT Operations:

Váš soubor YAML definuje logiku interního zpracování s operacemi zdroje nebo jímky jako abstraktní koncové body. To se stane artefaktem definice grafu. Odkazované moduly implementují skutečné operátory zpracování jako moduly WASM. Definice grafů i moduly WASM se nahrají do registru kontejneru (například Azure Container Registry) jako artefakty OCI pro úložiště registru.

Prostředek Azure Resource Manageru nebo Kubernetes "zabalí" definici grafu a připojí ji ke skutečným koncovým bodům jako prostředek grafu toku dat. Během nasazování za běhu modul toku dat načítá artefakty z registru a nasadí je. V případě mapování koncových bodů se abstraktní operace zdroje a jímky v grafu připojují ke skutečným tématům MQTT, službě Azure Event Hubs nebo jiným zdrojům dat.

Tento diagram například znázorňuje vztah mezi definicemi grafu, moduly WASM a grafy toku dat:

Diagram znázorňující vztah mezi definicemi grafu, moduly WASM a grafy toku dat

Nasazení registru

Definice grafů i moduly WASM se musí nahrát do registru kontejneru jako artefakty OCI (Open Container Initiative), aby na ně grafy toku dat odkazovaly:

  • Definice grafu jsou zabalené jako artefakty OCI s typem média. application/vnd.oci.image.config.v1+json
  • Moduly WASM jsou zabalené jako artefakty OCI obsahující zkompilovaný binární soubor WebAssembly.
  • Použití sémantické správy verzí (například my-graph:1.0.0) temperature-converter:2.1.0pro správnou správu závislostí
  • Podpora registru je kompatibilní se službou Azure Container Registry, Docker Hubem a dalšími registry kompatibilními s OCI.

Oddělení umožňuje opakovaně použitelnou logiku, ve které se stejná definice grafu nasazuje s různými koncovými body. Poskytuje nezávislost prostředí, kde vývoj, příprava a produkce používají různé zdroje dat. Podporuje také modulární nasazení, kde aktualizujete konfigurace koncových bodů beze změny logiky zpracování.

Podrobné pokyny k nahrání definic grafů a modulů WASM do registrů najdete v tématu Použití WebAssembly s grafy toku dat. Kompletní pracovní postupy nasazení, včetně nastavení registru, ověřování a testování, najdete v příkladech v této příručce.

Parametry konfigurace modulu

Definice grafu můžou specifikovat parametry modulu pro operátory WASM prostřednictvím konfigurací modulů:

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

Tyto parametry se předávají funkci operátora init WASM za běhu a umožňují dynamickou konfiguraci bez opětovného sestavení modulů. Podrobné příklady přístupu k těmto parametrům v kódu Rust a Python najdete v tématu Parametry konfigurace modulu.

Úplný příklad implementace najdete v modulu větve, který ukazuje použití parametrů pro logiku podmíněného směrování.

Další kroky