Yönetilen MQTT Bulutu

Geliştirmeye Başlamadan Önce Bilmeniz Gereken Public MQTT Broker Sınırlamaları

Public test broker'ları öğrenmek ve demolar için harikadır, ancak gerçek kısıtlarla gelirler. Gizliliği, güvenilirliği, paylaşımlı topic'leri ve hız sınırlarını, bunların içinde nasıl tasarım yapacağınızı ve private bir broker'a geçme zamanının geldiğini gösteren işaretleri anlayın.

Hız ve boyut göstergeleriyle tek bir açık topic alanını paylaşan çok sayıda anonim istemciyi gösteren public MQTT broker sınırlamaları illüstrasyonu
Bunu kendi MQTT broker’ınızda çalıştırınFree planla özel, yönetilen bir MQTT broker alın ve hazır kod örnekleriyle başlayın.
Ücretsiz deneyin Kod örnekleri Kart gerekmez

Public MQTT broker sınırlamalarını bir projenin ilk heyecanlı saatinde göz ardı etmek kolaydır; bir müşterinin önünde fark etmek ise acı vericidir. Bu makale public test broker'larının dört ana kısıtını somut bir örnek olarak broker.connectmq.com üzerinden açıklıyor, testlerinizi bu kısıtlar içinde çalışacak şekilde nasıl tasarlayacağınızı gösteriyor ve private bir broker'a geçme zamanının geldiğini gösteren net işaretleri listeliyor.

Public Broker'ların Neden Sınırları Var

Public broker paylaşımlı ve anonim bir hizmettir. İnternetteki herkes hesap açmadan bağlanabilir, yayın yapabilir ve abone olabilir. Bu açıklık onu eğitimler ve hızlı testler için faydalı kılan şeydir ve tam da bu yüzden sınırlara ihtiyaç duyar: sınırlar olmadan tek bir hatalı betik broker'ı mesajlara boğabilir ve onu herkes için kullanılmaz hale getirebilir.

Sınırlar bir kusur değildir. Ücretsiz bir topluluk hizmetini kullanılabilir tutan şey bunlardır. ConnectMQ, broker.connectmq.com'u tam da bu amaçla çalıştırır: gerçek iş yükleri için sunulan private broker'ların yanında, MQTT öğrenmek, bir kütüphaneyi test etmek ya da bir demo göstermek için kurulum gerektirmeyen bir yer. Ücretsiz public MQTT broker makalesi broker.connectmq.com'u etkili şekilde nasıl kullanacağınızı anlatıyor; bu makale ise onun neleri yapamadığına odaklanıyor.

Sınırlama 1: Gizlilik Yok

Public bir broker'da her topic her istemci tarafından okunabilir. # topic'ine abone olan biri, broker'ın kendi korumalarına tabi olarak yayınlanan her şeyi alır. Topic adları gizli değildir ve anlaşılması zor önekler yalnızca kazara çakışmaları azaltır.

Bunun pratikteki anlamı:

  • Asla kişisel veri yayınlamayın; konum izleri, kamera görüntüleri ya da bir kişiyi veya evi tanımlayan hiçbir şey.
  • Asla kimlik bilgisi yayınlamayın; API anahtarları ya da Wi-Fi parolaları, "geçici olarak" bile.
  • Asla public bir topic'ten gerçek ekipman kontrol etmeyin. Herkes komut topic'inizi yalnızca okumakla kalmaz, ona yayın da yapabilir.
  • Payload'ların bir yerlerde biri tarafından loglandığını varsayın.

Test trafiğinizin başkalarınınkiyle çakışmaması için connectmq/demo/9b2e7/ gibi rastgele bir önek kullanın. Bu bir nezaket ve kolaylıktır, bir güvenlik önlemi değil.

Sınırlama 2: Hizmet Garantisi Yok

Public broker'lar en iyi çaba (best-effort) esasına dayalı bir hizmet olarak sunulur. SLA yoktur, garanti edilen çalışma süresi yoktur ve destek taahhüdü yoktur. Broker bakım için yeniden başlatılabilir, sınırlar değişebilir ve oturumlar süre penceresinin ötesinde yaşamaz. broker.connectmq.com'da session expiry 30 dakikayla sınırlıdır; dolayısıyla daha uzun süre çevrimdışı kalan bir cihaz sıfırdan başlar.

Bir demo ya da atölye için bu sorun değildir. Bir ürün, bir pilot ya da bir müşterinin bağımlı olduğu herhangi bir şey için ise sorundur.

Sessizliğe Hazırlıklı Olun

Garanti olmadığı için test istemcilerinizi kesintilerle başa çıkacak şekilde yazın. Otomatik yeniden bağlanmayı etkinleştirin, başlangıçta bir kez yerine connect callback'i içinde yeniden abone olun ve bir broker yeniden başlatmasını elemeden eksik bir mesajı kendi kodunuzdaki bir hata olarak görmeyin. Bu alışkanlıklar her broker'da iyi uygulamadır ve sonradan üretime geçişi kolaylaştırır.

