Praktik terbaik untuk memublikasikan ke topik Pub/Sub

Dalam publikasi, klien penayang mengirim pesan ke topik Pub/Sub. Berikut adalah 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 tersebut akan menampilkan objek future yang berisi hasil operasi. Untuk menghindari pemblokiran permintaan publikasi individual, tangani hasilnya secara asinkron. Anda harus memutuskan cara terbaik untuk menangani kegagalan dalam kasus penggunaan Anda. Beberapa opsinya antara lain:

  • Catat error dan jangan lakukan hal lain (jika kasus penggunaan Anda tidak memerlukan keberhasilan publikasi semua pesan).
  • Coba publikasikan lagi jika terjadi kegagalan yang berpotensi sementara seperti error Deadline exceeded.
  • Pertahankan pesan ke file atau penyimpanan untuk mencoba kembali publikasinya nanti, terutama pada error yang memerlukan intervensi pengguna seperti Not found atau Permission denied.
  • Menyebarkan error ke layanan upstream yang mengirimkan pesan yang Anda coba publikasikan.

Jika Anda yakin Pub/Sub tidak mengirimkan pesan seperti yang diharapkan kepada pelanggan, pastikan Anda melacak hasil publikasi dan bahwa publikasi tersebut berhasil.

Jika publikasi berhasil, hasil panggilan publikasi adalah ID pesan dari pesan yang dipublikasikan.

Mempertahankan ID pesan

Untuk mempermudah pemecahan masalah, penayang dan pelanggan harus mempertahankan ID pesan dari pesan yang dipublikasikan. Anda dapat menyimpan ID setiap pesan yang dipublikasikan atau mengaktifkan logging ID pesan sesuai kebutuhan. Menyimpan ID pesan akan memudahkan pemecahan masalah pesan duplikat, pengiriman ulang, kehilangan data, dan masalah umum lainnya. Untuk mengetahui informasi selengkapnya, lihat Menangani duplikat.

Lampirkan langganan atau aktifkan retensi topik sebelum Anda mulai memublikasikan

Jika Anda mulai memublikasikan ke topik yang tidak memiliki pelanggan yang terlampir, pesan tidak akan dipertahankan. Pesan ini tidak dapat dikirim ke langganan yang dilampirkan setelahnya. Oleh karena itu, sebelum Anda mulai memublikasikan pesan, lakukan salah satu hal berikut:

Mengonfigurasi pesan batch

Dalam Pub/Sub, pesan batch mengacu pada proses penggabungan beberapa pesan menjadi satu batch yang dipublikasikan dalam satu permintaan publikasi. Jika Anda menggunakan library klien untuk memublikasikan pesan, pengelompokan akan diaktifkan secara default. Pengelompokan pesan membantu penayang meningkatkan efisiensi dan mengirim pesan dengan throughput yang lebih tinggi. Pengelompokan mengurangi biaya untuk memublikasikan data. Namun, pengelompokan juga menimbulkan latensi untuk setiap pesan karena penayang menunggu batch terisi sebelum memublikasikan batch tersebut.

Latensi di Pub/Sub dapat berupa salah satu dari dua jenis berikut:

  • Latensi menyeluruh adalah waktu yang diperlukan agar pesan dipublikasikan oleh penayang dan dikirimkan ke pelanggan yang sesuai untuk diproses.

  • Latensi publikasi adalah jumlah waktu yang diperlukan untuk memublikasikan pesan.

Saat menggunakan pengelompokan, peningkatan kedua jenis latensi ini merupakan konsekuensi dari peningkatan efisiensi dan throughput.

Anda dapat mengelompokkan pesan dalam 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 berbagai library klien. Anda dapat menentukan satu atau ketiga nilai di 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 pesan dalam jumlah besar, permintaan publikasi mungkin mulai menumpuk di 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 karena terlalu banyak permintaan yang belum terselesaikan. Jika klien penayang mengalami keterbatasan 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 pesan yang belum terselesaikan maksimum dan byte pesan yang belum terselesaikan maksimum. Nilai ini menyeimbangkan throughput pesan dan kapasitas sistem.

Untuk memeriksa apakah library klien Anda mendukung kontrol alur penayang dan untuk mengonfigurasinya, lihat Kontrol alur.

Memahami bandwidth dan latensi jaringan Anda

Throughput penayang dibatasi oleh bandwidth jaringan dan jumlah permintaan yang dikirim. Jika bandwidth Anda bagus, tetapi latensi jaringan Anda tinggi, sebaiknya jangan membebani sistem dengan banyak permintaan kecil. Kontrol alur sisi penayang dapat membantu mengatasi masalah jaringan sisi klien.

