Apakah MQTT dapat diskalakan dengan 1000+ klien?

10

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?

Menandai
sumber
Mungkin lebih baik untuk mengajukan pertanyaan (1) secara terpisah dan hanya bertanya (2) yang cocok dengan judul Anda di badan pertanyaan. Dengan cara ini, kami dapat menjawab setiap pertanyaan Anda secara terpisah secara terperinci. Anda dapat memasukkan konteks Anda lagi dalam pertanyaan baru atau tautan ke yang ini jika itu membantu.
Aurora0001
1
Pertanyaan berubah dan ditambahkan yang kedua.
Tandai
Dari suara itu, bahkan jika Anda mengalami masalah beban server dengan memegang banyak koneksi terbuka, sistem Anda akan sangat kompatibel dengan jenis pohon topologi di mana klien terhubung ke server perantara yang memegang sesi yang sesuai dan meneruskan sesi yang sesuai lalu lintas jarang dan naik ke server yang lebih tinggi dalam satu pipa masing-masing. Anda bahkan dapat melakukan tier pertama ini secara lokal di router 4G Anda.
Chris Stratton

Jawaban:

7

1.000 klien dapat dengan mudah ditangani oleh broker MQTT yang layak; ada tolok ukur dari Scalagent yang menunjukkan bahwa PC dengan:

  • prosesor Intel Core 2 Duo 3 GHz
  • RAM 4 GB

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.

Aurora0001
sumber
Saya jelaskan salah menjelaskannya. Hanya server (layanan hosting komersial) yang harus menangani 1000+ klien. Ada banyak router 4G di berbagai tempat, dan masing-masing hanya akan menangani 10-20 klien.
Tandai
Oh, saya salah membaca - salah saya, @Mark, saya berasumsi Anda maksud mereka semua di belakang satu router 4G. Saya akan mengedit ini dalam hal ini.
Aurora0001
Saya belum sepenuhnya memahami kode yang mendasari MQTT - saya takut dengan koneksi 4G: apakah MQTT membutuhkan koneksi Internet yang persisten? Kemungkinan jaringannya tidak stabil ...
Tandai
Saya telah mengedit dengan beberapa saran, @ Mark; beri tahu saya jika itu menunjukkan Anda ke arah yang benar.
Aurora0001
1
Ya, sekarang lebih jelas. Saya akan melakukan beberapa pencarian lebih lanjut tentang topik ini dan jika saya masih membutuhkan bantuan saya akan mengajukan pertanyaan lain. Terima kasih banyak.
Tandai
5

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.

shal
sumber
Saya tidak berpikir broker SaaS MQTT selalu yang terbaik untuk produksi. Kebanyakan pialang MQTT yang profesional (di-hosting sendiri) mendukung HA, redundansi, dan failover pada skala sambil mempertahankan kompatibilitas MQTT penuh. Beberapa broker SaaS tidak mendukung semua fitur MQTT. Jika Anda menguji terhadap mosquitto lokal dan kemudian pergi ke penyedia SaaS, kemungkinan hal-hal tidak berfungsi dalam produksi sebagaimana dimaksud.
Dominik Obermaier
Seperti biasa ada pro dan kontra dari kedua opsi tersebut. Jelas bahwa setiap broker SaaS memerlukan tim komunikatif yang sempurna, pengujian jangka panjang pada tahap awal pengembangan produk, jaminan uptime yang jelas dan berbagai SLA. Mempertahankan broker sendiri juga cara yang baik, tetapi dunia bergerak ke layanan. Entah Anda akan berusaha dan paling kompeten dengan produk Anda yang menggunakan broker sebagai bagian dari itu atau Anda akan menghabiskan waktu dan uang Anda untuk menjadi administrator broker MQTT yang super berpengalaman (dan tidak pernah menjadi pengembangnya!). Hanya masalah pilihan +)
shal