Sınırlama 3: Paylaşımlı Topic Alanı

Tüm public kullanıcılar tek bir topic ağacını paylaşır. Sonuçları şunlardır:

  • Çakışmalar. test, sensor/temp ya da home/livingroom gibi popüler adlar birçok kişi tarafından kullanılır. Onların mesajlarını alırsınız, onlar da sizinkileri alır.
  • Retained message sürprizleri. Genel bir topic'teki başka birinin retained message'ı, abone olduğunuz anda karşınıza çıkar.
  • Joker karakter gürültüsü. Geniş kapsamlı abone olmak, hiç istemediğiniz trafiği getirir ve hız bütçenizi boşa harcar.

Topic'leri her zaman benzersiz bir önekle ad alanına ayırın ve dar kapsamlı abone olun.

Sınırlama 4: Hız, Boyut ve Abonelik Sınırları

Public broker, herkesin adil erişim elde etmesi için kaynakları istemci başına sınırlar. broker.connectmq.com'daki sınırlar şunlardır:

Sınır Public broker değeri Neden var
Mesaj boyutu Mesaj başına 64 KB Büyük payload'ların bant genişliğini domine etmesini önler
Yayın hızı İstemci başına saniyede 10 mesaj Betiklerin broker'ı mesajlara boğmasını durdurur
Abonelikler İstemci başına 10 İstemci başına dağıtım maliyetini sınırlar
Topic derinliği 8 topic seviyesi Topic eşleştirmeyi verimli tutar
QoS 0, 1 ve 2 Öğrenmek için tam protokol davranışı
Session expiry 30 dakikaya kadar Terk edilmiş oturumlardaki kaynakları serbest bırakır
Kimlik doğrulama Anonim, boş olmayan benzersiz herhangi bir client ID Öğrenenler için sıfır kurulum

Bir sınırın aşılması reddedilen işlemlere ya da bağlantının kesilmesine yol açabilir. MQTT 5 ile bağlanıyorsanız istemcinizin aldığı reason code'ları loglayın; bunlar size genel bir "bağlantı kesildi" mesajından çok daha fazlasını söyler.

Sınırlara Saygı Gösteren Testler Tasarlamak

İşte public sınırların rahatça içinde kalan bir Python yayıncısı (paho-mqtt 2.x): benzersiz client ID, benzersiz önek, sığ topic'ler, bir hız sınırı ve kompakt payload'lar.

import json
import random
import time
import uuid
import paho.mqtt.client as mqtt

RUN_ID = uuid.uuid4().hex[:6]
PREFIX = f"connectmq/demo/{RUN_ID}"          # 3 seviye, altında yer bırakır
MAX_RATE = 5                                 # saniyede mesaj, 10/s sınırının altında
INTERVAL = 1.0 / MAX_RATE


def on_connect(client, userdata, flags, reason_code, properties):
    print("Connected:", reason_code, "prefix:", PREFIX)


def on_disconnect(client, userdata, flags, reason_code, properties):
    print("Disconnected:", reason_code)


client = mqtt.Client(
    mqtt.CallbackAPIVersion.VERSION2,
    client_id=f"limits-demo-{RUN_ID}",
    protocol=mqtt.MQTTv5,
)
client.on_connect = on_connect
client.on_disconnect = on_disconnect
client.connect("broker.connectmq.com", 1883, keepalive=60)
client.loop_start()

try:
    for i in range(50):
        payload = json.dumps({"i": i, "t": round(20 + random.random() * 2, 2)})
        assert len(payload.encode()) < 64 * 1024
        client.publish(f"{PREFIX}/sensor/temp", payload, qos=1)
        time.sleep(INTERVAL)
finally:
    client.loop_stop()
    client.disconnect()

Bunu ikinci bir terminalden, yalnızca kendi önekinize dar kapsamlı abone olarak izleyin:

mosquitto_sub -h broker.connectmq.com -p 1883 -i watch-RUNID -t "connectmq/demo/RUNID/#" -v

RUNID değerini betiğin yazdırdığı önekle değiştirin.

Sık Karşılaşılan Tuzaklar

  1. Boş client ID. Public broker boş olmayan bir client ID gerektirir. Her çalıştırma için benzersiz bir tane üretin.
  2. Aynı client ID'ye sahip iki betik. Her bağlantı diğerini düşürür ve bir yeniden bağlanma döngüsü oluşur.
  3. Sıkı yayın döngüleri. Bekleme içermeyen bir while True döngüsü bir saniye içinde hız sınırını aşar.
  4. Derin topic ağaçları. connectmq/demo/abc/site/area/line/cell/machine/sensor 9 seviyedir ve 8 seviyelik sınırı aşar. Test topic'lerini düzleştirin.
  5. Büyük JSON'lar ya da görüntüler. 64 KB'a yaklaşan her şeyin yeri private bir broker'dır; görüntülerin ise çoğu zaman MQTT'de hiç yeri yoktur.

Private Bir Broker Zamanının Geldiğini Gösteren İşaretler

