Praktik terbaik untuk pengoptimalan biaya Dataflow

Dokumen ini menjelaskan praktik terbaik untuk mengoptimalkan tugas Dataflow dengan tujuan meminimalkan biaya. Bagian ini menjelaskan faktor-faktor yang memengaruhi biaya dan memberikan teknik untuk memantau dan mengelola biaya tersebut.

Untuk mengetahui informasi selengkapnya tentang cara penghitungan biaya untuk tugas Dataflow, lihat Harga Dataflow.

Beberapa faktor dapat berdampak besar pada biaya pekerjaan:

  • Setelan runtime
  • Performa pipeline
  • Persyaratan throughput pipeline

Bagian berikut memberikan detail tentang cara memantau tugas, faktor yang memengaruhi biaya tugas, dan saran tentang cara meningkatkan efisiensi pipeline.

Menentukan SLO

Sebelum mulai mengoptimalkan, tentukan tujuan tingkat layanan (SLO) pipeline Anda, terutama untuk throughput dan latensi. Persyaratan ini akan membantu Anda mempertimbangkan kompromi antara biaya dan faktor lainnya.

  • Jika pipeline Anda memerlukan latensi penyerapan end-to-end yang rendah, biaya pipeline mungkin lebih tinggi.
  • Jika Anda perlu memproses data yang terlambat tiba, biaya pipeline keseluruhan mungkin lebih tinggi.
  • Jika pipeline streaming Anda memiliki lonjakan data yang perlu diproses, pipeline mungkin memerlukan kapasitas tambahan, yang dapat meningkatkan biaya.

Memantau tugas

Untuk menentukan cara mengoptimalkan tugas, Anda harus memahami perilakunya terlebih dahulu. Gunakan alat pemantauan Dataflow untuk mengamati pipeline saat berjalan. Kemudian, gunakan informasi ini untuk meningkatkan performa dan efisiensi.

Pemantauan biaya

Gunakan teknik berikut untuk memprediksi dan memantau biaya.

  • Sebelum menjalankan pipeline dalam produksi, jalankan satu atau beberapa tugas yang lebih kecil pada subset data Anda. Untuk banyak pipeline, teknik ini dapat memberikan perkiraan biaya.
  • Gunakan halaman Biaya di antarmuka pemantauan Dataflow untuk memantau perkiraan biaya tugas Anda. Estimasi biaya mungkin tidak mencerminkan biaya tugas sebenarnya karena berbagai alasan, seperti diskon kontraktual, tetapi dapat memberikan dasar yang baik untuk pengoptimalan biaya. Untuk mengetahui informasi selengkapnya, lihat Pemantauan biaya.
  • Ekspor data Penagihan Cloud ke BigQuery dan lakukan analisis biaya pada tabel ekspor penagihan. Ekspor Penagihan Cloud memungkinkan Anda mengekspor data penagihan yang mendetail secara otomatis sepanjang hari ke set data BigQuery. Google Cloud Data penagihan mencakup penggunaan, perkiraan biaya, dan data harga.
  • Untuk menghindari biaya yang tidak terduga, buat pemberitahuan pemantauan saat tugas Dataflow Anda melampaui nilai minimum yang Anda tentukan. Untuk mengetahui informasi selengkapnya, lihat Menggunakan Cloud Monitoring untuk pipeline Dataflow.

Pemantauan tugas

Pantau tugas Anda dan identifikasi area tempat Anda dapat meningkatkan efisiensi pipeline.

  • Gunakan antarmuka pemantauan tugas Dataflow untuk mengidentifikasi masalah di pipeline Anda. Antarmuka pemantauan menampilkan grafik tugas dan detail eksekusi untuk setiap pipeline. Kedua alat ini dapat membantu Anda memahami pipeline dan mengidentifikasi tahap yang lambat, tahap yang macet, atau langkah-langkah dengan waktu nyata yang terlalu lama.
  • Gunakan Metrics Explorer untuk melihat metrik tugas Dataflow yang mendetail. Anda dapat menggunakan metrik kustom untuk merekam data performa. Metrik Distribution sangat berguna untuk mengumpulkan data performa.
  • Untuk pipeline yang menggunakan CPU secara intensif, gunakan Cloud Profiler untuk mengidentifikasi bagian kode pipeline yang paling banyak menggunakan resource.
  • Gunakan sampling data untuk mengidentifikasi masalah pada data Anda. Sampling data memungkinkan Anda mengamati data di setiap langkah pipeline Dataflow. Dengan menampilkan input dan output sebenarnya dalam tugas yang sedang berjalan atau telah selesai, informasi ini dapat membantu Anda men-debug masalah pada pipeline.
  • Sesuaikan dasbor pemantauan project untuk menampilkan tugas yang berpotensi mahal. Untuk mengetahui informasi selengkapnya, lihat Menyesuaikan dasbor pemantauan Dataflow.

