Dalam publikasi, klien penayang mengirim pesan ke topik Pub/Sub. Berikut beberapa praktik terbaik untuk memublikasikan pesan ke Pub/Sub.
Dokumen ini mengasumsikan bahwa Anda sudah memahami proses memublikasikan pesan ke topik Pub/Sub.
Jika Anda baru menggunakan Pub/Sub, lihat salah satu panduan Memulai dan pelajari cara menjalankan Pub/Sub menggunakan konsol, gcloud CLI, atau library klien.
Mengambil tindakan berdasarkan respons dari publikasi
Saat panggilan publikasi library klien tingkat tinggi selesai, panggilan akan menampilkan objek mendatang yang berisi hasil operasi. Untuk menghindari pemblokiran permintaan publikasi individual, tangani hasilnya secara asinkron. Anda harus memutuskan cara terbaik untuk menangani kegagalan untuk kasus penggunaan Anda. Beberapa opsi mencakup:
- Mencatat error dan tidak melakukan tindakan lain (jika kasus penggunaan Anda tidak memerlukan publikasi semua pesan yang berhasil).
- Mencoba kembali publikasi pada kegagalan yang berpotensi sementara seperti error
Deadline exceeded. - Mempertahankan pesan ke file atau penyimpanan untuk mencoba kembali publikasinya nanti, terutama pada error yang memerlukan intervensi pengguna seperti
Not foundatauPermission denied. - Menyebarkan error ke layanan upstream yang mengirimkan pesan yang Anda coba publikasikan.
Jika Anda yakin Pub/Sub tidak mengirim pesan seperti yang diharapkan kepada pelanggan, pastikan Anda melacak hasil publikasi dan publikasi berhasil.
Melampirkan langganan atau mengaktifkan retensi topik sebelum Anda mulai memublikasikan
Jika Anda mulai memublikasikan ke topik yang tidak memiliki pelanggan terlampir, pesan tidak akan dipertahankan. Pesan ini tidak dapat dikirim ke langganan yang dilampirkan berikutnya. Oleh karena itu, sebelum Anda mulai memublikasikan pesan, lakukan salah satu hal berikut:
Melampirkan langganan ke topik. Pilih salah satu metode berikut:
Buat langganan dan tentukan topik selama proses. Pelajari cara membuat langganan pull, langganan push, langganan BigQuery, atau langganan Cloud Storage.
Aktifkan retensi pesan topik.
Retensi pesan topik memungkinkan langganan memutar ulang pesan yang dipublikasikan sebelum Anda membuat langganan. Jika retensi pesan topik diaktifkan, biaya penyimpanan untuk pesan yang dipertahankan oleh topik akan ditagih ke project tempat topik berada.
Mengonfigurasi pesan batch
Dalam Pub/Sub, pesan batch mengacu pada proses menggabungkan beberapa pesan ke dalam satu batch yang dipublikasikan dalam satu permintaan publikasi. Jika Anda menggunakan library klien untuk memublikasikan pesan, batching akan diaktifkan secara default. Batching (atau pengelompokan) pesan membantu penayang meningkatkan efisiensinya dan mengirim pesan dengan throughput yang lebih tinggi. Batching mengurangi biaya untuk memublikasikan data. Namun, batching juga membuat latensi untuk setiap pesan karena penayang menunggu batch terisi sebelum memublikasikan batch.
Latensi di Pub/Sub dapat memiliki dua jenis:
Latensi end-to-end adalah waktu yang diperlukan agar pesan dipublikasikan oleh penayang dan dikirim ke pelanggan yang sesuai untuk diproses.
Latensi publikasi adalah jumlah waktu yang diperlukan untuk memublikasikan pesan.
Saat menggunakan batching, peningkatan kedua jenis latensi adalah pertukaran untuk meningkatkan efisiensi dan throughput.
Anda dapat membuat batch pesan di library klien berdasarkan ukuran permintaan pesan, jumlah pesan, dan waktu. Saat mengonfigurasi setelan batch, Anda dapat menemukan keseimbangan yang tepat antara biaya, throughput, dan latensi yang sesuai dengan kasus penggunaan Anda.
Nilai default untuk variabel pesan batch dan nama variabel mungkin berbeda di seluruh library klien. Anda dapat menentukan satu atau ketiga nilai dalam library klien. Jika salah satu nilai untuk variabel pesan batch terpenuhi, library klien akan memublikasikan batch pesan berikutnya.
Untuk mengonfigurasi pesan batch untuk klien penayang, lihat Pesan batch dalam permintaan publikasi.
Mengonfigurasi kontrol alur untuk lonjakan pesan sementara
Jika klien penayang harus memproses sejumlah besar pesan, permintaan publikasi mungkin mulai terakumulasi dalam memori hingga pesan gagal dipublikasikan dengan error Deadline exceeded.
Untuk mengatasi lonjakan sementara dalam memublikasikan pesan, Anda dapat menggunakan kontrol alur di setelan penayang. Kontrol alur sisi penayang mencegah resource klien penayang kewalahan dengan terlalu banyak permintaan yang belum selesai.
Jika klien penayang dibatasi dalam hal memori, CPU, atau thread, sejumlah besar error Deadline exceeded akan dihasilkan.
Untuk mengonfigurasi kontrol alur di library klien, tetapkan nilai yang sesuai untuk variabel maximum outstanding messages dan maximum outstanding message bytes. Nilai ini menyeimbangkan throughput pesan dan kapasitas sistem.
Untuk memeriksa apakah library klien Anda mendukung kontrol alur penayang dan cara mengonfigurasi nya, lihat Kontrol alur.
Memahami bandwidth dan latensi jaringan
Throughput penayang Anda dibatasi oleh bandwidth jaringan dan jumlah permintaan yang dikirim. Jika bandwidth Anda bagus, tetapi latensi jaringan Anda tinggi, Anda tidak ingin membebani sistem dengan banyak permintaan kecil. Kontrol alur sisi penayang dapat membantu masalah jaringan sisi klien.
Throughput penayang Anda juga terikat CPU dan memori. Semakin banyak core mesin yang tersedia, semakin tinggi jumlah thread yang dapat Anda tetapkan untuk throughput publikasi yang lebih baik. Untuk memahami lebih lanjut cara memaksimalkan performa streaming, lihat Menguji klien Cloud Pub/Sub untuk memaksimalkan performa streaming.
Menyesuaikan variabel permintaan percobaan ulang untuk publikasi yang gagal
Saat pesan dipublikasikan oleh klien penayang, Anda mungkin melihat kegagalan publikasi. Kegagalan ini biasanya disebabkan oleh bottleneck sisi klien, seperti CPU layanan yang tidak memadai, kesehatan thread yang buruk, atau kemacetan jaringan. publisher retry policy menentukan perilaku jika terjadi kegagalan pengiriman pesan. Kebijakan percobaan ulang menentukan jumlah percobaan pengiriman pesan oleh Pub/Sub dan jangka waktu antara setiap percobaan.
Misalnya, di library klien Java untuk Pub/Sub, klien penayang berisi nilai berikut:
initialRetryDelay. Penundaan awal yang ditunggu penayang sebelum mencoba kembali operasi publikasi. Nilai default-nya adalah
100 milliseconds.retryDelayMultiplier. Faktor perkalian yang digunakan untuk menghitung penundaan antara percobaan ulang. Nilai default-nya adalah
4. Artinya, penundaan antara percobaan ulang adalah hingga100 milliseconds * 4 = 400 millisecondsuntuk percobaan ulang kedua , dan hingga400 milliseconds * 4 = 1600 millisecondsuntuk percobaan ulang ketiga.maxRetryDelay. Penundaan maksimum yang ditunggu penayang sebelum mencoba kembali operasi publikasi. Nilai default-nya adalah
60 seconds.initialRpcTimeout. Batas waktu awal yang ditunggu penayang agar panggilan RPC selesai. Nilai default-nya adalah
5 seconds.rpcTimeoutMultiplier. Faktor perkalian yang digunakan untuk menghitung batas waktu RPC. Nilai default-nya adalah
4.0. Artinya, batas waktu untuk panggilan RPC adalah hingga5 seconds * 4 = 20 secondsuntuk percobaan ulang kedua , dan hingga10 seconds * 4 = 40 secondsuntuk percobaan ulang ketiga.maxRpcTimeout. Batas waktu maksimum yang ditunggu penayang agar panggilan RPC selesai. Nilai default-nya adalah
600 seconds.totalTimeout. Batas waktu total untuk operasi publikasi. Hal ini mencakup waktu yang dihabiskan untuk menunggu panggilan RPC selesai dan waktu yang dihabiskan untuk menunggu di antara percobaan ulang. Nilai default-nya adalah
600 seconds.
Hanya lakukan penyesuaian pada nilai yang ditentukan jika Anda menemukan setelan percobaan ulang default tidak cukup untuk kasus penggunaan Anda. Misalnya, memublikasikan sejumlah besar pesan tidak mengharuskan Anda meningkatkan nilai initialRetryDelay dan maxRetryDelay. Namun, Anda dapat menyesuaikan kontrol alur dan batching dalam situasi tersebut. Jika Anda memublikasikan dari koneksi internet yang tidak stabil atau koneksi yang dibatasi bandwidth, Anda dapat bereksperimen dengan nilai untuk variabel initialRpcTimeout, maxRpcTimeout, dan rpcTimeoutMultiplier. Untuk
nilai yang direkomendasikan, lihat
Operasi publikasi gagal dengan DEADLINE_EXCEEDED.
Menggunakan kebijakan penyimpanan pesan untuk memastikan lokalitas data
Kebijakan penyimpanan pesan topik Pub/Sub menawarkan cara untuk memastikan bahwa pesan yang dipublikasikan ke topik tidak pernah dipertahankan di luar kumpulan Google Cloud region yang Anda tentukan, terlepas dari asal permintaan publikasi berasal.
Gunakan kebijakan penyimpanan pesan untuk menentukan daftar Google Cloud region tempat Pub/Sub diizinkan menyimpan data pesan di disk. Saat pesan dipublikasikan ke region yang tidak ada dalam daftar ini, permintaan akan diteruskan ke region terdekat yang diizinkan untuk diproses. Kebijakan ini dapat dikonfigurasi pada topik atau sebagai kebijakan organisasi untuk project, folder project, atau seluruh organisasi. Saat kebijakan organisasi dikonfigurasi, kebijakan topik individual hanya dapat diubah dengan cara yang tidak melanggar kebijakan organisasi.
Misalnya, perusahaan yang beroperasi di Eropa dapat menggunakan kebijakan penyimpanan pesan untuk memastikan bahwa semua data disimpan di region Uni Eropa agar mematuhi hukum setempat.
Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi kebijakan penyimpanan pesan.
Praktik terbaik untuk pesan yang diurutkan dalam publikasi
Jika Anda menggunakan pengurutan pesan, pastikan hal berikut:
Menggunakan endpoint lokasi. Pengurutan pesan dipertahankan di sisi publikasi dan dalam region. Dengan kata lain, jika Anda memublikasikan pesan ke beberapa region, hanya pesan dalam region yang sama yang dikirim dalam urutan yang konsisten. Jika semua pesan Anda dipublikasikan ke region yang sama, tetapi pelanggan Anda tersebar di seluruh region, pelanggan akan menerima semua pesan secara berurutan. Gunakan endpoint lokasi untuk memublikasikan pesan ke region yang sama.
Mengonfigurasi fungsi publikasi lanjutan. Saat library klien mencoba kembali permintaan dan pesan memiliki kunci pengurutan, library klien akan berulang kali mencoba kembali permintaan, terlepas dari setelan percobaan ulang. Jika terjadi error yang tidak dapat dicoba kembali, library klien tidak akan memublikasikan pesan dan berhenti memublikasikan pesan lain dengan kunci pengurutan yang sama. Saat Anda siap melanjutkan publikasi pada kunci pengurutan yang publikasinya gagal, panggil metode
resumePublish.
Ringkasan praktik terbaik
Tabel berikut meringkas praktik terbaik yang direkomendasikan dalam dokumen ini:
| Topik | Tugas |
|---|---|
| Mengonfigurasi retensi pesan | Lampirkan langganan sebelum Anda memublikasikan atau mengaktifkan retensi pesan. |
| Pesan batch dalam permintaan publikasi | Buat batch atau kelompok pesan untuk meningkatkan efisiensi penayang dan mengirim pesan dengan throughput yang lebih tinggi. |
| Kontrol alur | Konfigurasi kontrol alur di setelan penayang untuk menangani lonjakan traffic sementara. |
| Menguji klien Pub/Sub untuk memaksimalkan performa streaming | Skalakan throughput penayang dengan peningkatan core mesin dan bandwidth jaringan yang tersedia. |
| Permintaan percobaan ulang | Lakukan penyesuaian pada nilai yang ditentukan dari kebijakan percobaan ulang penayang hanya jika Anda menemukan setelan default tidak cukup untuk kasus penggunaan Anda. |
| Mengonfigurasi kebijakan penyimpanan pesan | Gunakan kebijakan penyimpanan pesan untuk menyimpan data pesan di disk hanya di lokasi tertentu. |
| Menggunakan endpoint lokasi saat menggunakan kunci pengurutan dalam publikasi | Saat menggunakan pesan yang diurutkan, gunakan endpoint lokasi dan konfigurasi fungsi publikasi lanjutan untuk kegagalan publikasi. |