Throughput penayang Anda juga terikat CPU dan memori. Dengan lebih banyak core mesin yang tersedia, Anda dapat menetapkan jumlah thread yang lebih tinggi untuk throughput publikasi yang lebih baik. Untuk lebih memahami 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, kondisi thread yang buruk, atau kemacetan jaringan. publisher retry policy menentukan perilaku jika terjadi kegagalan pengiriman pesan. Kebijakan percobaan ulang menentukan berapa kali Pub/Sub mencoba mengirimkan pesan dan durasi waktu di antara setiap upaya.

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 defaultnya adalah 100 milliseconds.

  • retryDelayMultiplier. Faktor perkalian yang digunakan untuk menghitung penundaan di antara percobaan ulang. Nilai defaultnya adalah 4. Artinya, penundaan antara percobaan ulang adalah hingga 100 milliseconds * 4 = 400 milliseconds untuk percobaan ulang kedua, dan hingga 400 milliseconds * 4 = 1600 milliseconds untuk percobaan ulang ketiga.

  • maxRetryDelay. Penundaan maksimum yang ditunggu penayang sebelum mencoba ulang operasi publikasi. Nilai defaultnya adalah 60 seconds.

  • initialRpcTimeout. Waktu tunggu awal yang ditunggu penayang hingga panggilan RPC selesai. Nilai defaultnya adalah 5 seconds.

  • rpcTimeoutMultiplier. Faktor perkalian yang digunakan untuk menghitung waktu tunggu RPC. Nilai defaultnya adalah 4.0. Artinya, waktu tunggu untuk panggilan RPC adalah hingga 5 seconds * 4 = 20 seconds untuk percobaan ulang kedua, dan hingga 10 seconds * 4 = 40 seconds untuk percobaan ulang ketiga.

  • maxRpcTimeout. Waktu tunggu maksimum yang ditunggu penayang hingga panggilan RPC selesai. Nilai defaultnya adalah 600 seconds.

  • totalTimeout. Waktu tunggu 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 defaultnya adalah 600 seconds.

Hanya lakukan penyesuaian pada nilai yang ditentukan jika Anda merasa setelan percobaan ulang default tidak memadai untuk kasus penggunaan Anda. Misalnya, memublikasikan pesan dalam jumlah besar tidak mengharuskan Anda meningkatkan nilai initialRetryDelay dan maxRetryDelay. Namun, Anda dapat menyesuaikan kontrol alur dan pengelompokan 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 mengetahui 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 akan pernah dipertahankan di luar kumpulan regionGoogle Cloud yang Anda tentukan, terlepas dari asal permintaan publikasi.

Gunakan kebijakan penyimpanan pesan untuk menentukan daftar region Google Cloud tempat Pub/Sub diizinkan untuk menyimpan data pesan di disk. Jika 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 untuk mematuhi hukum setempat.

Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi kebijakan penyimpanan pesan.

Praktik terbaik untuk pengiriman pesan berurutan dalam publikasi

Jika Anda menggunakan pengurutan pesan, pastikan hal berikut:

  • Gunakan endpoint lokasi. Urutan pesan dipertahankan di sisi publikasi dan dalam satu region. Dengan kata lain, jika Anda memublikasikan pesan ke beberapa region, hanya pesan dalam region yang sama yang dikirimkan dalam urutan yang konsisten. Jika semua pesan Anda dipublikasikan ke region yang sama, tetapi pelanggan Anda tersebar di berbagai region, pelanggan akan menerima semua pesan secara berurutan. Gunakan endpoint lokasi untuk memublikasikan pesan ke region yang sama.

  • Mengonfigurasi fungsi publikasi resume. Saat library klien mencoba ulang permintaan dan pesan memiliki kunci pengurutan, library klien akan berulang kali mencoba ulang permintaan, terlepas dari setelan percobaan ulang. Jika terjadi error yang tidak dapat dicoba lagi, library klien tidak akan memublikasikan pesan dan berhenti memublikasikan pesan lain dengan kunci pengurutan yang sama. Jika Anda sudah siap untuk melanjutkan publikasi pada kunci pengurutan yang gagal dipublikasikan, 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.
Mengelompokkan pesan dalam permintaan publikasi Mengelompokkan pesan dalam batch atau grup untuk meningkatkan efisiensi penayang dan mengirim pesan dengan throughput yang lebih tinggi.
Kontrol alur Konfigurasikan kontrol alur di setelan penayang untuk menangani lonjakan traffic sementara.
Menguji klien Pub/Sub untuk memaksimalkan performa streaming Menskalakan throughput penayang dengan peningkatan core mesin dan bandwidth jaringan yang tersedia.
Mencoba kembali permintaan Lakukan penyesuaian pada nilai yang ditentukan dari kebijakan percobaan ulang penayang hanya jika Anda merasa setelan default tidak memadai 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 konfigurasikan fungsi lanjutkan publikasi untuk kegagalan publikasi.

Langkah berikutnya