Tidak disarankan untuk mencatat metrik pemrosesan per elemen dalam pipeline bervolume tinggi, karena logging tunduk pada batas, dan logging yang berlebihan dapat menurunkan performa tugas.

Mengoptimalkan setelan runtime

Setelan runtime berikut dapat memengaruhi biaya:

  • Apakah Anda menjalankan tugas streaming atau tugas batch
  • Layanan yang Anda gunakan untuk menjalankan tugas, seperti Streaming Engine atau FlexRS
  • Jenis mesin, ukuran disk, dan jumlah GPU di VM pekerja
  • Mode penskalaan otomatis
  • Jumlah pekerja awal dan jumlah pekerja maksimum
  • Mode streaming (mode tepat satu kali atau mode minimal satu kali)

Bagian ini menjelaskan potensi perubahan yang dapat Anda lakukan untuk mengoptimalkan tugas. Untuk menentukan apakah saran ini sesuai untuk workload Anda, pertimbangkan desain dan persyaratan pipeline Anda. Tidak semua saran sesuai atau bermanfaat untuk semua pipeline.

Sebelum melakukan perubahan skala besar, uji perubahan pada pipeline kecil yang menggunakan subset data Anda. Untuk mengetahui informasi selengkapnya, lihat Menjalankan eksperimen kecil untuk tugas besar di "Praktik terbaik untuk pipeline batch besar".

Lokasi pekerjaan

Sebagian besar tugas Dataflow berinteraksi dengan layanan lain seperti penyimpanan data dan sistem pesan. Pertimbangkan lokasi ini.

  • Jalankan tugas Anda di region yang sama dengan resource yang digunakan tugas Anda.
  • Buat bucket Cloud Storage untuk menyimpan file sementara dan file penyiapan tugas di region yang sama dengan tugas Anda. Untuk mengetahui informasi selengkapnya, lihat gcpTempLocation dan temp_location opsi pipeline.

Menyesuaikan jenis mesin

Penyesuaian berikut pada VM pekerja dapat meningkatkan efisiensi biaya.

  • Jalankan tugas Anda dengan jenis mesin terkecil yang diperlukan. Sesuaikan jenis mesin sesuai kebutuhan berdasarkan persyaratan pipeline. Misalnya, tugas streaming dengan pipeline intensif CPU terkadang diuntungkan dengan mengubah jenis mesin dari default. Untuk mengetahui informasi selengkapnya, lihat Jenis mesin.
  • Untuk workload yang membutuhkan memori atau komputasi intensif, gunakan jenis mesin yang sesuai. Untuk mengetahui informasi selengkapnya, lihat Skor CoreMark VM menurut keluarga.
  • Tetapkan jumlah awal pekerja. Saat tugas di-scale up, pekerjaan harus didistribusikan ulang ke VM baru. Jika mengetahui jumlah pekerja yang dibutuhkan tugas Anda, Anda dapat menghindari biaya ini dengan menetapkan jumlah pekerja awal. Untuk menetapkan jumlah awal pekerja, gunakan opsi pipeline numWorkers atau num_workers.
  • Tetapkan jumlah maksimum pekerja. Dengan menetapkan nilai untuk parameter ini, Anda berpotensi membatasi total biaya tugas. Saat Anda pertama kali menguji pipeline, mulailah dengan maksimum yang relatif rendah. Kemudian, tingkatkan nilai hingga cukup tinggi untuk menjalankan workload produksi. Pertimbangkan SLO pipeline Anda sebelum menetapkan nilai maksimum. Untuk mengetahui informasi selengkapnya, lihat Penskalaan Otomatis Horizontal.
  • Gunakan penyesuaian yang tepat untuk menyesuaikan persyaratan resource untuk langkah-langkah pipeline tertentu.
  • Beberapa pipeline mendapatkan manfaat dari penggunaan GPU. Untuk mengetahui informasi selengkapnya, lihat GPU dengan Dataflow. Dengan menggunakan penyesuaian yang tepat, Anda dapat mengonfigurasi GPU untuk langkah-langkah tertentu dalam pipeline.
  • Pastikan Anda memiliki bandwidth jaringan yang memadai untuk mengakses data dari VM pekerja, terutama saat Anda perlu mengakses data lokal.

