Menyesuaikan Penskalaan Otomatis Horizontal untuk pipeline streaming

Dalam pipeline streaming yang memiliki volume data input yang tinggi, umumnya ada konsekuensi antara biaya dan latensi. Untuk mempertahankan latensi rendah, Dataflow harus menambahkan pekerja saat volume traffic meningkat. Faktor lainnya adalah seberapa cepat pipeline harus meningkatkan atau menurunkan skala sebagai respons terhadap perubahan kecepatan data input.

Penskala otomatis Dataflow memiliki setelan default yang cocok untuk banyak beban kerja. Namun, Anda mungkin ingin menyesuaikan perilaku ini untuk skenario khusus Anda. Misalnya, latensi rata-rata yang lebih tinggi mungkin dapat diterima untuk mengurangi biaya, atau Anda mungkin ingin Dataflow meningkatkan skala lebih cepat sebagai respons terhadap lonjakan traffic.

Untuk mengoptimalkan Penskalaan Otomatis Horizontal, Anda dapat menyesuaikan parameter berikut:

Menetapkan rentang penskalaan otomatis

Saat membuat tugas streaming baru, Anda dapat menetapkan jumlah awal pekerja dan jumlah maksimum pekerja. Untuk melakukannya, tentukan opsi pipeline berikut:

Java

  • --numWorkers: jumlah pekerja awal yang tersedia saat pipeline mulai berjalan
  • --maxNumWorkers: jumlah maksimum pekerja yang tersedia untuk pipeline Anda

Python

  • --num_workers: jumlah pekerja awal yang tersedia saat pipeline mulai berjalan
  • --max_num_workers: jumlah maksimum pekerja yang tersedia untuk pipeline Anda

Go

  • --num_workers: jumlah pekerja awal yang tersedia saat pipeline mulai berjalan
  • --max_num_workers: jumlah maksimum pekerja yang tersedia untuk pipeline Anda

Untuk tugas streaming yang menggunakan Streaming Engine, flag --maxNumWorkers bersifat opsional. Defaultnya adalah 100. Untuk tugas streaming yang tidak menggunakan Streaming Engine, --maxNumWorkers diperlukan saat Penskalaan Otomatis Horizontal diaktifkan.

Nilai awal --maxNumWorkers juga menentukan jumlah Persistent Disk yang dialokasikan untuk tugas. Pipeline di-deploy dengan kumpulan Persistent Disk tetap, yang jumlahnya sama dengan --maxNumWorkers. Selama streaming, Persistent Disk didistribusikan ulang sehingga setiap pekerja mendapatkan jumlah disk terpasang yang sama.

Jika Anda menetapkan --maxNumWorkers, pastikan nilai menyediakan disk yang cukup untuk pipeline Anda. Pertimbangkan pertumbuhan di masa mendatang saat menetapkan nilai awal. Untuk mengetahui informasi tentang performa Persistent Disk, baca Mengonfigurasi Persistent Disk dan VM. Dataflow menagih biaya penggunaan Persistent Disk dan memiliki kuota Compute Engine, termasuk kuota Persistent Disk.

Secara default, jumlah minimum pekerja adalah 1 untuk tugas streaming yang menggunakan Streaming Engine, dan (maxNumWorkers/15), dibulatkan, untuk tugas yang tidak menggunakan Streaming Engine.

Memperbarui rentang penskalaan otomatis

Untuk tugas yang menggunakan Streaming Engine, Anda dapat menyesuaikan jumlah pekerja minimum dan maksimum, tanpa menghentikan atau mengganti tugas. Untuk menyesuaikan nilai ini, gunakan update tugas yang sedang berlangsung. Perbarui opsi pekerjaan berikut:

  • --min-num-workers: jumlah pekerja minimum.
  • --max-num-workers: jumlah pekerja maksimum.

gcloud

Gunakan perintah gcloud dataflow jobs update-options:

gcloud dataflow jobs update-options \
  --region=REGION \
  --min-num-workers=MINIMUM_WORKERS \
  --max-num-workers=MAXIMUM_WORKERS \
  JOB_ID

