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
$OutputdiGlobalConstructormengacu pada output mentah dari status Tugas, bukan hasil konstruksi dariOutputConstructor.$GlobaldiOutputConstructormengacu pada nilai mentah sebelum konstruksi yang dibuat olehGlobalConstructor.
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:
Gunakan kunci yang berbeda untuk menulis variabel global ke cabang-cabang yang berbeda dari status Paralel.
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.
Eksekusi anak dalam mode terdistribusi tidak dapat mengakses variabel global dari eksekusi induk karena level
Executiondari 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), danGlobalConstructor($Context,$Global)menunjukkan bahwa InputConstructor, OutputConstructor, dan GlobalConstructor dapat merujuk$Contextdan$Globaluntuk 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$Globaluntuk memperbarui variabel global bersama.$Outputadalah hasil dari pemanggilan Tugas. Jika pemanggilan dilakukan dalam mode panggilan balik asinkron, nilai$Outputadalah hasil dari panggilan balik.$Globalmenunjukkan 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: trueStruktur data
GlobalConstructoradalah Map[String]Any.InvokeFunctionResultHeader.$: $Output.HeaderdanInvokeFunctionResultBody.$: $Output.Bodymenunjukkan 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
InvokeFunctionmengeksekusiGlobalConstructoruntuk menyimpan body dari nilai kembaliInvokeFunction1di kunciInvokeFunctionPayloaddalam variabel global.InvokeFunctionmenggunakan ekspresi$Global.InvokeFunctionPayloaddiParametersuntuk mengekstrak nilai dari kunciInvokeFunctionPayloaddari ruang penyimpanan global dan meneruskan nilai tersebut sebagai bidangbodyke statusTaskuntuk dieksekusi.InvokeFunctiondapat menggunakan OutputConstructor untuk melihat nilai-nilai di$Global.