Mendesain untuk fleksibilitas dan efisiensi di Dataflow

Dokumen ini menjelaskan desain untuk fleksibilitas dan efisiensi (DFE), serangkaian praktik terbaik arsitektur untuk membangun pipeline Dataflow yang tangguh.

Beralih dari batasan infrastruktur yang kaku ke definisi resource yang fleksibel akan membantu Anda:

  • Memaksimalkan ketersediaan resource komputasi.
  • Memastikan penskalaan otomatis yang lancar selama periode permintaan regional yang tinggi.
  • Mencegah penundaan peluncuran pipeline dan menghilangkan hambatan kapasitas.

Misalnya, alih-alih membatasi pipeline ke satu jenis mesin tertentu di satu zona, seperti memerlukan pekerja n1-standard-4 di us-central1-a, Anda dapat menetapkan kebutuhan resource minimum (seperti 4 vCPU dan RAM 16 GB). Jika us-central1-a atau seri mesin N1 mengalami batasan kapasitas sementara, Dataflow dapat menyediakan VM pekerja yang kompatibel secara otomatis di seluruh zona dan kelompok mesin lainnya (seperti E2, N2, atau N2D). Fleksibilitas ini membantu memastikan bahwa pipeline Anda dimulai dan diskalakan tanpa menunggu satu kumpulan hardware yang dibatasi.

Dokumen ini ditujukan untuk engineer data, arsitek cloud, dan administrator platform yang mengelola workload Dataflow dan ingin mengoptimalkan keandalan, throughput, dan ketersediaan infrastruktur pipeline.

Ringkasan DFE

Dataflow adalah layanan pemrosesan data serverless dan terkelola sepenuhnya yang menyediakan instance virtual machine (VM) Compute Engine secara dinamis untuk menjalankan pipeline Apache Beam. Dalam pipeline streaming dan batch processing skala besar, kumpulan worker sering kali mengalami peningkatan skala hingga puluhan atau ratusan instance VM.

Pipeline yang dikonfigurasi dengan batasan infrastruktur yang ketat rentan terhadap keterlambatan penyediaan selama periode permintaan tinggi. Contoh batasan ketat mencakup hal berikut:

  • Mengodekan satu jenis mesin secara permanen, seperti n1-standard-4.
  • Menyematkan pipeline ke zona Compute Engine tertentu.

Jika jenis mesin atau zona tertentu mengalami permintaan tinggi sementara, Dataflow tidak dapat mengalokasikan resource komputasi. Hal ini dapat menyebabkan penundaan atau kesalahan penyediaan seperti ZONE_RESOURCE_POOL_EXHAUSTED atau RESOURCE_POOL_EXHAUSTED.

Menggunakan prinsip DFE membantu Anda mengubah arsitektur pipeline dari deklarasi infrastruktur statis yang kaku menjadi definisi resource yang fleksibel dan berbasis persyaratan. Fleksibilitas ini memungkinkan Dataflow mendistribusikan komputasi secara dinamis di berbagai kumpulan hardware yang tersedia di Google Cloud, sehingga membantu Anda memaksimalkan ketersediaan komputasi sekaligus meminimalkan beban operasional.

Praktik terbaik untuk DFE

Terapkan praktik terbaik berikut untuk memaksimalkan ketersediaan komputasi, meningkatkan responsivitas penskalaan otomatis, dan membangun pipeline yang tangguh.

Mengaktifkan Pemilihan VM Otomatis

Daripada meng-hardcode jenis mesin statis dengan opsi pipeline jenis mesin pekerja, gunakan Pemilihan VM otomatis dengan petunjuk resource Apache Beam. Saat Anda menentukan persyaratan resource minimum (min_ram atau cpu_count), Dataflow akan otomatis mengaktifkan fleksibilitas instance dan menyediakan worker dari daftar jenis mesin yang kompatibel.

Dukungan workload:

  • Pipeline batch: Penyesuaian yang tepat dan Pemilihan VM Otomatis diaktifkan secara otomatis saat Anda menentukan petunjuk resource.
  • Pipeline streaming: Penyesuaian yang tepat memerlukan penetapan opsi pipeline --experiments=enable_streaming_rightfitting, bersama dengan penskalaan otomatis horizontal (diaktifkan secara default) dan Streaming Engine (--enable_streaming_engine).