Ganti kode berikut:

  • REGION: ID region dari endpoint regional tugas
  • MINIMUM_WORKERS: jumlah minimum instance Compute Engine
  • MAXIMUM_WORKERS: jumlah maksimum instance Compute Engine
  • JOB_ID: ID tugas yang akan diperbarui

Anda juga dapat mengupdate --min-num-workers dan --max-num-workers satu per satu.

REST

Gunakan projects.locations.jobs.update metode:

PUT https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/REGION/jobs/JOB_ID?updateMask=runtime_updatable_params.max_num_workers,runtime_updatable_params.min_num_workers
{
  "runtime_updatable_params": {
    "min_num_workers": MINIMUM_WORKERS,
    "max_num_workers": MAXIMUM_WORKERS
  }
}

Ganti kode berikut:

  • PROJECT_ID: ID project Google Cloud untuk tugas Dataflow
  • REGION: ID region dari endpoint regional tugas
  • JOB_ID: ID tugas yang akan diperbarui
  • MINIMUM_WORKERS: jumlah minimum instance Compute Engine
  • MAXIMUM_WORKERS: jumlah maksimum instance Compute Engine

Anda juga dapat memperbarui min_num_workers dan max_num_workers satu per satu. Tentukan parameter yang akan diperbarui dalam parameter kueri updateMask, dan sertakan nilai yang telah diperbarui dalam kolom runtimeUpdatableParams dari isi permintaan. Contoh berikut memperbarui min_num_workers:

PUT https://dataflow.googleapis.com/v1b3/projects/my_project/locations/us-central1/jobs/job1?updateMask=runtime_updatable_params.min_num_workers
{
  "runtime_updatable_params": {
    "min_num_workers": 5
  }
}

Untuk tugas yang tidak menggunakan Streaming Engine, Anda dapat mengganti tugas yang ada dengan nilai maxNumWorkers yang diperbarui.

Jika Anda memperbarui tugas streaming yang tidak menggunakan Streaming Engine, tugas yang diperbarui akan menonaktifkan Penskalaan Otomatis Horizontal secara default. Agar penskalaan otomatis tetap aktif, tentukan --autoscalingAlgorithm dan --maxNumWorkers untuk tugas yang diperbarui.

Menyetel petunjuk pemanfaatan pekerja

Dataflow menggunakan penggunaan CPU rata-rata sebagai sinyal untuk kapan harus menerapkan Penskalaan Otomatis Horizontal. Secara default, Dataflow menetapkan penggunaan CPU target sebesar 0,8. Jika pemakaian berada di luar rentang ini, Dataflow mungkin menambah atau menghapus pekerja.

Untuk kontrol lebih terhadap perilaku penskalaan otomatis, Anda dapat menetapkan pemakaian CPU target ke nilai dalam rentang [0,1, 0,9].

  • Tetapkan nilai pemakaian CPU yang lebih rendah jika Anda ingin mencapai latensi puncak yang lebih rendah. Dengan nilai yang lebih rendah, Dataflow dapat melakukan penyebaran skala secara lebih agresif sebagai respons terhadap peningkatan penggunaan pekerja, dan untuk menurunkan skala secara lebih konservatif untuk meningkatkan stabilitas. Nilai yang lebih rendah juga memberikan kapasitas yang lebih besar saat pipeline berjalan pada keadaan stabil, yang umumnya menghasilkan latensi tail yang lebih rendah. (Latensi ekor mengukur waktu tunggu terlama sebelum kumpulan data baru diproses.)

  • Tetapkan nilai yang lebih tinggi jika Anda ingin menghemat resource dan mempertahankan biaya lebih rendah saat traffic mengalami lonjakan. Nilai yang lebih tinggi akan mencegah peningkatan skala yang berlebihan, dengan mengorbankan latensi yang lebih tinggi.

Untuk mengonfigurasi petunjuk pemakaian saat Anda menjalankan tugas, tetapkan opsi layanan worker_utilization_hint:

Java

--dataflowServiceOptions=worker_utilization_hint=TARGET_UTILIZATION

Ganti TARGET_UTILIZATION dengan nilai dalam rentang [0.1, 0.9].

Python

--dataflow_service_options=worker_utilization_hint=TARGET_UTILIZATION

