Menjalankan alur kerja yang mengeksekusi alur kerja lain secara paralel

Tutorial ini menunjukkan cara membuat dan menjalankan alur kerja induk yang menjalankan beberapa alur kerja turunan secara paralel.

Dalam diagram berikut, empat eksekusi paralel alur kerja turunan dipanggil. Hal ini memungkinkan alur kerja induk memproses data di cabang paralel, dan mengurangi waktu eksekusi secara keseluruhan. Alur kerja induk menunggu semua eksekusi alur kerja turunan selesai sebelum menampilkan ringkasan eksekusi yang berhasil dan gagal, sehingga menyederhanakan deteksi error.

Alur kerja induk memanggil iterasi paralel dari alur kerja turunan

Membuat dan men-deploy alur kerja turunan

Alur kerja turunan dapat menerima dan memproses data dari alur kerja induk. Alur kerja turunan menunjukkan hal ini dengan melakukan hal berikut:

  • Menerima bilangan bulat sebagai argumen
  • Tidur selama 10 detik untuk menyimulasikan beberapa pemrosesan
  • Menampilkan indikator (berdasarkan apakah bilangan bulat adalah bilangan ganjil atau genap) untuk menyimulasikan keberhasilan atau kegagalan eksekusi alur kerja

Konsol

  1. Di konsol Google Cloud , buka halaman Workflows.

    Buka Workflows

  2. Klik Buat.

  3. Masukkan nama, workflow-child, untuk alur kerja baru.

  4. Dalam daftar Region, pilih us-central1.

  5. Pilih Service account yang Anda buat sebelumnya.

  6. Klik Berikutnya.

  7. Di editor alur kerja, masukkan definisi berikut untuk alur kerja Anda:

    main:
      params: [args]
      steps:
        - init:
            assign:
              - iteration : ${args.iteration}
        - wait:
            call: sys.sleep
            args:
                seconds: 10
        - check_iteration_even_or_odd:
            switch:
              - condition: ${iteration % 2 == 0}
                next: raise_error
        - return_message:
            return: ${"Hello world"+iteration}
        - raise_error:
            raise: ${"Error with iteration "+iteration}
  8. Klik Deploy.

gcloud

  1. Buat file kode sumber untuk alur kerja Anda:

    touch workflow-child.yaml
  2. Buka file kode sumber Anda di editor teks dan salin alur kerja berikut ke file.

    main:
      params: [args]
      steps:
        - init:
            assign:
              - iteration : ${args.iteration}
        - wait:
            call: sys.sleep
            args:
                seconds: 10
        - check_iteration_even_or_odd:
            switch:
              - condition: ${iteration % 2 == 0}
                next: raise_error
        - return_message:
            return: ${"Hello world"+iteration}
        - raise_error:
            raise: ${"Error with iteration "+iteration}
  3. Deploy alur kerja:

    gcloud workflows deploy workflow-child \
        --source=workflow-child.yaml \
        --location=us-central1 \
        --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

    Ganti SERVICE_ACCOUNT_NAME dengan nama akun layanan yang Anda buat sebelumnya.

Membuat dan men-deploy alur kerja induk

Alur kerja induk menjalankan beberapa cabang alur kerja turunan menggunakan loop for paralel.

  1. Salin kode sumber untuk definisi alur kerja. Terdiri dari bagian berikut:

    1. Peta digunakan untuk menyimpan hasil eksekusi alur kerja turunan. Untuk mengetahui informasi selengkapnya, lihat Maps.

      main:
        steps:
          - init:
              assign:
                - execution_results: {} # results from each execution
                - execution_results.success: {} # successful executions saved under 'success' key
                - execution_results.failure: {} # failed executions saved under 'failure' key
    2. Loop for dijalankan secara paralel untuk memanggil alur kerja turunan. Untuk mengetahui informasi selengkapnya, lihat Langkah paralel dan Iterasi.

      - execute_child_workflows:
          parallel:
            shared: [execution_results]
            for:
              value: iteration
              in: [1, 2, 3, 4]
              steps:
                  - iterate:
    3. Alur kerja turunan dipanggil menggunakan konektor. Setiap iterasi alur kerja turunan meneruskan argumen iteration. Alur kerja induk menunggu dan menyimpan hasil setiap eksekusi alur kerja turunan. Untuk mengetahui informasi selengkapnya, lihat Konektor Workflows Execution API dan Argumen runtime.

      try:
        steps:
          - execute_child_workflow:
              call: googleapis.workflowexecutions.v1.projects.locations.workflows.executions.run
              args:
                workflow_id: workflow-child
                #location: ...
                #project_id: ...
                argument:
                  iteration: ${iteration}
              result: execution_result
          - save_successful_execution:
              assign:
                - execution_results.success[string(iteration)]: ${execution_result}
      except:
          as: e
          steps:
            - save_failed_execution:
                assign:
                  - execution_results.failure[string(iteration)]: ${e}
    4. Hasil eksekusi akan ditampilkan. Untuk mengetahui informasi selengkapnya, lihat Menyelesaikan eksekusi alur kerja.

      - return_execution_results:
          return: ${execution_results}
  2. Deploy alur kerja:

    Konsol

    1. Di konsol Google Cloud , buka halaman Workflows:

      Buka Workflows

    2. Klik Buat.

    3. Masukkan nama, workflow-parent, untuk alur kerja baru.

    4. Dalam daftar Region, pilih us-central1.

    5. Pilih Service account yang Anda buat sebelumnya.

    6. Klik Berikutnya.

    7. Di editor alur kerja, tempelkan definisi untuk alur kerja induk.

    8. Klik Deploy.

    gcloud

    1. Buat file kode sumber untuk alur kerja Anda:

      touch workflow-parent.yaml
    2. Buka file kode sumber Anda di editor teks dan tempel definisi untuk alur kerja induk.

    3. Deploy alur kerja:

      gcloud workflows deploy workflow-parent \
          --source=workflow-parent.yaml \
          --location=us-central1 \
          --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

      Ganti SERVICE_ACCOUNT_NAME dengan nama akun layanan yang Anda buat sebelumnya.