Untuk mengonfigurasi Pemilihan VM Otomatis, tentukan persyaratan resource minimum (min_ram atau cpu_count) di tingkat pipeline menggunakan opsi command line, opsi pipeline SDK, atau parameter eksekusi Template Fleksibel. Untuk mengetahui petunjuk penyiapan dan contoh kode yang mendetail untuk Java dan Python, lihat Menggunakan petunjuk resource.

Menggunakan penempatan pekerja regional (hindari penyematan zona)

Konfigurasi Dataflow untuk menjadwalkan VM pekerja secara dinamis di seluruh zona yang sehat dalam region yang Anda pilih.

Tentukan opsi pipeline --region dan hilangkan --zone dan --worker_zone. Contoh:

--region=us-central1

Memisahkan status dan mengacak menggunakan layanan terkelola

Pipeline yang tidak menggunakan layanan backend terkelola menjalankan operasi data shuffle dan penyimpanan status streaming langsung di disk dan memori worker VM. Keterikatan yang erat ini memerlukan disk pekerja yang lebih besar dan mengikat kelangsungan workload ke instance VM tertentu, sehingga penggantian pekerja menjadi lebih sulit selama batasan kapasitas.

  • Untuk tugas Batch - gunakan Dataflow Shuffle: Dataflow Shuffle diaktifkan secara default untuk pipeline batch yang berjalan di jenis mesin worker yang didukung dan memindahkan operasi shuffle dari VM worker ke layanan backend khusus yang dikelola Google.
  • Untuk tugas Streaming - gunakan Streaming Engine: Streaming Engine memindahkan penyimpanan status jendela dan pengelolaan timer dari VM pekerja ke infrastruktur backend khusus yang sangat responsif. Untuk pipeline yang menggunakan Apache Beam SDK 2.30.0 atau yang lebih baru, Streaming Engine diaktifkan secara default. Untuk mengaktifkannya secara eksplisit, teruskan opsi pipeline --enable_streaming_engine.

Menggunakan penjadwalan resource fleksibel (FlexRS) untuk pipeline batch

Untuk workload batch yang tidak mendesak seperti ETL malam, penyerapan data lake, atau penggabungan harian, gunakan Flexible Resource Scheduling (FlexRS).

Untuk mengaktifkan FlexRS, tetapkan opsi pipeline tujuan flexRS:

  • Untuk pipeline Python: --flexrs_goal=COST_OPTIMIZED
  • Untuk pipeline Java: --flexRSGoal=COST_OPTIMIZED

Mengonfigurasi jenis VM peluncur yang fleksibel untuk Template Flex

Saat meluncurkan pipeline menggunakan Template Flex, VM peluncur pipeline secara default adalah e2-standard-2. VM default berfungsi dalam sebagian besar kasus, tetapi jika Anda mengalami batasan kapasitas, Anda dapat menyesuaikan konfigurasi menggunakan opsi --launcher-machine-type saat menjalankan perintah gcloud dataflow flex-template run:

gcloud dataflow flex-template run my-job \
    --template-file-gcs-location="gs://my-bucket/template.json" \
    --region="us-central1" \
    --launcher-machine-type="n2-standard-2"

Pertimbangan dan kompromi operasional

Meskipun penerapan praktik terbaik DFE secara signifikan meningkatkan ketersediaan komputasi, responsivitas penskalaan otomatis, dan keandalan operasional, pertimbangkan faktor operasional dan kompromi berikut saat mendesain arsitektur Anda:

