Penskalaan Otomatis Horizontal

Penskalaan Otomatis Horizontal memungkinkan Dataflow memilih jumlah instance pekerja yang sesuai untuk tugas Anda, dengan menambahkan atau menghapus pekerja sesuai kebutuhan. Dataflow diskalakan berdasarkan penggunaan CPU rata-rata pekerja dan paralelisme pipeline. Paralelisme pipeline adalah estimasi jumlah thread yang diperlukan untuk memproses data secara paling efisien pada waktu tertentu.

Penskalaan Otomatis Horizontal didukung di pipeline batch dan streaming.

Penskalaan otomatis batch

Penskalaan Otomatis Horizontal diaktifkan secara default di semua pipeline batch. Dataflow secara otomatis memilih jumlah pekerja berdasarkan perkiraan jumlah total pekerjaan di setiap tahap pipeline Anda. Estimasi ini bergantung pada ukuran input dan throughput saat ini. Setiap 30 detik, Dataflow mengevaluasi ulang jumlah pekerjaan sesuai dengan progres eksekusi. Saat estimasi jumlah total pekerjaan meningkat atau menurun, Dataflow akan menskalakan jumlah pekerja secara dinamis ke atas atau ke bawah.

Jumlah pekerja bersifat sublinear terhadap jumlah pekerjaan. Misalnya, tugas dengan pekerjaan dua kali lipat memiliki pekerja kurang dari dua kali lipat.

Jika salah satu kondisi berikut terjadi, Dataflow akan mempertahankan atau mengurangi jumlah pekerja, untuk menghemat resource yang tidak ada aktivitasnya:

  • Penggunaan CPU pekerja rata-rata lebih rendah dari 5%.
  • Paralelisme dibatasi karena pekerjaan yang tidak dapat diparalelkan, seperti data yang tidak dapat dibagi akibat file yang dikompresi atau modul I/O yang tidak terpecah.
  • Tingkat paralelisme bersifat tetap, misalnya saat menulis ke file yang ada di Cloud Storage.

Untuk menetapkan batas atas jumlah pekerja, tetapkan opsi pipeline --maxNumWorkers. Nilai defaultnya adalah 2,000. Untuk menetapkan batas bawah jumlah pekerja, tetapkan opsi layanan --min_num_workers. Tanda ini bersifat opsional.

Penskalaan otomatis streaming

Untuk tugas streaming, Penskalaan Otomatis Horizontal memungkinkan Dataflow mengubah jumlah pekerja secara adaptif sebagai respons terhadap perubahan beban dan penggunaan resource.

Penskalaan Otomatis Horizontal diaktifkan secara default untuk tugas streaming yang menggunakan Streaming Engine. Untuk mengaktifkan Penskalaan Otomatis Horizontal untuk tugas streaming yang tidak menggunakan Streaming Engine, tetapkan opsi pipeline berikut saat Anda memulai pipeline:

Java

--autoscalingAlgorithm=THROUGHPUT_BASED
--maxNumWorkers=MAX_WORKERS

Ganti MAX_WORKERS dengan jumlah maksimum instance pekerja.

Python

--autoscaling_algorithm=THROUGHPUT_BASED
--max_num_workers=MAX_WORKERS

Ganti MAX_WORKERS dengan jumlah maksimum instance pekerja.

Go

--autoscaling_algorithm=THROUGHPUT_BASED
--max_num_workers=MAX_WORKERS

Ganti MAX_WORKERS dengan jumlah maksimum instance pekerja.

Untuk menetapkan batas bawah jumlah pekerja, tetapkan opsi layanan --min_num_workers. Saat Anda menetapkan nilai ini, penskalaan otomatis horizontal tidak akan diskalakan di bawah jumlah pekerja yang ditentukan. Flag ini bersifat opsional.

Menonaktifkan Penskalaan Otomatis Horizontal

Untuk menonaktifkan Penskalaan Otomatis Horizontal, tetapkan opsi pipeline berikut saat Anda menjalankan tugas.

