全部产品
Search
文档中心

CloudFlow:Variabel global

更新时间:Jun 29, 2025

Ketika data dalam alur kerja melewati beberapa status, setiap status menerima output dari status sebelumnya sebagai input. Mengoper variabel dari satu status ke status lain dapat mempersulit pengoperan data lintas status. CloudFlow menyediakan mekanisme variabel global untuk menyederhanakan proses ini dan meningkatkan efisiensi.

Batasan

Tabel berikut menjelaskan batasan pada variabel global. Jika nilai maksimum tidak memenuhi kebutuhan bisnis Anda, submit a ticket untuk menaikkan nilai tersebut.

Item

Nilai maksimum

Panjang kunci variabel

128 Bytes

Panjang nilai variabel

256 KiB

Catatan

Penting
  • $Output di GlobalConstructor mengacu pada output mentah dari status Tugas, bukan hasil konstruksi dari OutputConstructor.

  • $Global di OutputConstructor mengacu pada nilai mentah sebelum konstruksi yang dibuat oleh GlobalConstructor.

Batasan ukuran konteks

Ketika CloudFlow mengoper data menggunakan $Global, output dari InputConstructor dan OutputConstructor harus memenuhi batasan bahwa ukuran konteks tidak boleh lebih besar dari 64 KiB.

Kondisi balapan

Variabel global menyediakan ruang penyimpanan key-value global tingkat eksekusi, yang dapat dibaca dan ditulis di semua status selama siklus hidup eksekusi. Ketika logika paralel, seperti map dan parallel, ada dalam alur, data mungkin tertimpa antar status yang berbeda. Perhatikan saran berikut:

  1. Gunakan kunci yang berbeda untuk menulis variabel global ke cabang-cabang yang berbeda dari status Paralel.

  2. Jangan tulis variabel global ke status Map. Semua definisi iterasi Map sama. Oleh karena itu, nama variabel di GlobalConstructor sama. Nama variabel yang sama yang ditulis dari cabang berbeda akan saling menimpa.

  3. Eksekusi anak dalam mode terdistribusi tidak dapat mengakses variabel global dari eksekusi induk karena level Execution dari eksekusi anak dan induk berbeda.

Menggunakan variabel global untuk mengoper data

Variabel global menyediakan ruang penyimpanan key-value tingkat eksekusi. Setiap status dalam alur kerja dapat menulis data ke variabel global di akhir status untuk mengoper data ke status lain untuk dikonsumsi.

Pada gambar di atas, Status A menggunakan GlobalConstructor untuk menyimpan data yang sesuai dengan $Input.key_a, dan berasal dari input hulu ke variable_a dalam variabel global. Status A juga menggunakan GlobalConstructor untuk menyimpan data yang sesuai dengan $Output.key_b dalam output Status A ke variable_b dalam variabel global. Alur kerja menggunakan InputConstructor untuk mengekstrak nilai variable_a dan variable_b dalam variabel global dan meneruskan nilai-nilai tersebut ke Status Z sebagai input. Dengan cara ini, data dioper lintas status.

Input dan output alur kerja CloudFlow digunakan untuk secara eksplisit mengoper data antar tugas guna memastikan independensi dan kejelasan tugas. Variabel global digunakan untuk mempertahankan status berbagi lintas tugas atau konfigurasi sumber daya global. Input, output, dan variabel global digunakan bersama-sama untuk mencapai desain sistem yang efisien dan fleksibel. Gambar di atas membandingkan InputConstructor, OutputConstructor, dan GlobalConstructor. Penjelasan:

  • InputConstructor($Context,$Global), OutputConstructor($Context,$Global), dan GlobalConstructor($Context,$Global) menunjukkan bahwa InputConstructor, OutputConstructor, dan GlobalConstructor dapat merujuk $Context dan $Global untuk mengekstrak informasi.

  • $Global=Merge($Global,GlobalConstructor($Context,$Global)) menunjukkan bahwa variabel yang dibangun oleh konstruktor global digabungkan dengan variabel yang ada di $Global, lalu semua variabel disimpan di $Global untuk memperbarui variabel global bersama.

  • $Output adalah hasil dari pemanggilan Tugas. Jika pemanggilan dilakukan dalam mode panggilan balik asinkron, nilai $Output adalah hasil dari panggilan balik.

  • $Global menunjukkan variabel global, yang dapat diakses selama periode eksekusi alur kerja.

Pembuatan dan pembaruan variabel global

Variabel global dibuat dan diperbarui menggunakan GlobalConstructor. Ketika eksekusi status berakhir, GlobalConstructor dieksekusi. Definisi mesin status berikut menunjukkan cara menggunakan GlobalConstructor.

Type: StateMachine
Name: MyWorkFlow
SpecVersion: v1
StartAt: InvokeFunction
States:
  - Type: Task
    Name: InvokeFunction
    Action: FC:InvokeFunction
    TaskMode: RequestComplete
    Parameters:
      resourceArn: >-
        acs:fc:cn-hangzhou:123456:functions/myFunction/LATEST
      invocationType: Sync
      body.$: $Input 
    GlobalConstructor:
      InvokeFunctionResultHeader.$: $Output.Header
      InvokeFunctionResultBody.$: $Output.Body
    End: true
  • Struktur data GlobalConstructor adalah Map[String]Any.

  • InvokeFunctionResultHeader.$: $Output.Header dan InvokeFunctionResultBody.$: $Output.Body menunjukkan bahwa header dan body dari nilai fungsi yang dikembalikan disimpan secara terpisah di kunci InvokeFunctionResultHeader dan InvokeFunctionResultBody dalam variabel global.

Pembacaan variabel global

CloudFlow mendefinisikan kata kunci $Global untuk membaca variabel global. Di semua skenario yang mendukung konstruksi ekspresi, ruang penyimpanan global dari eksekusi saat ini dapat diakses menggunakan $Global. Status dapat mengekstrak nilai dari ruang penyimpanan global menggunakan kunci eksplisit. Definisi mesin status berikut menunjukkan cara menggunakan $Global.

Type: StateMachine
Name: MyWorkFlow
SpecVersion: v1
StartAt: InvokeFunction1
States:
  - Type: Task
    Name: InvokeFunction1
    Action: FC:InvokeFunction
    TaskMode: RequestComplete
    Parameters:
      invocationType: Sync
      resourceArn: acs:fc:cn-hangzhou:123456:functions/myFunction/LATEST
    GlobalConstructor:
      InvokeFunctionPayload.$: $Output.Body
    Next: InvokeFunction
  - Type: Task
    Name: InvokeFunction
    Action: FC:InvokeFunction
    TaskMode: RequestComplete
    Parameters:
      resourceArn: acs:fc:cn-hangzhou:123456:functions/myFunction/LATEST
      invocationType: Sync
      body.$: $Global.InvokeFunctionPayload
    OutputConstructor:
      demo.$: $Global
    End: true
  • Ketika status dieksekusi, fungsi InvokeFunction mengeksekusi GlobalConstructor untuk menyimpan body dari nilai kembali InvokeFunction1 di kunci InvokeFunctionPayload dalam variabel global.

  • InvokeFunction menggunakan ekspresi $Global.InvokeFunctionPayload di Parameters untuk mengekstrak nilai dari kunci InvokeFunctionPayload dari ruang penyimpanan global dan meneruskan nilai tersebut sebagai bidang body ke status Task untuk dieksekusi.

  • InvokeFunction dapat menggunakan OutputConstructor untuk melihat nilai-nilai di $Global. image