Sdílet prostřednictvím


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

Důležité

Definice grafů WebAssembly (WASM) pro grafy toku dat jsou ve verzi PREVIEW. Tato funkce má omezení a není určená pro produkční úlohy.

Další podmínky použití pro Microsoft Azure Preview najdete v právních podmínkách, které se vztahují na funkce Azure, které jsou v beta verzi, preview nebo ještě nejsou vydané v obecné dostupnosti.

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.

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

moduleRequirements:
  apiVersion: "1.1.0"
  hostlibVersion: "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
  hostlibVersion: "1.1.0"     # Host library 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