Ganti TARGET_UTILIZATION dengan nilai dalam rentang [0.1, 0.9].

Go

--dataflow_service_options=worker_utilization_hint=TARGET_UTILIZATION

Ganti TARGET_UTILIZATION dengan nilai dalam rentang [0.1, 0.9].

Untuk pipeline baru, sebaiknya lakukan pengujian pada beban yang realistis menggunakan setelan default. Kemudian evaluasi perilaku penskalaan otomatis yang berlaku untuk pipeline Anda dan lakukan penyesuaian sesuai kebutuhan.

Petunjuk pemanfaatan hanyalah salah satu faktor yang digunakan Dataflow saat menentukan apakah akan menskalakan pekerja. Faktor lain seperti backlog dan kunci yang tersedia dapat mengganti nilai petunjuk. Selain itu, petunjuk tersebut bukanlah target yang ketat. Autoscaler mencoba menjaga pemakaian CPU dalam rentang nilai petunjuk, tetapi metrik pemanfaatan gabungan mungkin lebih tinggi atau lebih rendah. Untuk informasi selengkapnya, lihat Heuristik penskalaan otomatis streaming.

Perbarui petunjuk penggunaan

Untuk memperbarui petunjuk pemakaian saat tugas sedang berjalan, lakukan update yang sedang berlangsung sebagai berikut:

gcloud

Guakan perintah gcloud dataflow jobs update-options:

gcloud dataflow jobs update-options \
  --region=REGION \
  -worker_utilization_hint=TARGET_UTILIZATION \
  JOB_ID

Ganti kode berikut:

  • REGION: ID region dari endpoint regional tugas
  • JOB_ID: ID tugas yang akan diperbarui
  • TARGET_UTILIZATION: nilai dalam rentang [0,1, 0,9]

Untuk mereset petunjuk pemanfaatan ke nilai default, gunakan perintah gcloud berikut:

gcloud dataflow jobs update-options \
  --unset_worker_utilization_hint \
  --region=REGION \
  --project=PROJECT_ID \
  JOB_ID

REST

Gunakan projects.locations.jobs.update metode:

PUT https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/REGION/jobs/JOB_ID?updateMask=runtime_updatable_params.worker_utilization_hint
{
  "runtime_updatable_params": {
    "worker_utilization_hint": TARGET_UTILIZATION
  }
}

Ganti kode berikut:

  • PROJECT_ID: ID project Google Cloud untuk tugas Dataflow.
  • REGION: ID region dari endpoint regional tugas.
  • JOB_ID: ID tugas yang akan diperbarui.
  • TARGET_UTILIZATION: nilai dalam rentang [0,1, 0,9]

Heuristik penskalaan otomatis streaming

Untuk pipeline streaming, tujuan Penskalaan Otomatis Horizontal adalah untuk meminimalkan backlog sekaligus memaksimalkan penggunaan dan throughput pekerja, serta bereaksi dengan cepat terhadap lonjakan beban.

Dataflow mempertimbangkan beberapa faktor saat melakukan penskalaan otomatis, termasuk:

  • Backlog. Perkiraan waktu backlog dihitung dari throughput dan byte backlog yang masih akan diproses dari sumber input. Pipeline dianggap sebagai backlog jika perkiraan waktu backlog berada di atas 15 detik.

  • Target pemakaian CPU. Target default untuk penggunaan CPU rata-rata adalah 0,8. Anda dapat mengganti nilai ini.

  • Kunci yang tersedia. Kunci adalah unit dasar paralelisme dalam Dataflow.

Dalam beberapa kasus, Dataflow menggunakan faktor berikut dalam keputusan penskalaan otomatis. Jika faktor-faktor ini digunakan untuk tugas Anda, Anda dapat melihat informasi tersebut di tab metrik Autoscaling.

  • Throttling berbasis kunci menggunakan jumlah kunci pemrosesan yang diterima oleh tugas untuk menghitung batas pekerja pengguna, karena setiap kunci hanya dapat diproses oleh satu pekerja dalam satu waktu.

  • Mengurangi skala kecil. Jika Dataflow mendeteksi bahwa keputusan penskalaan otomatis yang tidak stabil telah terjadi, Dataflow akan memperlambat tingkat penurunan skala untuk meningkatkan stabilitas.

  • Layanan peningkatan berbasis CPU menggunakan penggunaan CPU yang tinggi sebagai kriteria peningkatan skala.

  • Untuk tugas streaming yang tidak menggunakan Streaming Engine, penskalaan mungkin dibatasi oleh jumlah Persistent Disk. Untuk informasi selengkapnya, lihat Menetapkan rentang penskalaan otomatis.

