Dokumen ini menjelaskan praktik terbaik untuk mengoptimalkan tugas Dataflow Anda dengan tujuan meminimalkan biaya. Artikel 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, faktor yang memengaruhi biaya tugas, dan saran untuk 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 akan 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 Anda 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 Cost di antarmuka pemantauan Dataflow untuk memantau perkiraan biaya tugas Anda. Perkiraan biaya mungkin tidak mencerminkan biaya tugas yang sebenarnya karena berbagai alasan, seperti diskon kontrak, tetapi dapat memberikan dasar pengukuran 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 Google Cloud yang mendetail secara otomatis sepanjang hari ke set data BigQuery. Data penagihan mencakup data penggunaan, estimasi biaya, dan harga.
- Untuk menghindari biaya tak 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 dapat meningkatkan efisiensi pipeline.
- Gunakan antarmuka pemantauan tugas Dataflow untuk mengidentifikasi masalah dalam 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 dengan terlalu banyak waktu proses.
- Gunakan Metrics Explorer untuk melihat metrik tugas Dataflow yang mendetail. Anda dapat menggunakan metrik kustom untuk mengambil data performa. Metrik
Distributionsangat berguna untuk mengumpulkan data performa. - Untuk pipeline yang menggunakan banyak CPU, gunakan Cloud Profiler untuk mengidentifikasi bagian kode pipeline yang paling banyak menggunakan resource.
- Gunakan pengambilan sampel data untuk mengidentifikasi masalah pada data Anda. Dengan pengambilan sampel data, Anda dapat mengamati data di setiap langkah pipeline Dataflow. Dengan menampilkan input dan output yang 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 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 worker VM
- Mode penskalaan otomatis
- Jumlah awal worker dan jumlah maksimum worker
- Mode streaming (mode persis 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 membantu untuk semua pipeline.
Sebelum melakukan perubahan berskala besar, uji perubahan pada pipeline kecil yang menggunakan subset data Anda. Untuk informasi selengkapnya, lihat Menjalankan eksperimen kecil untuk tugas besar dalam "Praktik terbaik untuk pipeline batch besar".
Lokasi pekerjaan
Sebagian besar tugas Dataflow berinteraksi dengan layanan lain seperti penyimpanan data dan sistem pesan. Pertimbangkan lokasi tempat-tempat ini.
- Jalankan tugas Anda di region yang sama dengan resource yang digunakan tugas Anda.
- Buat bucket Cloud Storage untuk menyimpan file tugas sementara dan staging di region yang sama dengan tugas Anda. Untuk mengetahui informasi selengkapnya, lihat
opsi pipeline
gcpTempLocationdantemp_location.
Menyesuaikan jenis mesin
Penyesuaian berikut pada worker VM 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 menggunakan banyak CPU terkadang mendapatkan manfaat dari perubahan jenis mesin dari default. Untuk mengetahui informasi selengkapnya, lihat Jenis mesin.
- Untuk workload yang membutuhkan banyak memori atau komputasi, gunakan jenis mesin yang sesuai. Untuk mengetahui informasi selengkapnya, lihat Skor CoreMark VM menurut kelompok.
- Tetapkan jumlah worker awal. Saat tugas ditingkatkan skalanya, pekerjaan harus didistribusikan ulang ke VM baru. Jika mengetahui jumlah worker yang dibutuhkan tugas,
Anda dapat menghindari biaya ini dengan menetapkan jumlah worker awal. Untuk menetapkan
jumlah awal worker, gunakan opsi pipeline
numWorkersataunum_workers. - Tetapkan jumlah maksimum worker. Dengan menetapkan nilai untuk parameter ini, Anda berpotensi membatasi total biaya tugas. Saat Anda pertama kali menguji pipeline, mulailah dengan nilai maksimum yang relatif rendah. Kemudian, tingkatkan nilainya hingga cukup tinggi untuk menjalankan workload produksi. Pertimbangkan SLO pipeline Anda sebelum menetapkan nilai maksimum. Untuk mengetahui informasi selengkapnya, lihat Penskalaan Otomatis Horizontal.
- Gunakan right fitting 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 cukup untuk mengakses data dari worker VM, 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 dengan VM standar, yang dapat menurunkan total biaya. Dengan menggunakan kombinasi preemptible VM dan VM standar, FlexRS membantu memastikan pipeline Anda membuat progres meskipun Compute Engine melakukan preemption pada preemptible VM.
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 worker VM 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 menurut Anda pipeline Anda tidak mendapatkan manfaat dari penskalaan otomatis, nonaktifkan fitur ini. Untuk mengetahui informasi selengkapnya, lihat Penskalaan Otomatis Horizontal.
Anda juga dapat menggunakan
penskalaan thread dinamis agar
Dataflow menyesuaikan jumlah thread berdasarkan pemakaian CPU.
Atau, jika Anda mengetahui jumlah thread yang optimal untuk tugas tersebut, tetapkan jumlah thread per worker secara eksplisit menggunakan opsi pipeline numberOfWorkerHarnessThreads atau number_of_worker_harness_threads.
Menghentikan tugas yang berjalan lama
Tetapkan tugas Anda agar berhenti secara otomatis jika melebihi waktu proses yang telah ditentukan. Jika
Anda mengetahui perkiraan waktu yang diperlukan untuk menjalankan tugas, 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 worker VM 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 persis satu kali dan mode minimal satu kali. Jika workload Anda dapat menoleransi data duplikat, mode minimal satu kali dapat mengurangi biaya tugas secara signifikan. Sebelum mengaktifkan mode minimal satu kali, 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 satu tahun 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 untuk menggunakan 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 worker, memori worker, dan Unit Komputasi Streaming Engine.
Menyesuaikan setelan penskalaan otomatis
Gunakan petunjuk penskalaan otomatis dan tingkat latensi 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 Update opsi tugas dalam penerbangan.
Jika menurut Anda pipeline Anda tidak mendapatkan manfaat dari penskalaan otomatis, nonaktifkan fitur ini. Untuk mengetahui informasi selengkapnya, lihat Penskalaan Otomatis Horizontal.
Jika Anda mengetahui jumlah thread yang optimal untuk tugas tersebut, tetapkan jumlah thread per worker secara eksplisit menggunakan opsi pipeline numberOfWorkerHarnessThreads atau number_of_worker_harness_threads.
Menghentikan tugas yang berjalan lama
Untuk tugas streaming, Dataflow mencoba ulang item tugas yang gagal tanpa batas waktu. Tugas tidak dihentikan. Namun, tugas mungkin terhenti hingga masalahnya teratasi. Buat kebijakan pemantauan untuk mendeteksi tanda-tanda pipeline yang terhenti, seperti peningkatan latensi sistem dan penurunan keaktualan data. Terapkan logging error dalam kode pipeline Anda untuk membantu mengidentifikasi item kerja yang gagal berulang kali.
- Untuk memantau error pipeline, lihat Jumlah log error worker.
- Untuk memecahkan masalah error, lihat Memecahkan masalah error Dataflow.
Performa pipeline
Pipeline yang berjalan lebih cepat mungkin memerlukan biaya lebih sedikit. 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 model Apache Beam dan model eksekusi Apache Beam.
- Pelajari lebih lanjut siklus proses pipeline,
termasuk cara Dataflow mengelola paralelisasi dan
strategi pengoptimalan yang digunakannya. Tugas Dataflow menggunakan beberapa worker VM, dan setiap worker menjalankan beberapa thread. Paket elemen dari
PCollectiondidistribusikan ke setiap thread pekerja.
Gunakan praktik terbaik berikut saat Anda menulis kode pipeline:
- Jika memungkinkan, gunakan versi Apache Beam SDK terbaru yang didukung. Ikuti catatan rilis untuk memahami perubahan dalam berbagai versi.
- Ikuti praktik terbaik untuk menulis kode pipeline.
- Ikuti praktik terbaik konektor I/O.
- Untuk pipeline Python, pertimbangkan untuk menggunakan container kustom. Dependensi pra-pengemasan mengurangi waktu start-up worker.
Logging
Ikuti praktik terbaik berikut saat melakukan logging:
- Logging yang berlebihan dapat mengganggu performa.
- Untuk mengurangi volume log, pertimbangkan untuk mengubah tingkat log pipeline. Untuk mengetahui informasi selengkapnya, lihat Mengontrol volume log.
- Jangan mencatat elemen satu per satu. Aktifkan sampling data.
- Gunakan pola pesan yang tidak terkirim untuk error per elemen, bukan mencatat setiap error ke dalam log.
Pengujian
Menguji pipeline memiliki banyak manfaat, termasuk membantu upgrade SDK, refaktorisasi pipeline, dan peninjauan kode. Banyak pengoptimalan, seperti mengerjakan ulang transformasi kustom yang menggunakan banyak CPU, dapat diuji secara lokal tanpa perlu menjalankan tugas di Dataflow.
Uji pipeline berskala besar dengan data pengujian yang 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 status stabil, dan memproses backlog besar untuk menyimulasikan pemulihan dari error.
Untuk mengetahui informasi selengkapnya tentang cara membuat pengujian unit, pengujian integrasi, dan pengujian menyeluruh, lihat Menguji pipeline.
Untuk contoh pengujian, lihat
repositori GitHub
dataflow-ordered-processing.
Langkah berikutnya
- Merencanakan pipeline Dataflow
- Mengembangkan dan menguji pipeline Dataflow
- Memecahkan masalah pipeline