Arsitektur Real-Time Web: Membangun Sistem Notifikasi Menggunakan Server-Sent Events (SSE) vs WebSocket di Node.js
Arsitektur Real-Time Web: Membangun Sistem Notifikasi Menggunakan Server-Sent Events (SSE) vs WebSocket di Node.js
1. Konteks Industri & Analisis Akar Masalah
Di era aplikasi web modern, ekspektasi pengguna terhadap interaktivitas telah bergeser dari model tradisional request-response (polling) menuju komunikasi data real-time. Dashboard analitik, aplikasi keuangan, sistem pemantauan infrastruktur, hingga platform kolaborasi menuntut pembaruan data instan tanpa intervensi manual dari pengguna.
Secara historis, pendekatan paling awal untuk mencapai kondisi ini adalah HTTP Short Polling dan Long Polling. Namun, pendekatan ini mendatangkan overhead performa yang masif. Setiap permintaan (request) HTTP membawa beban header penuh (bisa mencapai ratusan hingga ribuan byte) terlepas dari apakah ada data baru atau tidak. Ketika ribuan klien melakukan polling setiap beberapa detik, server web (seperti Nginx yang meneruskan ke Node.js) akan mengalami kelelahan sumber daya (resource exhaustion), kehabisan deskriptor file (file descriptors), dan lonjakan penggunaan CPU akibat pembukaan dan penutupan koneksi TCP yang konstan.
Sebelum penerapan arsitektur komunikasi persisten (seperti SSE atau WebSocket), infrastruktur backend sering kali terjebak dalam kondisi Thundering Herd Problem dan tingginya latensi semu. Setelah transisi ke protokol berbasis koneksi persisten, efisiensi jaringan meningkat secara drastis, pemanfaatan memori menjadi lebih terprediksi, dan latensi pengiriman pesan turun dari orde detik ke orde milidetik.
2. Konsep Inti & Deep Dive Arsitektur
Pemahaman mendalam mengenai arsitektur komunikasi web memerlukan analisis terhadap lapisan transport jaringan dan protokol aplikasi.
Server-Sent Events (SSE)
SSE adalah standar teknologi di mana klien menetapkan koneksi permanen ke server, dan server menggunakan koneksi ini untuk mengirimkan data ke klien secara sepihak (unidirectional, server-to-client). Protokol ini dibangun di atas protokol HTTP standar.
+--------+ +--------+
| Client | -- (1) HTTP GET /events -------> | Server |
| | | |
| | <- (2) 200 OK (text/event-stream)| |
| | | |
| | <- (3) data: {"msg": "hello\