Veri akışı grafikleri ve bağlayıcıları için WebAssembly (WASM) graf tanımlarını yapılandırma

Modüllerinizin veri akışlarına ve bağlayıcılara nasıl bağlandığını tanımladığından graf tanımları WASM geliştirmenin merkezinde yer alır. Graf tanımları ile veri akışı grafikleri veya bağlayıcıları arasındaki ilişkiyi anlamak, etkili bir şekilde geliştirmenize yardımcı olur.

Önkoşullar

Bu makale YAML graf tanımlarını oluşturmaya ve yapılandırmaya odaklanır. Veri akışı grafiklerini dağıtma ve test etme hakkında bilgi için bkz. WebAssembly (WASM) modüllerini ve graf tanımlarını dağıtma.

Önemli

Veri akışı grafikleri şu anda yalnızca MQTT, Kafka ve OpenTelemetry uç noktalarını desteklemektedir. Veri Gölü, Microsoft Fabric OneLake, Azure Veri Gezgini ve Yerel Depolama gibi diğer uç nokta türleri desteklenmez. Daha fazla bilgi için bkz. Bilinen sorunlar.

Önemli

Şu anda özel işleme için grafik tanımlarını destekleyen tek bağlayıcı HTTP/REST bağlayıcıdır.

Graf tanımı yapısı

Graf tanımları, graf YAML yapısını doğrulayan ve uyumluluğu sağlayan resmi bir JSON şemasını izler. Yapılandırma şunları içerir:

  • API ve ana bilgisayar kitaplığı sürüm uyumluluğu için modül gereksinimleri
  • Çalışma zamanı parametreleri ve işleç özelleştirmesi için modül yapılandırmaları
  • İş akışınızda işleme düğümlerini tanımlayan işlemler
  • İşlemler arasında veri akışı yönlendirmesi belirten bağlantılar

Önemli

Graf $schema meta verilerindeki alan, schemastore.org üzerinde barındırılan grafik tanımı şemasına başvurur. Bu şema, graf YAML dosyanızın yapısını doğrular (işlemler, bağlantılar, modül gereksinimleri). Bu bir ileti yükü şeması değildir.

İleti yüklerini doğrulamanız gerekiyorsa WASM modüllerinizin bu doğrulama mantığını kendileri işlemesi gerekir. Yük şemalarını Azure IoT İşlemleri şema kayıt defterine yükleyebilir düğüm bağlantılarında bunlara başvurabilirsiniz, ancak veri akışı çalışma zamanı yük doğrulamayı otomatik olarak zorlamaz. Şema başvurusu, şemayı yalnızca modül kodunuz için kullanılabilir hale getirir.

Temel grafik yapısı

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

Sürüm uyumluluğu

bölümü moduleRequirements , anlamsal sürüm oluşturma kullanılarak uyumluluğu sağlar:

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"

Tavsiye

Özellik ile bant içi ONNX çıkarımını wasi-nn etkinleştirme yönergeleri için bkz. WebAssembly veri akışı grafiklerinde ONNX çıkarımı çalıştırma.

Örnek 1: Basit graf tanımı

simple graf tanımı sıcaklık verilerini Fahrenheit'ten Santigrat'a dönüştüren temel bir üç aşamalı işlem hattı gösterir:

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: "azure-samples/explore-iot-operations/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"

Adım adım dağıtım yönergeleri için bkz. WebAssembly (WASM) modüllerini ve graf tanımlarını dağıtma. Bu örneği kullanan bir veri akışını denemek için bkz. Örnek 1: Bir WASM modülüyle temel dağıtım.

Basit graf nasıl çalışır?

Bu grafik basit bir veri işleme işlem hattı oluşturur:

  1. Kaynak işlemi: Veri akışının kaynak uç noktasından sıcaklık verilerini alır
  2. Eşleme işlemi: Verileri sıcaklık WASM modülüyle işler. Düz bir kayıt defteri düzeni için temperature:1.0.0 kullanın veya iç içe bir düzen için depo yolunu ekleyin; örneğin azure-samples/explore-iot-operations/temperature:1.0.0.
  3. Sink işlemi: Dönüştürülen verileri veri akışının hedef uç noktasına gönderir

temperature modülü standart (F - 32) × 5/9 = C formülünü kullanarak Fahrenheit'i Santigrat'a dönüştürür.

Giriş biçimi:

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

Çıkış biçimi:

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

Örnek 2: Karmaşık graf tanımı