Mengoptimalkan setelan untuk tugas batch

Bagian ini memberikan saran untuk mengoptimalkan setelan runtime untuk tugas batch. Untuk tugas batch, tahap tugas dijalankan secara berurutan, yang dapat memengaruhi performa dan biaya.

Menggunakan Penjadwalan Resource Fleksibel

Jika tugas batch Anda tidak sensitif terhadap waktu, pertimbangkan untuk menggunakan Flexible Resource Scheduling (FlexRS). FlexRS mengurangi biaya batch processing dengan menemukan waktu terbaik untuk memulai tugas, lalu menggunakan kombinasi instance preemptible VM dan VM standar. Preemptible VM tersedia dengan harga yang jauh lebih rendah dibandingkan VM standar, yang dapat menurunkan total biaya. Dengan menggunakan kombinasi VM preemptible dan standar, FlexRS membantu memastikan bahwa pipeline Anda tetap berjalan meskipun Compute Engine melakukan preempt pada VM preemptible.

Menghindari menjalankan tugas yang sangat kecil

Jika memungkinkan, hindari menjalankan tugas yang memproses data dalam jumlah yang sangat kecil. Jika memungkinkan, jalankan lebih sedikit tugas pada set data yang lebih besar. Memulai dan menghentikan VM pekerja akan menimbulkan biaya, sehingga menjalankan lebih sedikit tugas pada lebih banyak data dapat meningkatkan efisiensi.

Pastikan Pengacakan Dataflow diaktifkan. Tugas batch menggunakan shuffle Dataflow secara default.

Menyesuaikan setelan penskalaan otomatis

Secara default, tugas batch menggunakan penskalaan otomatis. Untuk beberapa tugas, seperti tugas yang berjalan singkat, penskalaan otomatis tidak diperlukan. Jika Anda merasa bahwa pipeline Anda tidak mendapatkan manfaat dari penskalaan otomatis, nonaktifkan penskalaan otomatis. Untuk mengetahui informasi selengkapnya, lihat Penskalaan Otomatis Horizontal.

Anda juga dapat menggunakan penskalaan thread dinamis agar Dataflow menyesuaikan jumlah thread berdasarkan penggunaan CPU. Atau, jika Anda mengetahui jumlah thread yang optimal untuk tugas, tetapkan jumlah thread per pekerja secara eksplisit menggunakan numberOfWorkerHarnessThreads atau number_of_worker_harness_threads opsi pipeline.

Menghentikan tugas yang berjalan lama

Setel tugas Anda agar otomatis berhenti jika melebihi waktu proses yang telah ditentukan sebelumnya. Jika Anda mengetahui perkiraan durasi tugas Anda, gunakan max_workflow_runtime_walltime_seconds opsi layanan untuk menghentikan tugas secara otomatis jika berjalan lebih lama dari yang diharapkan.

Mengoptimalkan setelan untuk tugas streaming

Bagian ini memberikan saran untuk mengoptimalkan setelan runtime untuk tugas streaming.

Menggunakan Streaming Engine

Streaming Engine memindahkan eksekusi pipeline dari VM pekerja ke backend layanan Dataflow untuk efisiensi yang lebih besar. Sebaiknya gunakan Streaming Engine untuk tugas streaming Anda.

Mempertimbangkan mode minimal satu kali

Dataflow mendukung dua mode untuk tugas streaming: mode tepat satu kali dan mode setidaknya satu kali. Jika beban kerja Anda dapat mentoleransi duplikat data, mode minimal sekali dapat mengurangi biaya tugas Anda secara signifikan. Sebelum mengaktifkan mode setidaknya sekali, evaluasi apakah pipeline Anda memerlukan pemrosesan tepat satu kali untuk data. Untuk mengetahui informasi selengkapnya, lihat Menetapkan mode streaming pipeline.

Memilih model harga