Bunlardan herhangi birini fark ettiğiniz anda public broker'dan ayrılın:

  • Veriyi bir yabancı okursa birini utandırır ya da zarar verir.
  • Bir cihaz aldığı komutlara göre hareket ediyor.
  • Bir müşteri, iş arkadaşı ya da öğretmen sistemin yarın çalışmasına bağımlı.
  • İstemci başına 10'dan fazla aboneliğe, daha büyük mesajlara ya da daha derin topic hiyerarşilerine ihtiyacınız var.
  • Kimin bağlı olduğunu görmek ve cihaz başına kimlik bilgisi tutmak istiyorsunuz.

Public vs private MQTT broker karşılaştırması geçişi adım adım anlatıyor; prototipten üretime geçiş ise yolculuğun geri kalanını ele alıyor.

Private Bir Planda Neler Değişir

Private bir ConnectMQ broker aynı protokolü ve aynı istemci kodunu korur, ancak kuralları değiştirir:

  • Üretilmiş bir kullanıcı adı, parola ve bu kimlik bilgilerine bağlı bir client ID ile kimlik doğrulama.
  • Diğer kiracılardan izolasyon; böylece topic alanınız size aittir.
  • Let's Encrypt sertifikasıyla 8883 portunda TLS ve 8084 portunda Secure WebSocket.
  • Plan bazlı sınırlar: ücretsiz Serverless planı 25 bağlantıya, QoS 1'e kadar ve 256 KB mesajlara izin verir; ücretli Serverless planı bunu 1.000 bağlantıya, QoS 2'ye, 1 MB mesajlara ve shared subscription'lara yükseltir.
  • Tarayıcı içi istemci, canlı topic gezgini, dashboard ve eşik alarmları gibi portal araçları.

Ücretsiz Olarak Private Bir ConnectMQ Broker'a Geçin

Public broker işini yaptığında, kredi kartı gerektirmeden Serverless planında ücretsiz private broker'ınızı oluşturun ve aynı betiği yeni kimlik bilgilerinizle 8883 portuna yönlendirin. Sonraki adımları planlamak için bulut MQTT broker rehberini okuyun, yönetilen bir MQTT hizmetinin neden operasyon eforundan tasarruf sağladığını görün ya da planları karşılaştırmak için connectmq.com adresini ziyaret edin.

Sık Sorulan Sorular

Public bir MQTT broker kullanmak güvenli mi?

Zararsız verilerle öğrenmek ve demolar için güvenlidir. Kişisel veriler, kimlik bilgileri ya da gerçek ekipmanı kontrol etmek için güvenli değildir; çünkü herkes herhangi bir topic'i okuyabilir ve ona yayın yapabilir.

Public broker'ın hız sınırını aşarsam ne olur?

İşlemler reddedilebilir ya da istemcinin bağlantısı kesilebilir. İstemci başına saniyede 10 mesajın altında yayın yapın ve hata ayıklarken MQTT 5 reason code'larını kontrol edin.

Neden yayınlamadığım mesajları alıyorum?

Diğer kullanıcılar aynı topic adlarına yayın yapıyor. connectmq/demo/<random-id>/ gibi benzersiz bir önek kullanın ve yalnızca o öneke abone olun.

Cihazım çevrimdışı olursa public broker oturumumu korur mu?

Yalnızca broker.connectmq.com'da 30 dakikayla sınırlı olan session expiry penceresi içinde. Bundan sonra cihaz yeni bir oturum başlatır.

İlgili yazılar

BYOC MQTT Broker: Kendi Bulutunuzu Getirin Modeli Açıklandı

BYOC MQTT broker sizin bulut hesabınızda çalışır ama bir sağlayıcı tarafından işletilir. Modelin nasıl işlediğini, sorumluluk paylaşımını ve hesabınızı buna nasıl hazırlayacağınızı öğrenin.

7 dk okuma

Google Cloud IoT Core Alternatifi: Kapanış Sonrası Seçenekler ve Geçiş

Google, Cloud IoT Core'u Ağustos 2023'te kullanımdan kaldırdı. Bu rehber gerçekçi alternatifleri karşılaştırıyor, IoT Core kavramlarını standart MQTT'ye eşliyor ve verileriniz Google Cloud'a akmaya devam ederken cihazlarınızı yönetilen bir broker'a nasıl taşıyacağınızı gösteriyor.

7 dk okuma

Saniyede MQTT Mesaj Sayısı: Verim Nasıl Tahmin Edilir ve Ölçülür

MQTT verim planlaması birkaç formüle ve tek bir dürüst ölçüme dayanır. Saniyedeki gelen ve giden mesaj sayısını nasıl tahmin edeceğinizi, tepe değerleri nasıl hesaba katacağınızı ve sonucu bir broker planına nasıl eşleyeceğinizi öğrenin.

6 dk okuma

Tüm yazılar →

Özel MQTT broker’ınız birkaç tık uzağınızda

Hesabınızı oluşturun, broker kimlik bilgilerinizi alın ve ilk cihazınızı bağlayın — kurulacak, yamalanacak ya da ölçeklendirilecek sunucu yok.