Apa itu Pub/Sub di google cloud
Sama seperti manusia, mesin juga perlu berkomunikasi satu sama lain. Pub/Sub adalah layanan pengiriman pesan secara asinkron yang mampu decouple (memisahkan) antar komponen aplikasi atau sebagai queue untuk memparalelkan tugas. Dengan Pub/Sub kita dapat mengirim dan menerima pesan antar komponen aplikasi yang berjalan di cloud, on-premise, atau hybrid.
Pub/Sub juga sering digunakan untuk streaming analytic (analitik real-time) dan integration pipeline (menghubungkan berbagai layanan Google Cloud) untuk ingest (menyerap) dan distribute (mendistribusikan) data.
Layanan ini memungkinkan Anda untuk membuat sistem event producer (disebut publisher) dan event consumer (subscriber). Publisher berkomunikasi dengan subscriber secara asinkron dengan mengirimkan event, bukan secara sinkron dengan RPC (remote procedure call).
Pub/Sub memungkinkan layanan berkomunikasi secara asinkronus, dengan latensi sekitar 100 milidetik.
Istilah-Istilah pada Pub/Sub
Sebelum menyelam lebih dalam, ada baiknya kita memahami istilah-istilah yang kerap dipakai pada sistem Pub/Sub terlebih dahulu.
- Topic: Sebuah resource (sumber daya) yang menjadi tujuan pengiriman pesan oleh si aplikasi pengirim (publisher).
- Subscription: Sebuah resource yang merepresentasikan aliran pesan dari topic tertentu untuk dikirimkan ke aplikasi yang berlangganan (subscriber).
- Message: Kombinasi data dan (opsional) atribut yang dikirimkan oleh publisher menuju suatu topic dan kemudian akan dikirim ke subscriber.
- Message attribute: Pasangan key-value yang dapat ditentukan oleh publisher untuk sebuah message. Misalnya, key iana.org/language_tag dan value en dapat ditambahkan ke message untuk menandainya sebagai dapat dibaca oleh subscriber berbahasa Inggris.
- Publisher: Aplikasi yang membuat dan mengirim pesan ke satu atau lebih topic.
- Subscriber: Aplikasi yang subscribe (berlangganan) ke satu atau lebih topic untuk menerima pesan darinya.
- Acknowledgement (atau “ack”): Sinyal yang dikirim oleh subscriber ke Pub/Sub setelah berhasil menerima pesan. Setelahnya, pesan tersebut akan dihapus dari queue.
- Push dan pull: Dua metode pengiriman pesan. Subscriber menerima pesan baik melalui metode push (Pub/Sub yang mengirim pesan tersebut ke endpoint yang dipilih subscriber) atau metode pull (subscriber yang mengambil pesan dari Pub/Sub).
Cara Kerja Pub/Sub
Cara kerja dari Pub/Sub ini sederhana. Publisher mengirimkan event ke layanan Pub/Sub (tanpa harus mendefinisikan bagaimana atau kapan event tersebut akan diproses). Selanjutnya, Pub/Sub mengirimkan event tersebut ke semua subscriber yang bereaksi terhadapnya.
Hubungan antara publisher dan subscriber bisa berupa one-to-many (satu publisher ke banyak subscriber), many-to-one (banyak publisher ke satu subscriber), dan many-to-many (banyak publisher ke banyak subscriber). Berikut contoh pengiriman pesan dari publisher ke subscriber menggunakan Pub/Sub.
Berikut diagram yang menampilkan alur sederhana pengiriman pesan menggunakan Pub/Sub.
Pada skenario di atas, terdapat dua publisher yang mengirimkan pesan pada satu topic. Kemudian, ada dua subscription untuk topic tersebut.
- Subscription pertama memiliki dua subscriber, artinya pesan akan dikirim ke keduanya, di mana setiap subscriber akan menerima sebagian dari pesan.
- Subscription kedua memiliki satu subscriber yang akan menerima semua pesan.
Huruf yang diberi tanda tebal merepresentasikan sebuah pesan. Pesan A berasal dari Publisher 1 dan dikirim ke Subscriber 2 melalui Subscription 1 dan ke Subscriber 3 melalui Subscription 2. Di sisi lain, pesan B berasal dari Publisher 2 dan dikirim ke Subscriber 1 melalui Subscription 1 dan ke Subscriber 3 melalui Subscription 2.
Mekanisme komunikasi pada Pub/Sub berbeda dengan komunikasi sistem melalui RPC, di mana publisher harus menunggu subscriber menerima data terlebih dahulu. Nah, karena Pub/Sub bersifat asinkron, konfirmasi dari subscriber kepada publisher tak diperlukan. Dengan begini, fleksibilitas dan ketahanan sistem secara keseluruhan akan meningkat.
Untuk lebih memperjelas, berikut adalah diagram yang mengilustrasikan bagaimana sebuah pesan dikirim dari publisher ke subscriber.
Berikut penjelasan dari diagram di atas.
- Pengirim atau bisa disebut juga publisher perlu membuat atau menentukan topic yang akan menjadi tujuan pengiriman pesan alias message.
- Ketika pesan sudah diterima oleh topic yang berada di dalam Pub/Sub, pesan tersebut akan disimpan di dalam message storage sampai nanti diterima oleh subscriber. Pub/Sub akan mengembalikan ID pesan ke publisher yang menandakan pesan telah diterima.
- Setelah pesan diterima oleh topic dan disimpan di message storage, pesan lantas dikirimkan ke subscription untuk nantinya dikirimkan ke penerima atau subscriber yang berlangganan ke subscription tersebut.
- Terdapat dua cara agar subscriber bisa menerima pesan dari subscription, yaitu push dan pull. Push subscription berarti subscription akan secara langsung mengirimkan pesan kepada subscriber, sedangkan pada pull subscription pesan baru akan dikirimkan ketika subscriber menginginkan pesan tersebut dengan meminta melalui pull API.
- Setelah pesan berhasil diterima, subscriber akan memberikan konfirmasi (acknowledgment atau ack) kepada subscription. Ketika subscription sudah menerima pemberitahuan bahwa pesan berhasil diterima (ack), pesan tersebut akan dihapus dari message storage. Sementara itu, bila pesan tidak berhasil diterima, subscription akan secara otomatis kembali mengirimkan pesan tersebut ke subscriber.
Kasus Penggunaan untuk Pub/Sub
Anda bisa menggunakan layanan Pub/Sub untuk berbagai kasus penggunaan, berikut beberaoa di antaranya.
- Mengumpulkan data terkait user interaction (interaksi pengguna) dan server events (peristiwa yang terjadi pada server)
Untuk menggunakan user interaction event dari aplikasi atau server event dari sistem, Anda dapat mengirimkan data-data tersebut ke Pub/Sub. Setelah itu, Anda dapat menggunakan stream processing tool (seperti Dataflow) yang mengirimkan data event tersebut ke database (seperti BigQuery, Cloud Bigtable, atau Cloud Storage). Intinya, Pub/Sub memungkinkan Anda untuk mengumpulkan data event dari banyak sumber secara bersamaan. - Replikasi data antar database
Pub/Sub bisa digunakan untuk mendistribusikan change event (peristiwa terkait perubahan data) pada database. Event tersebut dapat digunakan untuk membuat tampilan tentang status database dan riwayat status di BigQuery dan sistem penyimpanan data lainnya. - Pemrosesan paralel
Anda dapat mendistribusikan banyak tugas secara efisien ke beberapa mesin komputasi (seperti Cloud Functions) menggunakan Pub/Sub message. Contoh tugas tersebut adalah mengompresi file teks, mengirim notifikasi email, mengevaluasi model AI, dan memformat ulang gambar. - Streaming data dari aplikasi atau perangkat IoT
Sebagai contoh, aplikasi SaaS dapat mengirimkan sejumlah event secara real time. Contoh lain, sensor IoT di rumah dapat mengalirkan data ke Pub/Sub untuk digunakan di produk Google Cloud lainnya melalui Dataflow pipeline.