Diskon abonemen (CUD) untuk tugas streaming Dataflow memberikan harga diskon sebagai imbalan atas komitmen Anda untuk terus menggunakan sejumlah resource komputasi Dataflow selama setahun atau lebih. DA Dataflow berguna jika pembelanjaan Anda untuk kapasitas komputasi Dataflow untuk tugas streaming melibatkan jumlah minimum yang dapat diprediksi dan Anda dapat berkomitmen selama minimal satu tahun. Dengan menggunakan CUD, Anda berpotensi mengurangi biaya tugas Dataflow.

Pertimbangkan juga penggunaan penagihan berbasis resource. Dengan penagihan berbasis resource, resource Streaming Engine yang digunakan oleh tugas Anda diukur dan dihitung dalam Unit Komputasi Streaming Engine. Anda akan ditagih untuk CPU pekerja, memori pekerja, dan Unit Komputasi Streaming Engine.

Menyesuaikan setelan penskalaan otomatis

Gunakan petunjuk penskalaan otomatis untuk menyesuaikan setelan penskalaan otomatis. Untuk mengetahui informasi selengkapnya, lihat Menyesuaikan Penskalaan Otomatis Horizontal untuk pipeline streaming. Untuk tugas streaming yang menggunakan Streaming Engine, Anda dapat memperbarui setelan penyesuaian otomatis tanpa menghentikan atau mengganti tugas. Untuk mengetahui informasi selengkapnya, lihat Pembaruan opsi tugas dalam proses.

Jika Anda merasa bahwa pipeline Anda tidak mendapatkan manfaat dari penskalaan otomatis, nonaktifkan. Untuk mengetahui informasi selengkapnya, lihat Penskalaan Otomatis Horizontal.

Jika Anda mengetahui jumlah thread yang optimal untuk tugas, tetapkan secara eksplisit jumlah thread per pekerja menggunakan numberOfWorkerHarnessThreads atau number_of_worker_harness_threads opsi pipeline.

Menghentikan tugas yang berjalan lama

Untuk tugas streaming, Dataflow mencoba ulang item kerja yang gagal tanpa batas waktu. Tugas tidak dihentikan. Namun, tugas mungkin terhenti hingga masalah teratasi. Buat kebijakan pemantauan untuk mendeteksi tanda-tanda pipeline yang terhenti, seperti peningkatan latensi sistem dan penurunan keakuratan data. Terapkan logging error dalam kode pipeline Anda untuk membantu mengidentifikasi item kerja yang gagal berulang kali.

Performa pipeline

Pipeline yang berjalan lebih cepat mungkin lebih murah. Faktor berikut dapat memengaruhi performa pipeline:

  • Paralelisme yang tersedia untuk tugas Anda
  • Efisiensi transformasi, konektor I/O, dan coder yang digunakan dalam pipeline
  • Lokasi data

Langkah pertama untuk meningkatkan performa pipeline adalah memahami model pemrosesan:

  • Pelajari model Apache Beam dan model eksekusi Apache Beam.
  • Pelajari lebih lanjut siklus proses pipeline, termasuk cara Dataflow mengelola paralelisme dan strategi pengoptimalan yang digunakannya. Tugas Dataflow menggunakan beberapa VM pekerja, dan setiap pekerja menjalankan beberapa thread. Paket elemen dari PCollection didistribusikan ke setiap thread pekerja.

Gunakan praktik terbaik berikut saat Anda menulis kode pipeline:

Logging

Ikuti praktik terbaik berikut saat mencatat log:

Pengujian

Menguji pipeline memiliki banyak manfaat, termasuk membantu upgrade SDK, pemfaktoran ulang pipeline, dan peninjauan kode. Banyak pengoptimalan, seperti memproses ulang transformasi intensif CPU kustom, dapat diuji secara lokal tanpa perlu menjalankan tugas di Dataflow.

Uji pipeline skala besar dengan data pengujian yang realistis untuk beban kerja Anda, termasuk jumlah total elemen untuk pipeline batch, jumlah elemen per detik untuk pipeline streaming, ukuran elemen, dan jumlah kunci. Uji pipeline Anda dalam dua mode: dalam kondisi stabil, dan memproses backlog besar untuk menyimulasikan pemulihan setelah error.

Untuk mengetahui informasi selengkapnya tentang cara membuat pengujian unit, pengujian integrasi, dan pengujian end-to-end, lihat Menguji pipeline Anda. Untuk contoh pengujian, lihat repositori GitHub dataflow-ordered-processing.

Langkah berikutnya