Dalam pipeline streaming dengan volume data input yang tinggi, umumnya ada trade-off antara biaya dan latensi. Untuk mempertahankan latensi rendah, Dataflow harus menambahkan pekerja saat volume traffic meningkat. Faktor lainnya adalah seberapa cepat pipeline harus di-scale up atau di-scale down sebagai respons terhadap perubahan laju data input.
Penskala otomatis Dataflow memiliki setelan default yang cocok untuk banyak workload. Namun, Anda mungkin ingin menyesuaikan perilaku ini untuk skenario tertentu. Misalnya, latensi rata-rata yang lebih tinggi mungkin dapat diterima untuk mengurangi biaya, atau Anda mungkin ingin Dataflow melakukan penskalaan lebih cepat sebagai respons terhadap lonjakan traffic.
Untuk mengoptimalkan Penskalaan Otomatis Horizontal, Anda dapat menyesuaikan parameter berikut:
- Rentang penskalaan otomatis: Jumlah minimum dan maksimum pekerja yang akan dialokasikan.
- Petunjuk pemakaian pekerja: Target pemakaian CPU untuk pekerja.
- Petunjuk paralelisme pekerja: Jumlah target paralelisme untuk pekerja.
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 awal pekerja yang tersedia saat pipeline mulai berjalan--maxNumWorkers
: jumlah maksimum pekerja yang tersedia untuk pipeline Anda
Python
--num_workers
: jumlah awal pekerja yang tersedia saat pipeline mulai berjalan--max_num_workers
: jumlah maksimum pekerja yang tersedia untuk pipeline Anda
Go
--num_workers
: jumlah awal pekerja 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 terlampir yang sama.
Jika Anda menetapkan --maxNumWorkers
, pastikan nilai tersebut menyediakan disk yang cukup untuk pipeline Anda. Pertimbangkan pertumbuhan di masa mendatang saat menetapkan nilai awal. Untuk mengetahui informasi
tentang performa Persistent Disk, lihat
Mengonfigurasi Persistent Disk dan VM.
Dataflow menagih 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 minimum dan maksimum pekerja, tanpa menghentikan atau mengganti tugas. Untuk menyesuaikan nilai ini, gunakan update tugas saat berjalan. Perbarui opsi tugas berikut:
--min-num-workers
: jumlah minimum pekerja.--max-num-workers
: jumlah maksimum pekerja.
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 endpoint regional tugas
- MINIMUM_WORKERS: jumlah minimum instance Compute Engine
- MAXIMUM_WORKERS: jumlah maksimum instance Compute Engine
- JOB_ID: ID tugas yang akan diupdate
Anda juga dapat memperbarui --min-num-workers
dan --max-num-workers
secara terpisah.
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: Google Cloud project ID tugas Dataflow
- REGION: ID region endpoint regional tugas
- JOB_ID: ID tugas yang akan diupdate
- 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 diperbarui dalam kolom runtimeUpdatableParams
di 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 diaktifkan,
tentukan --autoscalingAlgorithm
dan --maxNumWorkers
untuk tugas yang diperbarui.
Menetapkan petunjuk pemanfaatan pekerja
Dataflow menggunakan pemakaian CPU rata-rata sebagai sinyal untuk kapan harus menerapkan Penskalaan Otomatis Horizontal. Secara default, Dataflow menetapkan target pemanfaatan CPU sebesar 0,8. Jika pemanfaatan berada di luar rentang ini, Dataflow dapat menambahkan atau menghapus pekerja.
Untuk kontrol yang lebih besar terhadap perilaku penskalaan otomatis, Anda dapat menetapkan penggunaan CPU target ke nilai dalam rentang [0,1, 0,9].
Tetapkan nilai penggunaan CPU yang lebih rendah jika Anda ingin mencapai latensi puncak yang lebih rendah. Nilai yang lebih rendah memungkinkan Dataflow melakukan penskalaan horizontal secara lebih agresif sebagai respons terhadap peningkatan pemanfaatan pekerja, dan melakukan penskalaan vertikal secara lebih konservatif untuk meningkatkan stabilitas. Nilai yang lebih rendah juga memberikan ruang lebih besar saat pipeline berjalan dalam kondisi stabil, yang umumnya menghasilkan latensi ekor yang lebih rendah. (Latensi ekor mengukur waktu tunggu terlama sebelum data baru diproses.)
Tetapkan nilai yang lebih tinggi jika Anda ingin menghemat resource dan menjaga biaya tetap rendah saat terjadi lonjakan traffic. Nilai yang lebih tinggi mencegah penskalaan berlebihan, dengan mengorbankan latensi yang lebih tinggi.
Untuk mengonfigurasi petunjuk pemanfaatan saat Anda menjalankan tugas non-template, tetapkan
worker_utilization_hint
opsi layanan. Untuk tugas template, perbarui petunjuk pemanfaatan, karena opsi layanan tidak didukung.
Contoh berikut menunjukkan cara menggunakan 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 Anda melakukan pengujian di bawah beban yang realistis menggunakan setelan default. Kemudian, evaluasi perilaku penskalaan otomatis sebagaimana berlaku untuk pipeline Anda dan lakukan penyesuaian sesuai kebutuhan.
Petunjuk pemanfaatan hanyalah salah satu faktor yang digunakan Dataflow saat memutuskan apakah akan menskalakan pekerja. Faktor lain seperti backlog dan kunci yang tersedia dapat menggantikan nilai saran. Selain itu, petunjuk bukan target yang ketat. Autoscaler mencoba mempertahankan pemakaian CPU dalam rentang nilai petunjuk, tetapi metrik pemakaian gabungan mungkin lebih tinggi atau lebih rendah. Untuk mengetahui informasi selengkapnya, lihat Heuristik penskalaan otomatis streaming.
Memperbarui petunjuk pemanfaatan
Untuk memperbarui petunjuk pemanfaatan saat tugas sedang berjalan, lakukan update saat proses 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 endpoint regional tugas
- JOB_ID: ID tugas yang akan diupdate
- 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: Google Cloud project ID job Dataflow.
- REGION: ID region endpoint regional tugas.
- JOB_ID: ID tugas yang akan diperbarui.
- TARGET_UTILIZATION: nilai dalam rentang [0,1, 0,9]
Menetapkan petunjuk paralelisme worker
Untuk menangani penskalaan otomatis dengan operasi panjang yang kurang bergantung pada CPU, seperti workload intensif ML, Anda dapat menyetel petunjuk paralelisme pekerja menggunakan petunjuk resource Apache Beam. Petunjuk ini mengalihkan penskalaan otomatis ke mode lain yang dioptimalkan untuk workload atau transformasi yang intensif GPU dengan waktu pemrosesan yang lama.
Contoh berikut menunjukkan cara melampirkan petunjuk paralelisme ke transformasi:
Java
pcoll.apply(MyCompositeTransform.of(...)
.setResourceHints(
ResourceHints.create()
.withMaxActiveBundlesPerWorker(TARGET_PARALLELISM_PER_WORKER)))
Ganti TARGET_PARALLELISM_PER_WORKER dengan nilai yang sesuai untuk kasus penggunaan Anda. Untuk panduan umum, lihat cara memilih nilai awal yang baik.
Python
pcoll | MyPTransform().with_resource_hints(
max_active_bundles_per_worker=TARGET_PARALLELISM_PER_WORKER)
Ganti TARGET_PARALLELISM_PER_WORKER dengan nilai yang sesuai untuk kasus penggunaan Anda. Untuk panduan umum, lihat cara memilih nilai awal yang baik.
Pilih nilai petunjuk paralelisme pekerja
Untuk kasus penggunaan ML, nilai awal yang baik setara dengan jumlah model yang berjalan secara paralel dalam setiap pekerja. Nilai ini dibatasi oleh kapasitas akselerator pada pekerja dan ukuran model.
Untuk kasus penggunaan lainnya, pipeline terikat memori atau terikat CPU. Untuk pipeline yang terikat memori, gunakan batas memori untuk menghitung pemrosesan paralel maksimum. Untuk pipeline yang terikat CPU, sebaiknya pertahankan kebijakan penskalaan otomatis default, bukan memberikan petunjuk paralelisme.
Anda dapat menyesuaikan nilai untuk mengakomodasi kebutuhan pemrosesan tahap lainnya, seperti penulisan ke sink. Menaikkan nilai sebesar 1 atau 2 saat paralelisme model Anda adalah 2 akan membantu mengenali waktu pemrosesan yang lebih cepat untuk menulis ke sink dengan memberikan lebih banyak kelonggaran untuk memperhitungkan pemrosesan yang dilakukan di tahap lain. Jika pipeline Anda tidak melibatkan pengacakan dan transformasi digabungkan menjadi satu tahap, Anda tidak perlu menyesuaikan nilai untuk transformasi lainnya.
Nilai ini juga dapat disesuaikan untuk menyimulasikan efek keterlambatan backlog yang dapat diterima. Misalnya, jika Anda merasa nyaman dengan penundaan maksimum 10 menit dan waktu pemrosesan rata-rata model Anda adalah 1 menit, Anda dapat memilih untuk menaikkan nilai sebesar 1 dengan asumsi jumlah maksimum pekerja Anda ditetapkan ke 10.
Heuristik penskalaan otomatis yang intensif GPU
Dalam setelan yang memerlukan GPU intensif yang ditunjukkan melalui petunjuk paralelisme setelan, Dataflow mempertimbangkan beberapa faktor saat melakukan penskalaan otomatis. Faktor-faktor ini mencakup:
- Kunci yang tersedia. Kunci adalah unit keparalelan dasar di Dataflow.
- Paket aktif maksimum per pekerja. Hal ini menunjukkan jumlah paralelisme pemrosesan ideal maksimum dalam pekerja.
Ide umum di balik keputusan penskalaan adalah menghitung pekerja yang diperlukan untuk menangani beban saat ini seperti yang ditandai oleh kunci yang tersedia. Misalnya, jika ada 100 kunci yang tersedia untuk diproses dan paralelisme maksimum per pekerja adalah 10, Anda harus berupaya memiliki total 10 pekerja.
Jika pipeline Anda kompleks dan memiliki beban kerja berat yang intensif GPU dan banyak transformasi yang intensif CPU, sebaiknya aktifkan penyesuaian yang tepat. Hal ini memungkinkan layanan membedakan dengan baik antara pekerjaan yang intensif CPU dan intensif GPU, lalu menskalakan setiap kumpulan pekerja dengan tepat.
Heuristik penskalaan otomatis streaming
Untuk pipeline streaming, tujuan Penskalaan Otomatis Horizontal adalah meminimalkan kumpulan tugas yang belum selesai sekaligus memaksimalkan penggunaan dan throughput pekerja serta bereaksi cepat terhadap lonjakan beban.
Dataflow mempertimbangkan beberapa faktor saat melakukan penskalaan otomatis, termasuk:
Backlog. Estimasi waktu backlog dihitung dari throughput dan byte backlog yang masih harus diproses dari sumber input. Pipeline dianggap tertunda jika perkiraan waktu backlog tetap di atas 15 detik.
Target pemakaian CPU. Target default untuk pemakaian CPU rata-rata adalah 0,8. Anda dapat mengganti nilai ini.
Kunci yang tersedia. Kunci adalah unit keparalelan dasar di 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 Penskalaan Otomatis.
Pembatasan berbasis kunci menggunakan jumlah kunci pemrosesan yang diterima oleh tugas untuk menghitung batas atas bagi pekerja pengguna, karena setiap kunci hanya dapat diproses oleh satu pekerja dalam satu waktu.
Peredaman penurunan skala. Jika Dataflow mendeteksi bahwa keputusan penskalaan otomatis yang tidak stabil telah terjadi, Dataflow akan memperlambat laju penskalaan untuk meningkatkan stabilitas.
Peningkatan kualitas berbasis CPU menggunakan pemakaian CPU yang tinggi sebagai kriteria peningkatan kualitas.
Untuk tugas streaming yang tidak menggunakan Streaming Engine, penskalaan mungkin dibatasi oleh jumlah Persistent Disk. Untuk mengetahui informasi selengkapnya, lihat Menetapkan rentang penskalaan otomatis.
Penskalaan otomatis yang intensif GPU, jika diaktifkan dengan menetapkan petunjuk paralelisme pekerja. Untuk mengetahui informasi selengkapnya, lihat Heuristik penskalaan otomatis intensif GPU
Peningkatan resolusi. Jika pipeline streaming tetap tertunda dengan paralelisme yang memadai pada pekerja selama beberapa menit, Dataflow akan melakukan penskalaan. Dataflow mencoba menghapus backlog dalam waktu sekitar 150 detik setelah penskalaan, mengingat throughput per pekerja saat ini. Jika ada backlog, tetapi pekerja tidak memiliki paralelisme yang cukup untuk pekerja tambahan, pipeline tidak akan di-scale up. (Menskalakan jumlah pekerja di luar jumlah kunci yang tersedia untuk pemrosesan paralel tidak akan membantu memproses backlog lebih cepat.)
Penskalaan ke bawah Saat autoscaler membuat keputusan penskalaan ke bawah, backlog adalah faktor prioritas tertinggi. Penskala otomatis bertujuan untuk tidak memiliki backlog lebih dari 15 detik. Jika backlog turun di bawah 10 detik, dan pemanfaatan pekerja rata-rata berada di bawah target pemanfaatan CPU, Dataflow akan menurunkan skala. Selama backlog dapat diterima, autoscaler akan mencoba mempertahankan penggunaan CPU mendekati target penggunaan CPU. Namun, jika pemanfaatan sudah cukup mendekati target, autoscaler mungkin tidak mengubah jumlah pekerja, 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 menurut stempel waktu. Di akhir periode, timer akan diaktifkan untuk setiap kunci yang diproses dalam periode tersebut. Pemicuan timer menunjukkan bahwa periode validitas jendela telah berakhir untuk kunci 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 berikutnya diaktifkan. Berdasarkan estimasi beban mendatang, Dataflow akan menskalakan otomatis terlebih dahulu untuk memenuhi permintaan yang diperkirakan.
Metrik
Untuk menemukan batas penskalaan otomatis saat ini untuk tugas, kueri metrik berikut:
job/max_worker_instances_limit
: Jumlah maksimum pekerja.job/min_worker_instances_limit
: Jumlah minimum pekerja.
Untuk mendapatkan informasi tentang pemanfaatan pekerja, buat kueri metrik berikut:
job/aggregated_worker_utilization
: Penggunaan worker gabungan.job/worker_utilization_hint
: Petunjuk penggunaan worker saat ini.
Untuk mendapatkan insight tentang perilaku penskala otomatis, kueri metrik berikut:
job.worker_utilization_hint_is_actively_used
: Menunjukkan apakah autoscaler secara aktif menggunakan petunjuk penggunaan pekerja. Jika faktor lain menggantikan petunjuk saat metrik ini diambil sampelnya, nilainya adalahfalse
.job/horizontal_worker_scaling
: Menjelaskan keputusan yang diambil oleh autoscaler. Metrik ini berisi label berikut:direction
: Menentukan apakah autoscaler meningkatkan skala, menurunkan skala, atau tidak melakukan tindakan.rationale
: Menentukan alasan keputusan autoscaler.
Untuk mengetahui informasi selengkapnya, lihat Metrik Cloud Monitoring. Metrik ini juga ditampilkan dalam diagram pemantauan penskalaan otomatis.