Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ważne
Definicje wykresów zestawu WebAssembly (WASM) dla wykresów przepływu danych są dostępne w wersji zapoznawczej. Ta funkcja ma ograniczenia i nie dotyczy obciążeń produkcyjnych.
Zapoznaj się z dodatkowymi warunkami użytkowania dla wersji zapoznawczych platformy Microsoft Azure , aby zapoznać się z postanowieniami prawnymi dotyczącymi funkcji platformy Azure, które są w wersji beta, wersji zapoznawczej lub nie zostały jeszcze wydane w wersji ogólnodostępnej.
Definicje grafów są kluczowe dla programowania WASM, ponieważ definiują sposób łączenia modułów z przepływami pracy przetwarzania. Zrozumienie relacji między definicjami grafu i wykresami przepływu danych ułatwia efektywne opracowywanie.
Ten artykuł koncentruje się na tworzeniu i konfigurowaniu definicji grafu YAML. Aby uzyskać informacje na temat wdrażania i testowania wykresów przepływu danych WASM, zobacz Use WebAssembly with data flow graphs (Używanie zestawu WebAssembly z wykresami przepływu danych).
Ważne
Wykresy przepływu danych obsługują obecnie tylko punkty końcowe MQTT, Kafka i OpenTelemetry. Inne typy punktów końcowych, takie jak Data Lake, Microsoft Fabric OneLake, Azure Data Explorer i Local Storage, nie są obsługiwane. Aby uzyskać więcej informacji, zobacz Znane problemy.
Struktura definicji grafu
Definicje grafu są zgodne z formalnym schematem JSON , który weryfikuje strukturę i zapewnia zgodność. Konfiguracja obejmuje następujące elementy:
- Wymagania modułu dotyczące zgodności wersji interfejsu API i biblioteki hostów
- Konfiguracje modułów dla parametrów środowiska uruchomieniowego i dostosowywania operatora
- Operacje definiujące węzły przetwarzania w przepływie pracy
- Połączenia określające routing przepływu danych między operacjami
- Schematy na potrzeby opcjonalnej weryfikacji danych
Podstawowa 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" }
Zgodność wersji
Sekcja moduleRequirements zapewnia zgodność przy użyciu semantycznego przechowywania wersji:
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"
Wskazówka
Aby uzyskać wskazówki dotyczące włączania wnioskowania ONNX w pasmie z funkcją wasi-nn, zobacz Uruchamianie wnioskowania ONNX w grafach przepływu danych WebAssembly.
Przykład 1. Prosta definicja grafu
Prosta definicja grafu przedstawia podstawowy potok trójetapowy, który konwertuje dane temperatury z Fahrenheita na Stopnie Celsjusza:
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"
Aby uzyskać instrukcje krok po kroku dotyczące wdrażania i wskazówki dotyczące testowania dla tego przykładu, zobacz Przykład 1: Podstawowe wdrożenie przy użyciu jednego modułu WASM.
Jak działa prosty graf
Ten graf tworzy prosty potok przetwarzania danych:
- Operacja źródła: odbiera dane temperatury ze źródłowego punktu końcowego przepływu danych
-
Operacja mapy: przetwarza dane za pomocą modułu WASM temperatury (
temperature:1.0.0) - Operacja ujścia: wysyła przekonwertowane dane do docelowego punktu końcowego przepływu danych
Moduł temperatury konwertuje fahrenheita na stopnie Celsjusza przy użyciu standardowej formuły (F - 32) × 5/9 = C.
Format danych wejściowych:
{"temperature": {"value": 100.0, "unit": "F"}}
Format danych wyjściowych:
{"temperature": {"value": 37.8, "unit": "C"}}
Przykład 2. Złożona definicja grafu
Złożona definicja grafu przedstawia zaawansowany przepływ pracy przetwarzania wielu czujników, który obsługuje dane temperatury, wilgotności i obrazu z zaawansowaną analizą:
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
Aby uzyskać instrukcje krok po kroku dotyczące wdrażania i wskazówki dotyczące testowania dla tego przykładu, zobacz Przykład 2: Wdrażanie złożonego grafu.
Jak działa złożony graf
Złożony graf przetwarza trzy strumienie danych i łączy je w wzbogaconą analizę czujników:
Jak pokazano na diagramie, dane przepływa z jednego źródła przez wiele etapów przetwarzania:
- Moduł okna: opóźnia dane przychodzące na potrzeby przetwarzania na podstawie czasu
- Operacja gałęzi: kieruje dane na podstawie typu zawartości (dane czujnika a migawki)
-
Ścieżka przetwarzania temperatury:
- Konwertuje fahrenheita na stopnie Celsjusza
- Filtruje nieprawidłowe odczyty
- Oblicza podsumowania statystyczne w oknach czasu
-
Ścieżka przetwarzania wilgotności:
- Gromadzi pomiary wilgotności przy użyciu analizy statystycznej
-
Ścieżka przetwarzania obrazów:
- Formatuje dane obrazu do przetwarzania
- Wykonuje wykrywanie obiektów na migawkach aparatu
-
Końcowa agregacja:
- Łączy wszystkie przetworzone strumienie danych
- Agreguje wyniki z wieloma czujnikami
- Dodaje metadane i alerty overtemperature
Wykres używa wyspecjalizowanych modułów z przykładów rust:
- Moduł okna na potrzeby opóźnień przetwarzania na podstawie czasu
- Moduły temperatury do konwersji, filtrowania i analizy statystycznej
- Moduł wilgotności na potrzeby przetwarzania danych środowiskowych
- Moduły migawek na potrzeby routingu danych obrazów i wykrywania obiektów
- Moduł formatowania do przygotowania obrazu do przetwarzania
- Moduł zbierania na potrzeby agregacji danych z wieloma czujnikami
- Moduł wzbogacania na potrzeby dodawania metadanych i generowania alertów
Operacje gałęzi umożliwiają równoległe przetwarzanie różnych danych wejściowych czujników, dzięki czemu wykres może wydajnie obsługiwać wiele typów danych w ramach jednego przepływu pracy.
Jak definicje grafu stają się przepływami danych
Oto jak są powiązane definicje wykresów i wykresy przepływu danych operacji usługi Azure IoT:
Plik YAML definiuje wewnętrzną logikę przetwarzania za pomocą operacji źródła/ujścia jako abstrakcyjnych punktów końcowych. Staje się to artefaktem definicji grafu. Przywoływały moduły implementują rzeczywiste operatory przetwarzania jako moduły WASM. Definicje grafu i moduły WASM są przekazywane do rejestru kontenerów (na przykład usługi Azure Container Registry) jako artefakty OCI dla magazynu rejestru.
Zasób usługi Azure Resource Manager lub Kubernetes "opakowuje" definicję grafu i łączy go z rzeczywistymi punktami końcowymi jako zasobem grafu przepływu danych. Podczas wdrażania środowiska uruchomieniowego aparat przepływu danych ściąga artefakty z rejestru i wdraża je. W przypadku mapowania punktów końcowych operacje abstrakcyjnego źródła/ujścia na grafie łączą się z rzeczywistymi tematami MQTT, usługą Azure Event Hubs lub innymi źródłami danych.
Na przykład na tym diagramie przedstawiono relację między definicjami grafu, modułami WASM i wykresami przepływu danych:
Wdrażanie rejestru
Zarówno definicje grafu, jak i moduły WASM muszą zostać przekazane do rejestru kontenerów jako artefakty Open Container Initiative (OCI), zanim będą mogły odwoływać się do nich grafy przepływu danych:
- Definicje grafu są pakowane jako artefakty OCI z typem nośnika
application/vnd.oci.image.config.v1+json - Moduły WASM są pakowane jako artefakty OCI zawierające skompilowany plik binarny zestawu WebAssembly
- Użyj semantycznego przechowywania wersji (na przykład
my-graph:1.0.0,temperature-converter:2.1.0) w celu odpowiedniego zarządzania zależnościami - Obsługa rejestru jest zgodna z usługą Azure Container Registry, usługą Docker Hub i innymi rejestrami zgodnymi ze standardem OCI
Separacja umożliwia logikę wielokrotnego użytku, w której ta sama definicja grafu jest wdrażana z różnymi punktami końcowymi. Zapewnia niezależność środowiska, w którym programowanie, przemieszczanie i produkcja używają różnych źródeł danych. Obsługuje również wdrażanie modułowe, w którym można aktualizować konfiguracje punktów końcowych bez zmieniania logiki przetwarzania.
Aby uzyskać szczegółowe instrukcje dotyczące przekazywania definicji grafu i modułów WASM do rejestrów, zobacz Use WebAssembly with data flow graphs (Używanie zestawu WebAssembly z grafami przepływu danych). Aby uzyskać pełne przepływy pracy wdrażania, w tym konfigurację rejestru, uwierzytelnianie i testowanie, zobacz przykłady w tym przewodniku.
Parametry konfiguracji modułu
Definicje grafu mogą określać parametry środowiska uruchomieniowego dla operatorów WASM za pomocą konfiguracji modułów:
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
Te parametry są przekazywane do funkcji operatora init WASM w czasie wykonywania, umożliwiając konfigurację dynamiczną bez ponownego kompilowania modułów. Aby uzyskać szczegółowe przykłady uzyskiwania dostępu do tych parametrów i ich używania w kodzie Rust i Python, zobacz Parametry konfiguracji modułu.
Pełny przykład implementacji można znaleźć w module gałęzi, który demonstruje użycie parametrów dla logiki routingu warunkowego.