Bisakah Mosquitto mendukung banyak broker?

20

Saya telah mempertimbangkan Mosquitto untuk pialang pesan MQTT untuk jaringan rumah IoT, tetapi saya khawatir pialang itu bisa menjadi titik kegagalan tunggal yang dapat menjatuhkan seluruh jaringan saya jika gagal, karena semua pesan harus melalui broker dan tidak ada pesan yang dapat ditransmisikan sama sekali jika broker offline karena alasan apa pun (mis. pencabutan yang tidak disengaja, kegagalan perangkat keras, dll.)

Apakah mungkin menggunakan beberapa broker dengan Mosquitto diinstal untuk meningkatkan keandalan jaringan? Jika memungkinkan, apakah ada kerugian / overhead signifikan untuk menggunakan beberapa broker?

Aurora0001
sumber

Jawaban:

12

Ya, Mosquitto mendukung banyak broker.

Mosquitto menggunakan MQTT Bridges untuk menghubungkan beberapa pialang sehingga merutekan pesan antara pialang mosquitto ini. Dengan cara ini jembatan antara broker utama Anda dengan sistem cadangan dapat dibuat. Namun, hindari membuat loop. Jika kedua broker menjalankan klien Anda, publikasikan ke broker utama yang kemudian menerbitkan topik untuk masing-masing dan setiap pelanggan termasuk broker sekunder yang dijembatani. Jika primer gagal, klien Anda akan mencatat (Koneksi Ditolak, Server tidak tersedia) dan dapat mundur untuk langsung menerbitkan ke sekunder. (Saya belum yakin bagaimana cara memperbaikinya dengan cara sebaliknya.) Karena Anda tidak mengharapkan klien untuk memutuskan sambungan dengan tidak sopan, saya berpikir bahwa "Wasiat Terakhir dan Perjanjian" tidak berlaku di sini (ini akan digunakan untuk meminta broker memberi tahu atas nama klien yang terputus).

Namun posting ini mencantumkan kelemahan dari pendekatan ini terutama sehubungan dengan skalabilitas dan ketersediaan:

  • Mekanisme routing jembatan tidak skala dengan baik jika Anda meneruskan semua pesan ke jembatan lain
  • Overhead komunikasi antara jembatan signifikan jika Anda menggunakan QoS 2 antara jembatan (yang perlu Anda lakukan jika Anda ingin menyebarkan pesan antara klien yang terhubung ke jembatan yang berbeda)
  • Tidak ada failover dan ketersediaan tinggi. Jika jembatan pialang macet, pesan mungkin hilang
  • Klien MQTT tidak dapat dimigrasi ke node jembatan lain. Sesi MQTT tidak direplikasi di seluruh jembatan, jadi Anda akan kehilangan semua pesan dan langganan yang antri jika Anda menggunakan sesi persisten MQTT.
Ghanima
sumber
10

Dalam. NET implementasinya memungkinkan untuk menghubungkan satu klien ke satu broker, jadi saya akan mengatakan mengapa tidak ...

MqttClient mqtt;
string broker = ini.getData("MQTT", "hostname");
mqtt = new MqttClient(broker);
mqtt.MqttMsgPublishReceived += mqtt_received;
mqtt.Connect(Guid.NewGuid().ToString());

Masalahnya, Anda harus mengelola duplikat jika ada kemunduran ketika broker lain akan mulai mengirim pesan, atau memperingatkan klien.

Mungkin ada beberapa kemungkinan seperti masing-masing broker berlangganan satu sama lain dan menetapkan Keinginan Terakhir dan Perjanjian untuk memperingatkan diri mereka sendiri dan klien mereka bahwa akan terjadi kemunduran!

Goufalite
sumber
Bagaimana cara broker berlangganan atau lebih suka terhubung ke broker lain?
Bence Kaulics
1
Saya sedang memikirkan klien yang bersarang di server broker.
Goufalite
@Goufalite, ini benar-benar berguna untuk MQTT secara umum, terima kasih. Apakah Anda tahu tentang Mosquitto , broker yang saya diskusikan dalam pertanyaan?
Aurora0001
Ini adalah hal terendah yang saya ketahui tentang MQTT (saya tidak menyadari ada broker lain seperti HiveMQ sebelum datang di IoT SE). Apa lagi yang ingin Anda ketahui? Maksud Anda implementasi?
Goufalite
@Goufalite hanya tertarik apakah Mosquitto sendiri memiliki cara menjalankan beberapa broker secara paralel. Jika Anda bisa menyarankan cara untuk melakukannya dengan Mosquitto atau menautkan dokumentasi yang bagus.
Aurora0001