Di era digital, notifikasi real-time adalah tulang punggung interaksi pengguna. Namun, mengirimkan jutaan notifikasi tanpa mengganggu kinerja sistem utama membutuhkan arsitektur yang kuat dan tangguh.
Artikel ini akan membedah blueprint sistem notifikasi event-driven yang memadukan FastAPI, Apache Kafka, dan Firebase Cloud Messaging (FCM).
Konsep utamanya adalah memisahkan layanan yang menerima permintaan dari klien (Publisher) dengan layanan yang menangani pemrosesan dan pengiriman yang berat (Consumer).
Pemisahan ini membuat Publisher selalu tersedia dan tidak perlu menunggu respons dari layanan pengiriman eksternal (FCM), menciptakan sistem yang sangat responsive dan fault-tolerant.
Berikut adalah langkah-langkah detail bagaimana sebuah notifikasi berjalan dalam sistem ini:
Layanan backend lain (Klien HTTP) mengirimkan permintaan POST ke Publisher Service. Permintaan ini umumnya berisi user_id target dan detail pesan notifikasi.
Publisher Service yang dibangun dengan FastAPI menerima permintaan. Setelah memvalidasi data, ia memperkaya pesan (misalnya menambahkan timestamp atau metadata lainnya).
Pesan ini kemudian dipublikasikan ke topic Kafka bernama "notifications".
Kafka Broker menerima pesan dan menyimpannya secara persisten dalam topic tersebut. Ini adalah jaring pengaman yang memastikan tidak ada data yang hilang (guaranteed delivery) meskipun Consumer Service sedang down atau sibuk.
Consumer Service, yang juga menggunakan FastAPI (seringkali dengan background tasks atau library consumer asinkron), terus-menerus mengambil (poll) pesan dari topic "notifications".
Dengan menggunakan Consumer Group, kita dapat dengan mudah melakukan skala horizontal pada Consumer Service untuk memproses volume notifikasi yang besar secara paralel.
Setelah menerima pesan yang berisi user_id, Consumer Service melakukan kueri ke Penyimpanan Pemetaan Token (misalnya Redis, Cassandra, atau database yang dioptimalkan) untuk mendapatkan Token Perangkat FCM yang terkait dengan user_id tersebut.
Consumer Service menggunakan Firebase Admin SDK untuk mengirimkan permintaan push notification ke backend FCM, menggunakan token perangkat yang telah didapatkan.
FCM, sebagai layanan notifikasi Google, menangani sisanya, yaitu mengirimkan notifikasi secara real-time ke perangkat Android target.
FastAPI: Dipilih karena performa tinggi (setara dengan Node.js/Go) dan kemudahan pengembangan API asinkron dengan Python, sangat cocok untuk Publisher Service yang membutuhkan latensi rendah.
Kafka: Menyediakan decoupling (pemisahan) yang kuat dan back-pressure handling yang efisien. Publisher tidak perlu peduli seberapa cepat Consumer memproses pesan. Kafka dapat menahan lonjakan data.
FCM: Solusi terkemuka untuk pengiriman notifikasi seluler, menawarkan keandalan dan integrasi mendalam dengan ekosistem Android.