MQTT 1000'den fazla istemciyle ölçeklendirilebilir mi?


10


TCP soketi üzerinden sunucuya günde bir kez yük gönderen Senaryo IoT cihazı (şu anda IPv4 cihazı). Sunucunun genel bir IP adresi var, aygıt bir yönlendiricinin / NAT'ın arkasında. ESP8266 tabanlı bir modül kullanacağım (yani Olimex one)

Hedef sunucu bu ihtiyacı olduğunda herhangi bir istemci veri göndermek gerekir. Delik delme yapması gerektiği gibi doğrudan istemci-müşteri iletişimi (akıllı telefonumdan bir cihaza bağlanmak) ile ilgilenmiyorum.

Diğer gereksinimler
IoT cihazları birkaç bine kadar büyüyebilir. İnternet bağlantısı 4G özellikli birçok yönlendirici / modem tarafından sağlanır. Her biri 10-20 müşteriyi idare edecek.

Önerilen çözüm
Anladığım kadarıyla ortak bir çözüm MQTT'dir. İstemciler düzenli olarak aracıya veri gönderir (yani barındırma sunucusunda çalışan Mosquitto), bu da aynı sunucuda çalışan ana web uygulamasını günceller.

Soru
MQTT yaklaşımı, çoğu 4G yönlendiricinin arkasındaki "çok sayıda" (1000+) cihaz için uygun mu?


Soru (1) 'i ayrıca sormak ve soru gövdesindeki başlığınızla eşleşen soru (2)' yi sormak daha iyi olabilir. Bu şekilde, sorularınızın her birini ayrı ayrı ayrıntılı olarak ele alabiliriz. Bağlamınızı yeni soruya tekrar dahil edebilir veya yardımcı olursa buna bağlantı oluşturabilirsiniz.
Aurora0001

1
Soru değişti ve ikincisini ekledi.
Mark

Sesinden, çok sayıda açık bağlantıyı tutma ile sunucu yükü sorunlarıyla karşılaşmış olsanız bile, sisteminiz, istemcilerin karşılık gelen oturumları tutan ve yerine geçen ara sunuculara bağlandığı ağaç türü bir topoloji ile oldukça uyumlu olacaktır. her biri tek bir kanalda daha yüksek sunuculara kadar seyrek trafik. Hatta 4G yönlendiricilerinizde bunun ilk katmanını yerel olarak bile yapabilirsiniz.
Chris Stratton

Yanıtlar:


7

1.000 müşteri kolayca herhangi bir iyi MQTT komisyoncu tarafından ele alınabilir; Scalagent'ten aşağıdakileri içeren bir bilgisayarın olduğunu gösteren bir kriter var:

  • 3 GHz Intel Core 2 Duo işlemci
  • 4 GB RAM

Mosquitto'yu yöneten 60.000 yayıncıyı işleyebilir. Bu, gerekli 1000 yayıncıdan çok daha fazladır, bu nedenle nispeten zayıf bir sunucuda bile, gerekli numarayı işleyebilmeniz gerekir.

Diğer bazı brokerler , 10 milyon yayıncıyı ele aldığını iddia eden HiveMQ gibi daha iyi performans (elbette buna bağlı olarak daha fazla sunucu gücü ile) iddia ediyor .

MQTT aracıları genellikle kalıcı bir bağlantı bekler ve periyodik olarak ping yanıtı (veya başka bir etkinlik) göndermeyen istemcilerin zaman aşımına uğrar. Yayınladıktan sonra ağ bağlantısını kesebilirsiniz, ancak açıkçası, bağlantıyı keserseniz hiçbir şey alamazsınız.