Peningkatan skala. Jika pipeline streaming tetap terhambat dengan paralelisme yang memadai pada pekerja selama beberapa menit, Dataflow akan meningkatkan skala. Dataflow mencoba menghapus backlog dalam waktu sekitar 150 detik setelah meningkatkan skala, mengingat throughput saat ini per pekerja. Jika ada backlog, tetapi pekerja tidak memiliki paralelisme yang cukup untuk pekerja tambahan, pipeline tidak akan meningkatkan skalanya. (Menskalakan jumlah pekerja melebihi jumlah kunci yang tersedia untuk pemrosesan paralel tidak akan membantu memproses backlog lebih cepat.)

Downscaling Saat penskalaan otomatis membuat keputusan penurunan skala, backlog adalah faktor prioritas tertinggi. Autoscaler bertujuan untuk backlog yang tidak lebih dari 15 detik. Jika backlog turun di bawah 10 detik, dan penggunaan pekerja rata-rata di bawah target pemakaian CPU, Dataflow akan menurunkan skala. Selama backlog dapat diterima, penghitung skala otomatis akan mencoba mempertahankan penggunaan CPU yang mendekati penggunaan CPU target. Namun, jika pemanfaatan sudah cukup mendekati target, penskala otomatis mungkin akan mempertahankan jumlah pekerja tidak berubah, karena setiap langkah penurunan skala memiliki biaya.

Streaming Engine juga menggunakan teknik penskalaan otomatis prediktif berdasarkan backlog timer. Data tidak terbatas dalam pipeline streaming dibagi menjadi jendela yang dikelompokkan berdasarkan stempel waktu. Di akhir jendela, timer akan diaktifkan untuk setiap tombol yang diproses di jendela tersebut. Pengaktifan timer menunjukkan bahwa jendela telah berakhir untuk tombol tertentu. Streaming Engine dapat mengukur backlog timer dan memprediksi jumlah timer yang akan diaktifkan di akhir jendela. Dengan menggunakan backlog timer sebagai sinyal, Dataflow dapat memperkirakan jumlah pemrosesan yang harus terjadi saat timer mendatang diaktifkan. Berdasarkan perkiraan beban mendatang, Dataflow melakukan penskalaan otomatis di awal untuk memenuhi permintaan yang diharapkan.

Metrik

Guna mengetahui batas penskalaan otomatis saat ini untuk suatu tugas, buat kueri metrik berikut:

  • job/max_worker_instances_limit: Jumlah pekerja maksimum.
  • job/min_worker_instances_limit: Jumlah pekerja minimum.

Untuk mendapatkan informasi tentang penggunaan pekerja, buat kueri metrik berikut:

  • job/aggregated_worker_utilization: Pemakaian pekerja gabungan.
  • job/worker_utilization_hint: Petunjuk pemakaian pekerja saat ini.

Untuk mendapatkan insight tentang perilaku penghitung skala otomatis, buat kueri metrik berikut:

  • job.worker_utilization_hint_is_actively_used: Menunjukkan apakah autoscaler secara aktif menggunakan petunjuk penggunaan pekerja. Jika faktor lain mengganti petunjuk saat metrik ini diambil sampelnya, nilainya adalah false.
  • job/horizontal_worker_scaling: Menjelaskan keputusan yang diambil oleh autoscaler. Metrik ini berisi label berikut:
    • direction: Menentukan apakah penskalaan otomatis akan ditingkatkan, diperkecil, atau tidak melakukan tindakan apa pun.
    • rationale: Menentukan alasan keputusan penskala otomatis.

Untuk mengetahui informasi selengkapnya, lihat Metrik Cloud Monitoring. Metrik ini juga ditampilkan di diagram pemantauan penskalaan otomatis.

Langkah selanjutnya