All Products
Search
Document Center

CloudFlow:Global IO, variabel global

Last Updated:Jun 21, 2026

Saat data dalam suatu alur kerja melewati beberapa keadaan, setiap keadaan menerima output dari keadaan sebelumnya sebagai input. Mengoper variabel dari satu keadaan ke keadaan berikutnya mempersulit pengiriman data lintas keadaan. CloudFlow menyediakan mekanisme variabel global untuk menyederhanakan proses ini dan meningkatkan efisiensi.

Batasan

Jika batasan ini tidak memenuhi kebutuhan Anda, Anda dapat mengajukan Tiket.

Item

Nilai maksimum

Panjang kunci variabel

128 Byte

Panjang nilai variabel

256 KiB

Catatan

Penting
  • $Output dalam GlobalConstructor mengacu pada output mentah dari keadaan Task, bukan hasil konstruksi dari OutputConstructor.

  • $Global dalam OutputConstructor mengacu pada nilai mentah sebelum konstruksi yang dilakukan oleh GlobalConstructor.

Batasan ukuran konteks

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

Kondisi race

Variabel global menyediakan ruang penyimpanan kunci-nilai tingkat eksekusi yang dapat dibaca dan ditulis di semua keadaan sepanjang siklus hidup eksekusi. Jika terdapat logika paralel seperti map dan parallel dalam suatu alur, data dapat saling menimpa antar keadaan yang berbeda. Perhatikan saran berikut:

  1. Gunakan kunci yang berbeda untuk menulis variabel global ke cabang-cabang yang berbeda dalam keadaan Parallel.

  2. Jangan menulis variabel global ke dalam keadaan Map. Semua definisi iterasi Map identik, sehingga nama variabel dalam GlobalConstructor juga sama. Penulisan dengan nama variabel yang sama dari cabang berbeda akan saling menimpa satu sama lain.

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

Gunakan variabel global untuk mengirimkan data

Variabel global menyediakan ruang penyimpanan kunci-nilai tingkat eksekusi. Setiap keadaan dalam suatu alur kerja dapat menulis data ke variabel global pada akhir eksekusi keadaan tersebut untuk diteruskan ke keadaan lain.

Pada gambar di atas, State A menggunakan GlobalConstructor untuk menyimpan data yang sesuai dengan $Input.key_a—berasal dari input hulu—ke dalam variable_a pada variabel global. State A juga menggunakan GlobalConstructor untuk menyimpan data yang sesuai dengan $Output.key_b dari output State A ke dalam variable_b pada variabel global. Alur kerja kemudian menggunakan InputConstructor untuk mengekstrak nilai variable_a dan variable_b dari variabel global dan meneruskannya ke State Z sebagai input. Dengan cara ini, data dapat dikirimkan lintas keadaan.

Input dan output alur kerja CloudFlow digunakan untuk mengirimkan data secara eksplisit antar task guna memastikan independensi dan kejelasan task. Variabel global digunakan untuk mempertahankan status berbagi lintas task atau konfigurasi resource 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 mereferensi $Context dan $Global untuk mengekstrak informasi.

  • $Global=Merge($Global,GlobalConstructor($Context,$Global)) menunjukkan bahwa variabel yang dikonstruksi oleh GlobalConstructor digabungkan dengan variabel yang sudah ada dalam $Global, lalu seluruh variabel disimpan kembali ke $Global untuk memperbarui variabel global bersama.

  • $Output adalah hasil panggilan Task. Jika panggilan dilakukan dalam mode callback asinkron, nilai $Output adalah hasil dari callback tersebut.

  • Pada diagram, $Global merepresentasikan variabel global yang dapat diakses sepanjang eksekusi alur kerja.

Pembuatan dan pembaruan variabel global

Variabel global dibuat dan diperbarui menggunakan GlobalConstructor. Saat eksekusi suatu keadaan berakhir, GlobalConstructor dieksekusi. Definisi mesin keadaan 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 berupa Map[String]Any.

  • InvokeFunctionResultHeader.$: $Output.Header dan InvokeFunctionResultBody.$: $Output.Body menunjukkan bahwa header dan body dari nilai fungsi yang dikembalikan disimpan secara terpisah ke 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. Keadaan dapat mengekstrak nilai dari ruang penyimpanan global dengan menggunakan kunci eksplisit. Definisi mesin keadaan 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
  • Saat dieksekusi, fungsi InvokeFunction akan menjalankan GlobalConstructor untuk menyimpan nilai kembali dari InvokeFunction1 ke dalam kunci InvokeFunctionPayload pada variabel global.

  • InvokeFunction menggunakan ekspresi $Global.InvokeFunctionPayload dalam Parameters untuk mengekstrak nilai kunci InvokeFunctionPayload dari ruang penyimpanan global dan meneruskannya sebagai bidang body ke keadaan Task untuk dieksekusi.

  • Keadaan InvokeFunction menggunakan OutputConstructor untuk melihat nilai dalam $Global. Setelah eksekusi selesai, panel output alur kerja menampilkan nilai InvokeFunctionPayload sebagai "hello world\n", yang mengonfirmasi bahwa variabel global berhasil dibaca.