MQTT, yararlı olabilecek 'alıkonan' mesajlar kavramını desteklemektedir. Web istemcisi, tutulan bayrağa sahip bir konuya bir şeyler yayınlayabilir ve bu ileti aracı tarafından depolanır. Müşterileriniz yeniden bağlandıklarında ve konuya abone olduklarında, tutulan iletiyi alırlar (saatler önce yayınlansa bile). Saklanan mesaj, bir istemci bu konuya her abone olduğunda yayınlanır ; bu nedenle, düzensiz bir bağlantınız varsa ve istemci yeniden bağlanana kadar bir mesajın saklanması gerekiyorsa size yardımcı olabilir.


Kesinlikle yanlış açıkladım. Yalnızca sunucu (ticari barındırma hizmeti) 1000'den fazla istemciyi işlemelidir. Farklı yerlerde birçok 4G yönlendirici vardır ve her biri sadece 10-20 istemciyi işleyecektir.
Mark

Oh, yanlış okudum - benim hatam, @ Mark, hepsini bir 4G yönlendirici arkasında kastettiğini varsaydım . Bu durumda bunu düzenleyeceğim.
Aurora0001

MQTT'nin temel kodunu henüz tam olarak anlamadım - 4G bağlantılarından korktum: MQTT kalıcı bir İnternet bağlantısı gerektiriyor mu? Muhtemelen ağ kararsız olacak ...
Mark

Bazı önerilerle düzenledim, @ Mark; bunun sizi doğru yöne yönlendirip yönlendirmediğini bana bildirin.
Aurora0001

1
Evet, şimdi daha net. Bu konu hakkında daha fazla arama yapacağım ve hala yardıma ihtiyacım olursa başka bir soru soracağım. Çok teşekkürler.
Mark

5

İstemcilerden gelen kalıcı oturumları kullanabilirsiniz, örneğin bağlandığında temiz bayrak yanlış seçeneğine ayarlanır. Bu senaryoda, istemciniz çevrimdışı olduğunda aracı aracı iletiyi kendi önbelleğine arabelleğe alır ve aygıt bağlandıktan sonra iletir.

Miktar hakkında - 10K, bir sunucu için bile nispeten düşük bir miktardır. Linux sunucusunu 500K etkin bağlantı içerecek şekilde yapılandırabilirsiniz ve aracınız bulut tabanlı olacaksa, örneğin bazı sağlayıcılar tarafından hizmet olarak verildiyse, milyonlarca etkin bağlantı bile tutabilirsiniz.

Bu arada, Mosquitto veya diğer herhangi bir yerel kurulumun geliştirme ve test için mükemmel bir seçim olduğunu düşünüyorum, ancak üretime girdiğinizde HA, artıklık, yük devretme vb.Gibi tüm özelliklere sahip SaaS MQTT brokerine ihtiyacınız var.


SaaS MQTT brokerinin üretim için her zaman en iyisi olduğunu düşünmüyorum. Çoğu profesyonel (kendi kendine barındırılan) MQTT aracıları, tam MQTT uyumluluğunu korurken, HA, yedeklilik ve yük devretmeyi destekler. Bazı SaaS aracıları tüm MQTT özelliklerini desteklemez. Yerel bir sivrisinekle test edip bir SaaS sağlayıcısına giderseniz, şeylerin üretimde amaçlandığı gibi çalışmadığı ihtimali vardır.
Dominik Obermaier

Her zamanki gibi her iki seçeneğin de artıları ve eksileri vardır. Açıktır ki, herhangi bir SaaS brokeri mükemmel iletişim ekibi, ürün geliştirmenin erken aşamasında uzun vadeli testler, açık çalışma süresi garantileri ve çeşitli SLA'lar gerektirir. Kendi brokerını korumak da güzel bir yol ama dünya hizmetlere giriyor. Ya bir parçası olarak broker kullanan ürününüzle çaba gösterecek ve en yetkin olacaksınız ya da size süper deneyimli MQTT-broker yöneticisi olmak için zaman ve para harcayacaksınız (ve asla onun geliştiricisi olmayın!). Sadece bir seçim meselesi +)
shal
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.