Menjalankan alur kerja induk

Jalankan alur kerja induk sehingga pemanggilan alur kerja turunan berjalan secara paralel. Eksekusi akan memerlukan waktu sekitar 10 detik untuk diselesaikan.

Konsol

  1. Di konsol Google Cloud , buka halaman Workflows:

    Buka Workflows

  2. Di halaman Workflows, klik alur kerja workflow-parent untuk membuka halaman detailnya.

  3. Di halaman Workflow details, klik Execute.

  4. Klik Execute lagi.

  5. Lihat hasil alur kerja di panel Output.

    Hasilnya akan mirip dengan berikut, yang menunjukkan error pada iterasi 2 dan 4, serta keberhasilan pada iterasi 1 dan 3.

    "failure": {
      "2": {
        "message": "Execution failed or cancelled.",
        "operation": {
          "argument": "{\"iteration\":2}",
          "duration": "10.157992541s",
          "endTime": "2023-07-11T13:13:13.028424329Z",
          "error": {
            "context": "RuntimeError: \"Error with iteration 2\"\nin step \"raise_error\", routine \"main\", line: 18",
            "payload": "\"Error with iteration 2\"",
    ...
      "4": {
        "message": "Execution failed or cancelled.",
        "operation": {
          "argument": "{\"iteration\":4}",
          "duration": "10.157929734s",
          "endTime": "2023-07-11T13:13:13.061289142Z",
          "error": {
            "context": "RuntimeError: \"Error with iteration 4\"\nin step \"raise_error\", routine \"main\", line: 18",
            "payload": "\"Error with iteration 4\"",
    ...
    "success": {
      "1": "Hello world1",
      "3": "Hello world3"

gcloud

Menjalankan alur kerja:

gcloud workflows run workflow-parent \
    --location=us-central1

Hasilnya akan mirip dengan berikut, yang menunjukkan error pada iterasi 2 dan 4, serta keberhasilan pada iterasi 1 dan 3.

Waiting for execution [06c753e4-6947-4c62-ac0b-2a9d53fb1b8f] to complete...done.
argument: 'null'
duration: 14.065415004s
endTime: '2023-07-11T12:50:43.929023883Z'
name: projects/386837416586/locations/us-central1/workflows/workflow-parent/executions/06c753e4-6947-4c62-ac0b-2a9d53fb1b8f
result: '{"failure":{"2":{"message":"Execution failed or cancelled.","operation":{"argument":"{\"iteration\":2}","duration":"10.143718070s","endTime":"2023-07-11T12:50:40.673209821Z","error":{"context":"RuntimeError:
...
"Error with iteration 2\"\nin step \"raise_error\", routine \"main\", line: 18","payload":"\"Error
...
"Error with iteration 4\"\nin step \"raise_error\", routine \"main\", line: 18","payload":"\"Error
...
"success":{"1":"Hello world1","3":"Hello world3"}}'
startTime: '2023-07-11T12:50:29.863608879Z'
state: SUCCEEDED

Anda telah berhasil membuat dan men-deploy alur kerja yang memanggil alur kerja turunan, menjalankan empat iterasi alur kerja turunan di cabang paralel, dan menampilkan indikator keberhasilan atau kegagalan untuk setiap eksekusi alur kerja turunan.