complex graf tanımı gelişmiş analizle sıcaklık, nem ve görüntü verilerini işleyen gelişmiş bir çok sensörlü işleme iş akışını gösterir:

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
  - name: module-temperature/filter
    parameters:
      temperature_lower_bound:
        name: temperature_lower_bound
        description: "Minimum valid temperature in Celsius (default: -40)"
      temperature_upper_bound:
        name: temperature_upper_bound
        description: "Maximum valid temperature in Celsius (default: 3422)"
operations:
  - operationType: "source"
    name: "source"

  - operationType: delay
    name: module-window/delay
    module: "azure-samples/explore-iot-operations/window:1.0.0"
  - operationType: "map"
    name: "module-format/map"
    module: "azure-samples/explore-iot-operations/format:1.0.0"
  - operationType: map
    name: module-snapshot/map
    module: "azure-samples/explore-iot-operations/snapshot:1.0.0"
  - operationType: branch
    name: module-snapshot/branch
    module: "azure-samples/explore-iot-operations/snapshot:1.0.0"
  - operationType: accumulate
    name: module-snapshot/accumulate
    module: "azure-samples/explore-iot-operations/snapshot:1.0.0"
  - operationType: map
    name: module-temperature/map
    module: "azure-samples/explore-iot-operations/temperature:1.0.0"
  - operationType: branch
    name: module-temperature/branch
    module: "azure-samples/explore-iot-operations/temperature:1.0.0"
  - operationType: filter
    name: module-temperature/filter
    module: "azure-samples/explore-iot-operations/temperature:1.0.0"
  - operationType: accumulate
    name: module-temperature/accumulate
    module: "azure-samples/explore-iot-operations/temperature:1.0.0"
  - operationType: accumulate
    name: module-humidity/accumulate
    module: "azure-samples/explore-iot-operations/humidity:1.0.0"
  - operationType: concatenate
    name: concatenate1
    module:
  - operationType: accumulate
    name: module-collection/accumulate
    module: "azure-samples/explore-iot-operations/collection:1.0.0"
  - operationType: map
    name: module-enrichment/map
    module: "azure-samples/explore-iot-operations/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

Adım adım dağıtım yönergeleri için bkz. WebAssembly (WASM) modüllerini ve graf tanımlarını dağıtma. Bu örneği kullanan bir veri akışını denemek için bkz . Örnek 2: Karmaşık graf dağıtma.

Karmaşık graf nasıl çalışır?

Karmaşık grafik üç veri akışını işler ve bunları zenginleştirilmiş sensör analizinde birleştirir:

Birden çok modül içeren karmaşık bir veri akışı grafı örneğini gösteren diyagram.

Diyagramda gösterildiği gibi, veri tek bir kaynaktan birden çok işlem aşaması aracılığıyla akar:

  1. Pencere modülü: Zaman tabanlı işleme için gelen verileri geciktirme
  2. Dal işlemi: Verileri içerik türüne göre yönlendirir (algılayıcı verileri veya anlık görüntüler)
  3. Sıcaklık işleme yolu:
    • Fahrenheit'i Santigrat'a dönüştürür
    • Geçersiz okumaları filtreler
    • Zaman pencereleri içindeki istatistiksel özetleri hesaplar
  4. Nem işleme yolu:
    • İstatistiksel analiz ile nem ölçümlerini biriktirir
  5. Görüntü işleme yolu:
    • görüntü verilerini işlenmek üzere biçimlendir
    • Kamera anlık görüntülerinde nesne algılama gerçekleştirir
  6. Son toplama:
    • İşlenen tüm veri akışlarını birleştirir
    • Çok sensörlü sonuçları toplar
    • Meta veriler ve aşırıperatür uyarıları ekler

Graf, Rust örneklerinden özel modüller kullanır:

  • Zamana bağlı işleme gecikmeleri için pencere modülü
  • Dönüştürme, filtreleme ve istatistiksel analiz için sıcaklık modülleri
  • Çevresel veri işleme için nem modülü
  • Görüntü verileri yönlendirme ve nesne algılama için anlık görüntü modülleri
  • İşleme için görüntü hazırlığı için biçim modülü
  • Çok sensörlü veri toplama için toplama modülü
  • Meta veri ekleme ve uyarı oluşturma için zenginleştirme modülü

Dal işlemleri farklı algılayıcı girişlerinin paralel işlenmesini sağlayarak grafın tek bir iş akışı içinde birden çok veri türünü verimli bir şekilde işlemesini sağlar.

Graf tanımları veri akışlarına nasıl dönüşür?

Graf tanımları ve Azure IoT İşlemleri veri akışı graflarının ilişkisi şöyledir:

