Dokumen ini menjelaskan praktik terbaik untuk mengoptimalkan tugas Dataflow dengan tujuan meminimalkan biaya. Artikel ini menjelaskan faktor yang memengaruhi biaya dan memberikan teknik untuk memantau serta 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 membuat alasan tentang kompromi antara biaya dan faktor lainnya.
- Jika pipeline Anda memerlukan latensi transfer menyeluruh yang rendah, biaya pipeline mungkin lebih tinggi.
- Jika Anda perlu memproses data yang terlambat, 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 subkumpulan data Anda. Untuk banyak pipeline, teknik ini dapat memberikan estimasi biaya.
- Gunakan halaman Biaya di antarmuka pemantauan Dataflow untuk memantau estimasi biaya tugas Anda. Perkiraan biaya mungkin tidak mencerminkan biaya pekerjaan yang sebenarnya karena berbagai alasan, seperti diskon kontrak, tetapi dapat memberikan dasar pengukuran yang baik untuk pengoptimalan biaya. Untuk 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 tidak terduga, buat pemberitahuan pemantauan saat tugas Dataflow Anda melebihi nilai minimum yang Anda tentukan. Untuk mengetahui informasi selengkapnya, lihat Menggunakan Cloud Monitoring untuk pipeline Dataflow.
Pemantauan tugas
Pantau tugas Anda dan identifikasi area yang dapat Anda tingkatkan efisiensinya pada 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 lambat, tahap macet, atau langkah dengan terlalu banyak waktu tunggu.
- Gunakan Metrics Explorer untuk melihat metrik tugas Dataflow yang mendetail. Anda dapat menggunakan metrik kustom untuk mengambil 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.
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 VM pekerja
- Mode penskalaan otomatis
- Jumlah awal pekerja dan jumlah maksimum pekerja
- Mode streaming (mode persis sekali atau mode minimal sekali)
Bagian ini menjelaskan potensi perubahan yang dapat Anda lakukan untuk mengoptimalkan tugas. Untuk menentukan apakah saran ini sesuai dengan 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 sebagian 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 lokasinya.
- Jalankan tugas 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 informasi selengkapnya, lihat
opsi pipeline
gcpTempLocation
dantemp_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 mendapatkan manfaat dari perubahan 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 pekerja awal. Saat tugas diskalakan, pekerjaan harus
didistribusikan ulang ke VM baru. Jika mengetahui jumlah pekerja yang diperlukan tugas,
Anda dapat menghindari biaya ini dengan menetapkan jumlah pekerja awal. Untuk menetapkan
jumlah pekerja awal, gunakan opsi pipeline
numWorkers
ataunum_workers
. - Tetapkan jumlah maksimum pekerja. Dengan menetapkan nilai untuk parameter ini, Anda berpotensi membatasi total biaya tugas. Saat pertama kali menguji pipeline, mulailah dengan maksimum yang relatif rendah. Kemudian, tingkatkan nilai hingga cukup tinggi untuk menjalankan beban kerja produksi. Pertimbangkan SLO pipeline Anda sebelum menetapkan maksimum. Untuk informasi selengkapnya, lihat Penskalaan Otomatis Horizontal.
- Beberapa pipeline mendapatkan manfaat dari penggunaan GPU. Untuk mengetahui informasi selengkapnya, lihat GPU dengan Dataflow.
- Pastikan Anda memiliki cukup bandwidth jaringan untuk mengakses data dari VM pekerja, terutama saat Anda perlu mengakses data on-premise.
Mengoptimalkan setelan untuk tugas batch
Bagian ini memberikan saran untuk mengoptimalkan setelan runtime untuk tugas batch. Untuk tugas batch, tahap tugas dieksekusi 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, 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 VM standar, FlexRS membantu memastikan bahwa pipeline Anda mengalami progres meskipun Compute Engine mem-preempt VM preemptible.
Hindari menjalankan tugas yang sangat kecil
Jika memungkinkan, hindari menjalankan tugas yang memproses data dalam jumlah 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 Dataflow Shuffle 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. Untuk informasi selengkapnya, lihat Penskalaan Otomatis Horizontal.
Anda juga dapat menggunakan
penskalaan thread dinamis untuk memungkinkan
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 opsi pipeline numberOfWorkerHarnessThreads
atau number_of_worker_harness_threads
.
Menghentikan tugas yang berjalan lama
Tetapkan tugas Anda untuk otomatis berhenti jika melebihi waktu operasi yang telah ditentukan. Jika
Anda mengetahui perkiraan waktu yang diperlukan tugas untuk berjalan, gunakan
opsi layanan
max_workflow_runtime_walltime_seconds
untuk otomatis menghentikan tugas 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.
Pertimbangkan 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 menoleransi data duplikat, mode setidaknya sekali dapat mengurangi biaya tugas Anda secara signifikan. Sebelum mengaktifkan mode setidaknya 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 setahun atau lebih. CUD Dataflow berguna jika pembelanjaan Anda untuk kapasitas komputasi Dataflow untuk tugas streaming melibatkan minimum yang dapat diprediksi yang dapat Anda janjikan selama minimal satu tahun. Dengan menggunakan CUD, Anda berpotensi mengurangi biaya tugas Dataflow.
Selain itu, pertimbangkan 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 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 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 informasi selengkapnya, lihat Pembaruan opsi tugas dalam penerbangan.
Jika Anda merasa bahwa pipeline tidak mendapatkan manfaat dari penskalaan otomatis, nonaktifkan. Untuk informasi selengkapnya, lihat Penskalaan Otomatis Horizontal.
Jika Anda mengetahui jumlah thread yang optimal untuk tugas, tetapkan secara eksplisit
jumlah thread per pekerja menggunakan opsi pipeline numberOfWorkerHarnessThreads
atau
number_of_worker_harness_threads
.
Menghentikan tugas yang berjalan lama
Untuk tugas streaming, Dataflow akan mencoba kembali item pekerjaan 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 menurunnya keaktualan data. Terapkan logging error dalam kode pipeline Anda untuk membantu mengidentifikasi item pekerjaan yang gagal berulang kali.
- Untuk memantau error pipeline, lihat Jumlah log error pekerja.
- Untuk memecahkan masalah error, lihat Memecahkan masalah error Dataflow.
Performa pipeline
Pipeline yang berjalan lebih cepat mungkin lebih murah. Faktor-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 paralelisasi 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:
- 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 penampung kustom. Dependensi pra-paket mengurangi waktu startup pekerja.
Logging
Ikuti praktik terbaik berikut saat membuat log:
- Logging yang berlebihan dapat menurunkan performa.
- Untuk mengurangi volume log, pertimbangkan untuk mengubah level log pipeline. Untuk informasi selengkapnya, lihat Mengontrol volume log.
- Jangan mencatat log setiap elemen. Sebagai gantinya, aktifkan sampling data.
- Gunakan pola dead letter untuk error per elemen, bukan mencatat setiap error ke dalam log.
Pengujian
Menguji pipeline Anda memiliki banyak manfaat, termasuk membantu upgrade SDK, pemfaktoran ulang pipeline, dan peninjauan kode. Banyak pengoptimalan, seperti mengerjakan 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 dalam dua mode: dalam status stabil, dan memproses backlog besar untuk menyimulasikan pemulihan error.
Untuk informasi selengkapnya tentang cara membuat pengujian unit, pengujian integrasi, dan
pengujian menyeluruh, lihat
Menguji pipeline Anda.
Untuk contoh pengujian, lihat repositori GitHub
dataflow-ordered-processing
.
Langkah selanjutnya
- Merencanakan pipeline Dataflow
- Mengembangkan dan menguji pipeline Dataflow
- Memecahkan masalah pipeline