Perangkat Skenario
IoT (saat ini perangkat IPv4) yang mengirimkan melalui TCP socket sebuah payload ke server sekali per hari. Server memiliki alamat IP publik, perangkat berada di belakang router / NAT. Saya akan menggunakan modul berdasarkan ESP8266 (yaitu Olimex satu)
Tujuannya
The Server harus dapat mengirim data ke klien setiap kali perlu. Saya tidak tertarik pada komunikasi langsung klien-ke-klien (yaitu menyambung ke perangkat dari ponsel cerdas saya) seperti yang seharusnya dilakukan dengan meninju lubang.
Persyaratan lain
Perangkat IoT mungkin tumbuh hingga beberapa ribu. Koneksi internet mereka disediakan oleh banyak router / modem yang mendukung 4G. Masing-masing akan menangani 10-20 klien.
Usulan solusi
Sejauh yang saya mengerti solusi umum adalah MQTT. Klien secara berkala mengirim data ke broker (yaitu Mosquitto yang berjalan di server hosting), yang pada gilirannya memperbarui aplikasi web utama yang berjalan di server yang sama.
Pertanyaan
Apakah pendekatan MQTT cocok untuk sejumlah besar perangkat (1000+) kebanyakan di belakang router 4G?
Jawaban:
1.000 klien dapat dengan mudah ditangani oleh broker MQTT yang layak; ada tolok ukur dari Scalagent yang menunjukkan bahwa PC dengan:
dapat menangani 60.000 penerbit yang menjalankan Mosquitto. Ini jauh melebihi dari 1.000 penerbit yang Anda butuhkan, jadi bahkan pada server yang relatif lemah, Anda masih dapat menangani jumlah yang diperlukan.
Beberapa broker lain mengklaim kinerja yang lebih baik (tentu saja dengan daya server yang lebih besar), seperti HiveMQ , yang diklaim menangani 10 juta penerbit.
Broker MQTT biasanya mengharapkan koneksi yang persisten, dan akan mem-timeout klien yang tidak mengirim respons ping (atau aktivitas lain) secara berkala. Anda dapat memutuskan koneksi dari jaringan setelah penerbitan, tetapi, jelas, Anda tidak akan dapat menerima apa pun jika Anda memutuskan sambungan.
MQTT mendukung konsep pesan 'dipertahankan' yang mungkin berguna. Klien web dapat mempublikasikan sesuatu ke suatu topik dengan bendera yang dipertahankan, dan pesan ini kemudian akan disimpan oleh broker. Setiap kali klien Anda terhubung kembali dan berlangganan topik, mereka kemudian akan menerima pesan yang disimpan (bahkan jika itu diterbitkan beberapa jam yang lalu). Pesan yang disimpan diterbitkan setiap kali klien berlangganan ke topik itu, sehingga dapat membantu Anda jika Anda memiliki koneksi yang tambal sulam dan perlu pesan untuk disimpan sampai klien terhubung kembali.
sumber
Anda dapat menggunakan sesi persisten dari klien, mis. Bendera bersih disetel ke false saat terhubung. Dalam kejadian skenario ketika klien Anda pialang offline akan melakukan buffer pesan untuk itu ke dalam cache sendiri dan mengirimkannya begitu perangkat akan terhubung.
Tentang kuantitas - 10K adalah jumlah yang relatif rendah bahkan untuk satu server. Anda dapat mengonfigurasi server Linux untuk menahan 500 ribu koneksi aktif dan jika broker Anda berbasis cloud, mis. Disediakan sebagai layanan oleh beberapa penyedia, maka Anda bahkan dapat menyimpan jutaan koneksi aktif di dalamnya.
Ngomong-ngomong, saya pikir Mosquitto atau instalasi lokal lainnya adalah pilihan yang sempurna untuk pengembangan dan pengujian, tetapi ketika Anda akan mulai berproduksi Anda memerlukan broker SaaS MQTT dengan semua fitur seperti HA, redundansi, failover, dll.
sumber