Mendesain arsitektur IoT untuk jutaan perangkat: masalah yang muncul saat skala membesar, pola horizontal scaling, partisi dan backpressure, pengelolaan biaya, serta praktik menyusun keputusan desain untuk sistem IoT skala besar.

Semua praktik kita sejauh ini masuk akal untuk puluhan hingga ribuan perangkat. Episode ini menjawab pertanyaan: apa yang berubah ketika skala menjadi jutaan? Arsitektur yang "cukup baik" untuk 1.000 perangkat bisa runtuh di 1.000.000.
Mengapa skalabilitas harus dipikirkan sejak awal? Karena biaya untuk memigrasi arsitektur setelah jutaan perangkat terhubung sangat besar — perangkat di lapangan tidak bisa di-update semudah server. Keputusan desain seperti naming topik, skema data, dan protocol tidak bisa diubah tanpa operasi masif. Pikirkan skala dari hari pertama, walaupun kalian mulai dari 10 perangkat.
| Aspek | 1.000 perangkat | 1.000.000 perangkat |
|---|---|---|
| Koneksi MQTT | 1 broker cukup | Perlu broker terdistribusi (EMQX/HiveMQ cluster) |
| Pesan/jam | Puluhan ribu | Puluhan juta |
| Storage | 1 InfluxDB | Cluster time series + tiering |
| Biaya cloud | Murah | Menjadi masalah #1 |
| Debug | Bisa manual | Wajib otomatis & terstruktur |
| Update | Sekali kirim | Gradual rollout berbulan-bulan |
Perubahan yang paling terasa: data dan biaya. Sejuta perangkat mengirim 1 pesan/menit = 1,44 miliar pesan/hari. Setiap keputusan di pipeline berdampak jutaan kali lipat.
Arsitektur skala besar memakai horizontal scaling — menambah node, bukan memperbesar satu node.
┌─ broker-1 ─┐
devices ─┤─ broker-2 ─┼── queue/stream ─┬─ consumer-a
└─ broker-3 ─┘ └─ consumer-bPrinsip kuncinya:
Partisi membagi beban agar tidak satu titik menampung semua. Contoh pada pipeline:
Backpressure memastikan sistem tetap hidup saat hilir melambat: producer memperlambat (atau buffer menumpuk sementara) alih-alih membanjiri storage. Tanpa backpressure, satu perlambatan InfluxDB membuat ribuan pesan menumpuk lalu hilang.
Ingestor → queue (bisa menumpuk sementara) → consumer (batch)
↑ jika storage lambat, queue menyerapBiaya adalah constraint desain di skala besar — bukan masalah "nanti". Teknik yang paling berdampak:
| Teknik | Penghematan |
|---|---|
| Batch & ringkas | Gabungkan beberapa pembacaan jadi 1 pesan |
| Downsampling | Simpan resolusi tinggi hanya 30 hari, lalu rata-rata per jam |
| Tiering storage | Hot (mahal) → cold (murah) untuk data lama |
| Ingestion policy | Buang data di luar kebutuhan di pintu masuk |
| TLS/session reuse | Kurangi handshake berulang |
| Edge processing | Kirim ringkasan, bukan data mentah (episode 10) |
Contoh perhitungan: 1 juta perangkat × 1 pesan/menit × 100 byte = ±12 GB/jam sebelum penghematan. Dengan agregasi per menit di edge dan downsampling, bisa turun 90%+ biaya storage.
Important
Di skala besar, 1 byte adalah uang. Sebelum menambah field ke payload, tanya: apakah nilainya lebih besar dari biayanya untuk 1 miliar pesan? Optimasi byte tidak penting di 1.000 perangkat, tapi menentukan di 1 juta.
Studi kasus: platform monitoring kota pintar dengan 500.000 sensor lingkungan. Keputusan desainnya:
500K sensor → gateway kota → EMQX cluster (3 node)
→ Kafka (buffer, 3 partisi per region)
→ consumer (downsampling + validasi)
→ Tiered storage: InfluxDB hot (7 hari) → S3 cold (arsip)
→ Grafana + alerting + analitikKeputusan yang mendasari:
Inti yang harus dibawa pulang:
Di episode 22 selanjutnya, kita akan membangun representasi digital dunia fisik: digital twin & simulation — apa itu digital twin, bagaimana ia membantu simulasi dan prediksi, serta praktik membangun twin sederhana dari perangkat kalian. Dunia fisik akan punya "cermin digital"!