YAML dosyanız, kaynak/havuz işlemleriyle iç işleme mantığını soyut uç noktalar olarak tanımlar. Bu, grafik tanımı nesnesi olur. Başvuruda bulunan modüller, gerçek işleme işleçlerini WASM modülleri olarak uygular. Hem grafik tanımları hem de WASM modülleri, kayıt defteri depolaması için OCI yapıtları olarak kapsayıcı kayıt defterine (Azure Container Registry gibi) yüklenir.

Azure Resource Manager veya Kubernetes kaynağı, grafik tanımını "sarar" ve veri akışı grafik kaynağı olarak gerçek uç noktalara bağlar. Çalışma zamanı dağıtımı sırasında veri akışı altyapısı yapıtları kayıt defterinden çeker ve dağıtır. Uç nokta eşlemesi için, grafiğinizdeki soyut kaynak/havuz işlemleriniz gerçek MQTT başlıklarına, Azure Event Hubs'a veya diğer veri kaynaklarına bağlanır.

Örneğin, bu diyagram graf tanımları, WASM modülleri ve veri akışı grafikleri arasındaki ilişkiyi gösterir:

Grafik tanımları, WASM modülleri ve veri akışı grafikleri arasındaki ilişkiyi gösteren diyagram.

Veri akışı graflarını yapılandırma hakkında daha fazla bilgi edinmek için bkz. Veri akışı graflarıyla WebAssembly kullanma.

Kayıt Defteri Dağıtımı

Veri akışı grafiklerinin bunlara başvurabilmesi için önce hem grafik tanımlarının hem de WASM modüllerinin Open Container Initiative (OCI) yapıtları olarak kapsayıcı kayıt defterine yüklenmesi gerekir:

  • Graf tanımları, medya türüne sahip OCI yapıtları olarak paketlenir application/vnd.oci.image.config.v1+json
  • WASM modülleri, derlenmiş WebAssembly ikili dosyasını içeren OCI yapıtları olarak paketlenir
  • Düzgün bağımlılık yönetimi için anlamsal sürüm oluşturma (, gibimy-graph:1.0.0temperature-converter:2.1.0) kullanma
  • Kayıt defteri desteği Azure Container Registry, Docker Hub ve diğer OCI uyumlu kayıt defterleriyle uyumludur

Ayrım, aynı graf tanımının farklı uç noktalarla dağıtıldığı yeniden kullanılabilir mantığı etkinleştirir. Geliştirme, hazırlama ve üretimin farklı veri kaynaklarını kullandığı ortam bağımsızlığı sağlar. Ayrıca işlem mantığını değiştirmeden uç nokta yapılandırmalarını güncelleştirdiğiniz modüler dağıtımı da destekler.

Graf tanımlarını ve WASM modüllerini kayıt defterlerine yükleme hakkında ayrıntılı yönergeler için bkz. WebAssembly (WASM) modüllerini ve graf tanımlarını dağıtma.

Modül yapılandırma parametreleri

Graf tanımları, modül yapılandırmaları aracılığıyla WASM işleçleri için çalışma zamanı parametrelerini belirtebilir. Bu parametreler çalışma zamanında operatörünüzün init işlevine geçirilir ve modülleri yeniden derlemeden dinamik yapılandırmayı etkinleştirir.

Önemli

WASM işleci yapılandırma parametreleri gerektiriyorsa ve bunları içinde moduleConfigurationssağlamazsanız, işleç çalışma zamanında başarısız olabilir. Gerekli parametreler için her zaman operatörün belgelerine veya kaynak koduna bakın.

Aşağıdaki örnek, karmaşık grafikte kullanılan sıcaklık örneklemesi için modül yapılandırmalarını göstermektedir.

moduleConfigurations:
  - name: module-temperature/map
    parameters:
      key1:
        name: key1
        description: "Example parameter passed to the map operator's init function"
  - name: module-temperature/filter
    parameters:
      temperature_lower_bound:
        name: temperature_lower_bound
        description: "Minimum valid temperature in Celsius (default: -40)"
      temperature_upper_bound:
        name: temperature_upper_bound
        description: "Maximum valid temperature in Celsius (default: 3422)"

name Her yapılandırma girdisindeki alan, grafın operations bölümünde tanımlanan işleç adıyla eşleşmelidir. parameters altındaki her parametre, operatörünüzün configuration.properties işlevinin aldığı init listesinde bir anahtar-değer çiftine dönüşür.

Rust ve Python kodunuzda bu parametrelere erişme ve bunları kullanma hakkında ayrıntılı örnekler için bkz. Module yapılandırma parametreleri.

Tam bir uygulama örneği için, koşullu yönlendirme mantığı için parametre kullanımını gösteren branch modülü bakın.

Sonraki Adımlar