Java

--autoscalingAlgorithm=NONE

Jika Anda menonaktifkan Penskalaan Otomatis Horizontal, Dataflow akan menetapkan jumlah pekerja berdasarkan opsi --numWorkers.

Python

--autoscaling_algorithm=NONE

Jika Anda menonaktifkan Penskalaan Otomatis Horizontal, Dataflow akan menetapkan jumlah pekerja berdasarkan opsi --num_workers.

Go

--autoscaling_algorithm=NONE

Jika Anda menonaktifkan Penskalaan Otomatis Horizontal, Dataflow akan menetapkan jumlah pekerja berdasarkan opsi --num_workers.

Sumber kustom

Jika membuat sumber data kustom, Anda berpotensi meningkatkan performa dengan menerapkan metode yang memberikan lebih banyak informasi ke algoritma Penskalaan Otomatis Horizontal:

Java

Sumber terbatas

  • Dalam subclass BoundedSource, terapkan metode getEstimatedSizeBytes. Layanan Dataflow menggunakan getEstimatedSizeBytes saat menghitung jumlah awal pekerja yang akan digunakan untuk pipeline Anda.
  • Dalam subclass BoundedReader, terapkan metode getFractionConsumed. Layanan Dataflow menggunakan getFractionConsumed untuk melacak progres baca dan menyatukan jumlah pekerja yang benar untuk digunakan selama pembacaan.

Sumber yang tidak terbatas

Sumber harus memberi tahu layanan Dataflow tentang backlog. Backlog adalah estimasi input dalam byte yang belum diproses oleh sumber. Untuk memberi tahu layanan tentang backlog, terapkan salah satu metode berikut di class UnboundedReader Anda.

  • getSplitBacklogBytes() - Backlog untuk pemisahan sumber saat ini. Layanan menggabungkan backlog di semua bagian.
  • getTotalBacklogBytes() - Backlog global di semua bagian. Dalam beberapa kasus, backlog tidak tersedia untuk setiap bagian dan hanya dapat dihitung di semua bagian. Hanya bagian pertama (ID bagian '0') yang perlu memberikan total backlog.

Repositori Apache Beam berisi beberapa contoh sumber kustom yang mengimplementasikan class UnboundedReader.

Python

Sumber terbatas

  • Dalam subclass BoundedSource, terapkan metode estimate_size. Layanan Dataflow menggunakan estimate_size saat menghitung jumlah awal pekerja yang akan digunakan untuk pipeline Anda.
  • Dalam subclass RangeTracker, terapkan metode fraction_consumed. Layanan Dataflow menggunakan fraction_consumed untuk melacak progres baca dan menyatukan jumlah pekerja yang benar untuk digunakan selama pembacaan.

Go

Sumber terbatas

  • Di RangeTracker, implementasikan metode GetProgress(). Layanan Dataflow menggunakan GetProgress untuk melacak progres pembacaan dan berkonvergensi pada jumlah pekerja yang benar untuk digunakan selama pembacaan.

Batasan

  • Dalam tugas yang menjalankan Dataflow Prime, Penskalaan Otomatis Horizontal dinonaktifkan selama dan hingga 10 menit setelah Penskalaan Otomatis Vertikal. Untuk informasi selengkapnya, lihat Pengaruh pada Penskalaan Otomatis Horizontal.
  • Untuk pipeline yang tidak menggunakan Dataflow Shuffle, Dataflow mungkin tidak dapat menskalakan pekerja secara efektif karena pekerja mungkin telah mengacak data yang disimpan di disk lokal.
  • Transformasi PeriodicImpulse didukung dengan penskalaan otomatis streaming di Apache Beam SDK versi 2.60.0 dan yang lebih baru. Jika pipeline Anda menggunakan PeriodicImpulse dengan versi SDK sebelumnya, pekerja Dataflow tidak akan diskalakan ke bawah seperti yang diharapkan.

Langkah selanjutnya