Praktik terbaik untuk pengoptimalan biaya Dataflow

Dokumen ini menjelaskan praktik terbaik untuk mengoptimalkan tugas Dataflow Anda dengan tujuan meminimalkan biaya. Dokumen 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 tugas:

  • Setelan runtime
  • Performa pipeline
  • Persyaratan throughput pipeline

Bagian berikut memberikan detail tentang cara memantau tugas Anda, faktor-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 secara 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. Perkiraan biaya mungkin tidak mencerminkan biaya tugas sebenarnya karena berbagai alasan, seperti diskon kontrak, 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 mendetail Google Cloud secara otomatis sepanjang hari ke set data BigQuery. Data penagihan mencakup data penggunaan, perkiraan biaya, dan harga.
  • Untuk menghindari biaya yang tidak terduga, buat pemberitahuan pemantauan saat tugas Dataflow Anda melebihi batas yang Anda tentukan. Untuk mengetahui informasi selengkapnya, lihat Menggunakan Cloud Monitoring untuk pipeline Dataflow.

Pemantauan tugas

Pantau tugas Anda dan identifikasi area yang mungkin dapat Anda gunakan untuk meningkatkan efisiensi pipeline.

  • Gunakan antarmuka pemantauan tugas Dataflow untuk mengidentifikasi masalah dalam pipeline Anda. Antarmuka pemantauan menampilkan a 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 proses yang terlalu lama .
  • Gunakan Metrics Explorer untuk melihat metrik tugas Dataflow mendetail. Anda dapat menggunakan metrik kustom untuk mengambil data performa. Metrik Distribution sangat berguna untuk mengumpulkan data performa.
  • Untuk pipeline yang intensif CPU, 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 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.

Sebaiknya jangan mencatat log metrik pemrosesan per elemen dalam pipeline volume tinggi, karena logging tunduk pada batasan, 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 awal pekerja dan jumlah maksimum pekerja
  • Mode streaming (mode tepat satu kali atau mode setidaknya 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 tugas

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

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

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 yang intensif CPU terkadang diuntungkan dengan mengubah jenis mesin dari default. Untuk mengetahui informasi selengkapnya, lihat Jenis mesin.
  • Untuk workload yang intensif memori atau intensif komputasi, gunakan jenis mesin yang sesuai. Untuk mengetahui informasi selengkapnya, lihat Skor CoreMark VM menurut keluarga.
  • Tetapkan jumlah awal pekerja. Saat tugas ditingkatkan skalanya, pekerjaan harus didistribusikan ulang ke VM baru. Jika Anda mengetahui jumlah pekerja yang dibutuhkan tugas Anda, Anda dapat menghindari biaya ini dengan menetapkan jumlah awal pekerja. Untuk menetapkan jumlah awal pekerja, gunakan numWorkers atau num_workers opsi pipeline.
  • Tetapkan jumlah maksimum pekerja. Dengan menetapkan nilai untuk parameter ini, Anda berpotensi membatasi total biaya tugas Anda. Saat 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 maksimum. Untuk mengetahui informasi selengkapnya, lihat Penskalaan Otomatis Horizontal.
  • Gunakan penyesuaian yang tepat untuk menyesuaikan persyaratan resource untuk langkah-langkah pipeline tertentu.
  • Beberapa pipeline diuntungkan dengan penggunaan GPU. Untuk mengetahui informasi selengkapnya, lihat GPU dengan Dataflow. Dengan menggunakan penyesuaian yang tepat, Anda dapat mengonfigurasi GPU untuk langkah-langkah tertentu dari pipeline.
  • Pastikan Anda memiliki bandwidth jaringan yang cukup 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 Penjadwalan Resource Fleksibel (FlexRS). FlexRS mengurangi biaya pemrosesan batch dengan menemukan waktu terbaik untuk memulai tugas, dan lalu menggunakan kombinasi instance VM preemptible dan VM standar. Preemptible VM tersedia dengan harga yang jauh lebih rendah dibandingkan dengan VM standar, yang dapat menurunkan total biaya. Dengan menggunakan kombinasi VM preemptible dan VM standar, FlexRS membantu memastikan pipeline Anda berjalan meskipun Compute Engine menghentikan 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 dikenai biaya, sehingga menjalankan lebih sedikit tugas pada lebih banyak data dapat meningkatkan efisiensi.

Pastikan Dataflow Shuffle diaktifkan. Tugas batch menggunakan Dataflow Shuffle 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 pipeline Anda tidak mendapatkan manfaat dari penskalaan otomatis, nonaktifkan. Untuk mengetahui informasi selengkapnya, lihat Penskalaan Otomatis Horizontal.

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

Menghentikan tugas yang berjalan lama

Tetapkan tugas Anda agar otomatis berhenti jika melebihi waktu proses yang telah ditentukan. Jika Anda mengetahui perkiraan waktu yang dibutuhkan tugas Anda untuk berjalan, gunakan opsi layanan max_workflow_runtime_walltime_seconds 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 meningkatkan efisiensi. Sebaiknya gunakan Streaming Engine untuk tugas streaming Anda.

Mempertimbangkan mode setidaknya satu kali

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

Memilih model penetapan harga

Diskon abonemen (CUD) untuk tugas streaming Dataflow memberikan harga diskon sebagai imbalan atas komitmen Anda untuk terus menggunakan sejumlah resource komputasi Dataflow selama satu tahun atau lebih. CUD 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 Anda.

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

Menyesuaikan setelan penskalaan otomatis

Gunakan petunjuk penskalaan otomatis untuk menyesuaikan setelan penskalaan otomatis Anda. 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 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 tersebut, tetapkan jumlah thread per pekerja secara eksplisit 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 akan dihentikan. Namun, tugas mungkin terhenti hingga masalah teratasi. Buat kebijakan pemantauan untuk mendeteksi tanda-tanda pipeline yang terhenti, seperti peningkatan latensi sistem dan penurunan kesegaran 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 akan lebih murah. Faktor-faktor berikut dapat memengaruhi performa pipeline:

  • Keparalelan 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 tentang model Apache Beam dan model eksekusi Apache Beam.
  • Pelajari lebih lanjut tentang 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 logging:

  • Logging yang berlebihan dapat mengganggu performa.
  • Untuk mengurangi volume log, pertimbangkan untuk mengubah level log pipeline. Untuk mengetahui informasi selengkapnya, lihat Mengontrol volume log.
  • Jangan mencatat log elemen individual. Aktifkan sampling data.
  • Gunakan a pola surat mati untuk error per elemen, bukan mencatat log setiap error.

Pengujian

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

Uji pipeline skala besar dengan data pengujian realistis untuk workload 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 dari 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