Pertimbangan Pemilihan VM Otomatis

  • Keandalan versus performa puncak: Pemilihan VM Otomatis memprioritaskan keandalan peluncuran tugas dan ketersediaan komputasi daripada performa eksekusi puncak. Karena Dataflow menyediakan dari beberapa kelompok mesin kandidat (seperti E2, N2, N4, dan N2D), performa dan throughput runtime mungkin sedikit berbeda bergantung pada kelompok mesin yang disediakan. Untuk beban kerja intensif komputasi dengan SLA eksekusi yang ketat, uji pipeline Anda dengan Pemilihan VM Otomatis untuk menetapkan dasar pengukuran performa sebelum men-deploy-nya secara luas. Jika workload memerlukan platform hardware atau kecepatan clock tertentu dan Anda dapat mentoleransi batasan kapasitas, Anda dapat terus menetapkan jenis mesin tertentu.
  • Kuota Compute Engine di seluruh kelompok kandidat: Karena Pemilihan VM Otomatis dapat menyediakan pekerja dari beberapa kelompok mesin kandidat, pastikan project Google Cloud Anda memiliki kuota vCPU dan memori Compute Engine yang cukup untuk setiap kelompok kandidat di region target Anda. Jika terjadi kekurangan kapasitas di keluarga utama dan project Anda tidak memiliki kuota untuk keluarga pengganti, penyediaan pekerja akan gagal dengan error QUOTA_EXCEEDED.
  • Prasyarat pipeline streaming: Untuk pipeline streaming, fitur cocok dan Pemilihan VM Otomatis tidak diaktifkan secara default. Anda harus secara eksplisit menentukan --experiments=enable_streaming_rightfitting dan memastikan bahwa Streaming Engine (--enable_streaming_engine) dan penskalaan otomatis horizontal aktif.
  • Pengecualian konfigurasi: Pemilihan VM Otomatis otomatis dilewati atau tidak didukung jika Anda mengonfigurasi salah satu fitur atau opsi dalam tabel berikut:

    Fitur Opsi flag atau konfigurasi Catatan
    Jenis mesin eksplisit --worker_machine_type atau --machine_type (Python)
    --workerMachineType (Java)
    Pemilihan VM Otomatis dilewati untuk memilih jenis mesin yang ditentukan.
    Jenis disk kustom, IOPS yang disediakan, atau throughput --disk_type, --disk_provisioned_iops, atau --disk_provisioned_throughput_mibps Pemilihan VM Otomatis dilewati. Menetapkan ukuran disk kustom dengan --disk_size_gb didukung.
    Platform CPU minimum --min_cpu_platform (Python)
    --minCpuPlatform (Java)
    Menetapkan platform CPU minimum akan melewati Pemilihan VM Otomatis.
    Confidential VM --experiments=enable_confidential_compute Instance Confidential VM tidak didukung dengan Pemilihan VM Otomatis.
    Akselerator GPU atau TPU Petunjuk resource --dataflow_service_options=worker_accelerator=... atau accelerator Pemilihan VM Otomatis hanya berlaku untuk workload tanpa akselerator.
    Dataflow Prime --dataflow_service_options=enable_prime Dataflow Prime menggunakan penskalaan otomatis vertikal dan penyesuaian yang tepat secara dinamis, bukan Pemilihan VM Otomatis.
    Flexible Resource Scheduling (FlexRS) --flexrs_goal=COST_OPTIMIZED (Python)
    --flexRSGoal=COST_OPTIMIZED (Java)
    FlexRS mengelola buffer penjadwalan dan kumpulan pekerja sendiri.

Trade-off Penjadwalan Resource Fleksibel (FlexRS)

  • Periode penundaan penjadwalan: FlexRS dapat memperkenalkan buffer penjadwalan hingga 6 jam sebelum eksekusi tugas dimulai. Jangan gunakan FlexRS untuk pipeline dengan SLA waktu penyelesaian yang ketat atau dependensi hilir yang erat.

Penempatan regional dan lokalitas data

  • Prasyarat layanan terkelola: Penempatan pekerja regional hanya didukung untuk tugas yang menggunakan Dataflow Shuffle untuk batch atau Streaming Engine untuk streaming. Tugas yang tidak menggunakan layanan backend terkelola ini menggunakan penempatan zona otomatis, yang memilih satu zona terbaik dalam region.
  • Lokalitas data dan keluar lintas region: Penempatan regional mendistribusikan pekerja di seluruh zona yang tersedia dalam region pilihan Anda. Untuk meminimalkan latensi jaringan dan menghindari biaya keluar jaringan antar-region, pastikan semua sumber dan tujuan data (seperti bucket Cloud Storage, set data BigQuery, dan topik Pub/Sub) berada di region yang sama dengan tugas Dataflow Anda.

Reservasi Compute Engine

  • Afinitas reservasi: Tugas Dataflow on-demand secara otomatis menggunakan reservasi Compute Engine yang cocok yang menggunakan afinitas reservasi ANY. Namun, Pemilihan VM Otomatis tidak mendukung penggunaan instance dari reservasi bernama tertentu.
  • Kesesuaian untuk workload sementara: Pemesanan Compute Engine umumnya tidak direkomendasikan untuk workload batch yang rentan terhadap lonjakan, penskalaan otomatis, atau berumur pendek. Selain itu, pembuatan pemesanan baru selama kekurangan zona aktif akan gagal dengan batasan kapasitas yang sama seperti pembuatan VM on-demand.

Langkah berikutnya