Latensi tail yang tinggi saat memublikasikan pesan dapat disebabkan oleh penundaan jaringan sementara atau kelambatan sementara di sisi server. Hedging publikasi memungkinkan klien penayang Pub/Sub mengirim permintaan publikasi cadangan (hedging) secara paralel jika permintaan yang sedang berjalan tidak selesai dalam penundaan yang dikonfigurasi, menggunakan respons mana pun yang ditampilkan terlebih dahulu.
Dokumen ini memberikan informasi tentang penggunaan hedging publikasi dengan pesan yang dipublikasikan ke topik.
Sebelum memulai
Sebelum mengonfigurasi alur kerja publikasi, pastikan Anda telah menyelesaikan tugas-tugas berikut:
- Pelajari topik dan alur kerja publikasi.
- Membuat topik.
Peran yang diperlukan
Untuk mendapatkan izin yang
diperlukan untuk mengirim permintaan publikasi yang dilindungi ke topik,
minta administrator untuk memberi Anda
peran IAM Pub/Sub Publisher (roles/pubsub.publisher) pada topik.
Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.
Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.
Anda memerlukan izin tambahan untuk membuat atau memperbarui topik dan langganan.
Tentang hedging publikasi
Setelan hedging mengontrol cara dan waktu library klien Pub/Sub mengirim permintaan publikasi yang di-hedge. Publikasi hedging dinonaktifkan secara default. Jika diaktifkan, library klien memiliki setelan hedging berikut:
- Penundaan hedge: jumlah waktu yang ditunggu library klien sebelum mengirim permintaan publikasi tambahan secara paralel jika permintaan sebelumnya belum selesai. Nilai defaultnya adalah 1 detik, dan nilai yang dikonfigurasi harus antara 100 milidetik dan 10 detik.
- Token maksimum: jumlah maksimum token yang dapat diakumulasikan oleh library klien untuk mengirim permintaan publikasi yang dilindungi. Setiap permintaan publikasi yang dilindungi nilai menggunakan 1 token. Nilai defaultnya adalah 50, dan nilai yang dikonfigurasi harus antara 1 dan 250.
- Rasio pengisian ulang: jumlah token yang ditambahkan untuk setiap permintaan publikasi yang berhasil. Nilai ini mengontrol pecahan maksimum permintaan publikasi yang dapat dilindungi dari waktu ke waktu. Misalnya, rasio pengisian ulang sebesar 0,1 memungkinkan hingga 10% permintaan publikasi di-hedging. Nilai defaultnya adalah 0,1, dan nilai yang dikonfigurasi harus antara 0,001 dan 0,2.
Untuk melindungi permintaan publikasi, penundaan perlindungan harus lebih singkat daripada waktu tunggu permintaan awal dan total waktu tunggu dalam setelan percobaan ulang penayang. Jika tidak, klien penayang akan gagal melakukan inisialisasi. Jika hedging publikasi diaktifkan, library klien akan mengirimkan permintaan publikasi sebagai berikut:
- Jika permintaan publikasi yang sedang berlangsung tidak selesai dalam penundaan hedge dan setidaknya satu token tersedia, library klien akan menggunakan satu token dan mengirim permintaan publikasi tambahan untuk batch pesan yang sama secara paralel sambil mempertahankan permintaan awal yang belum selesai.
- Jika tidak ada permintaan yang sedang berjalan yang selesai setelah penundaan hedge lainnya, library klien akan terus mengirim permintaan hedge tambahan pada interval penundaan hedge selama token tetap tersedia dan total waktu tunggu belum berakhir.
- Segera setelah permintaan publikasi yang sedang berlangsung untuk batch berhasil, library klien akan menyelesaikan operasi publikasi, membatalkan upaya yang sedang berlangsung yang tersisa untuk batch tersebut, dan meningkatkan token yang tersedia berdasarkan rasio pengisian ulang, hingga token maksimum.
Melindungi permintaan publikasi
Tidak seperti permintaan percobaan ulang, yang menunggu permintaan publikasi yang sedang berlangsung gagal atau kehabisan waktu, hedging publikasi membuat permintaan awal tetap berjalan sambil mengirim permintaan hedging serentak. Tindakan ini mengurangi latensi tail tanpa membatalkan permintaan yang akan berhasil sebelum waktunya.
Karena beberapa permintaan untuk batch pesan yang sama dapat dikirim secara bersamaan, lebih dari satu upaya mungkin berhasil sebelum upaya yang tersisa dibatalkan, karena pembatalan permintaan publikasi dilakukan sesuai upaya terbaik. Akibatnya, Anda mungkin menerima pesan duplikat dengan ID pesan yang berbeda, yang dapat meningkatkan traffic jaringan klien dan biaya Pub/Sub untuk memublikasikan dan mengirimkan duplikat tersebut. Lihat "Memecahkan masalah pesan duplikat, yang dikirim ulang, atau yang tidak ada" untuk mendapatkan tips tentang cara menangani pesan duplikat.
Jika penurunan kualitas layanan menyebabkan peningkatan latensi atau error yang berkelanjutan, setelan token maksimum dan rasio pengisian ulang akan mencegah rasio publikasi yang dilindungi nilai menjadi terlalu tinggi. Karena token hanya ditambahkan saat permintaan publikasi berhasil, kelambatan atau error yang berkelanjutan akan dengan cepat menghabiskan token yang tersedia dan otomatis membatasi permintaan yang dilindungi.
Kode contoh ini menunjukkan cara membuat penayang dengan setelan hedging kustom. Tidak semua library klien mendukung hedging publikasi; lihat dokumentasi Referensi API untuk bahasa yang Anda pilih.
Java
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Java di Panduan Memulai: Menggunakan Library Klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Java Pub/Sub.
Publikasikan hedging dengan kunci pengurutan
Hedging publikasi tidak dapat digunakan dengan pengurutan pesan. Karena hedging publikasi mengirimkan permintaan publikasi serentak untuk batch pesan yang sama, layanan Pub/Sub mungkin menerima dan memproses permintaan tersebut secara tidak berurutan. Jika Anda mengaktifkan pengurutan pesan dan hedging publikasi di klien penayang, pembuatan penayang akan gagal dengan error.
Tips dan praktik terbaik
Pertimbangkan praktik terbaik berikut saat mengonfigurasi hedging publikasi:
- Gunakan hedging untuk latensi tail sementara: Hedging publikasi dirancang untuk memperhalus lonjakan latensi berdurasi singkat yang disebabkan oleh penundaan jaringan sementara atau kelambatan singkat di sisi server. Jangan mengandalkan hedging untuk mengurangi pemadaman layanan yang berkepanjangan atau error yang terus-menerus.
- Hedging dengan kebijakan percobaan ulang: Tetapkan waktu tunggu permintaan awal yang lebih besar di setelan percobaan ulang Anda bersama dengan penundaan hedging yang lebih singkat. Waktu tunggu yang singkat dan agresif akan membatalkan permintaan sebelum waktunya dan memicu percobaan ulang penuh, sehingga mengabaikan pekerjaan yang sudah berjalan di server. Waktu tunggu yang lebih lama memungkinkan permintaan asli selesai jika hanya sedikit tertunda.
- Kontrol alur dan hedging sisi klien: Hedging publikasi tidak menyelesaikan penundaan sisi klien, seperti pertentangan CPU atau thread starvation. Jika latensi publikasi yang tinggi disebabkan oleh antrean pesan di memori klien, penggunaan kontrol alur untuk mengelola ukuran antrean dapat membantu, meskipun batasan resource host juga harus diatasi.
- Pantau metrik latensi dan throughput publikasi: Gunakan
grafik metrik Monitoring seperti
topic/send_request_latenciesuntuk mengidentifikasi lonjakan latensi tail dan menentukan apakah hedging dapat membantu. Tingkat errorCANCELLEDyang tinggi mungkin menunjukkan bahwa batas waktu permintaan Anda dikonfigurasi terlalu rendah. Jika disesuaikan secara efektif, hedging publikasi akan menjaga throughput pesan dan biaya byte topik tetap konstan bahkan selama latensi akhir publikasi.
Langkah berikutnya
Untuk mempelajari cara mengonfigurasi opsi publikasi lanjutan, lihat referensi berikut: