Yönetilen MQTT Bulutu

Public vs Private MQTT Broker: Projenize Hangisi Uyar?

Public test broker'ları öğrenmek ve demolar için idealdir; gerçek cihazların yeri ise private broker'lardır. Aradaki pratik farkları ve istemcilerinizi yeniden yazmadan birinden diğerine nasıl geçeceğinizi öğrenin.

Bir tarafta açık ve paylaşımlı topic alanı, diğer tarafta kilitli özel broker ile public vs private MQTT broker 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 ve private MQTT broker arasında seçim yapmak tek bir soruya dayanır: mesajlarınızı başka kim görebilir ve onlara dokunabilir? Bu rehber, ikisinin gizlilik, kimlik doğrulama, sınırlar ve güvenilirlik açısından nasıl farklılaştığını açıklıyor ve public bir test broker'ından private bir broker'a kodunuzu yeniden yazmadan tam olarak ne zaman ve nasıl geçeceğinizi gösteriyor.

Public MQTT Broker Nedir

Public broker, herkesin hesap açmadan bağlanabildiği, internetten erişilebilen bir MQTT sunucusudur. Bir client ID seçer, bir topic'e abone olur ve yayın yapmaya başlarsınız. Bunlardan birkaçı mevcuttur; ConnectMQ da broker.connectmq.com adresinde, ücretsiz public MQTT broker makalesinde ayrıntılı olarak anlatılan bir tane çalıştırır.

Public broker'lar öğrenmek, demolar, hızlı bağlantı kontrolleri ve örnek paylaşmak için tasarlanmıştır. Bilinçli olarak açıktırlar ve gerçek cihaz verilerinin yeri olmamalarının nedeni de tam olarak budur.

Public bir broker'ın temel özellikleri:

  • Anonim erişim. Kullanıcı adı ya da parola yoktur; herkes bağlanabilir.
  • Paylaşımlı topic alanı. Her istemci aynı topic ağacını görür. Bir topic'e siz abone olabiliyorsanız bir yabancı da olabilir.
  • Koruyucu sınırlar. Herkes için kullanılabilir kalmak adına public broker'lar mesaj boyutunu, hızı ve abonelikleri sınırlar.
  • Garanti yok. Bunlar bir üretim platformu değil, ücretsiz bir topluluk hizmetidir.

Private MQTT Broker Nedir

Private broker yalnızca geçerli kimlik bilgilerine sahip istemcileri kabul eder. Topic alanı size ve cihazlarınıza aittir. Kendi sunucunuzda barındırılabilir ya da yönetilen bir hizmet olabilir; her iki durumda da belirleyici özellikleri şunlardır:

  • Kimlik doğrulama. İstemciler bir kullanıcı adı, parola ve genellikle broker'ın tanıdığı bir client ID sunar.
  • İzolasyon. Diğer kiracılar topic'lerinizi okuyamaz ya da onlara yayın yapamaz.
  • Varsayılan olarak şifreleme. 8883 portunda TLS, tarayıcılar için 8084 portunda Secure WebSocket.
  • Sınırlar, anonim bir kalabalığa göre değil, planınıza göre boyutlandırılır.

MQTT broker'lar hakkında daha geniş bir arka plan isterseniz, o makale publish/subscribe modelinin kendisini ele alıyor.

Bir Bakışta Public vs Private MQTT Broker

Özellik Public broker (broker.connectmq.com) Yönetilen private broker
Hesap gerekli mi Hayır Evet, ücretsiz kayıt
Kimlik doğrulama Anonim, boş olmayan benzersiz herhangi bir client ID Üretilmiş kullanıcı adı, parola ve client ID
Topic'lerinizi kim okuyabilir Abone olan herkes Yalnızca kimlik bilgisine sahip istemcileriniz
Mesaj boyutu 64 KB'a kadar Ücretsiz Serverless'ta 256 KB, ücretli Serverless'ta 1 MB
Hız İstemci başına saniyede 10 mesaj Plan kotaları
Abonelikler İstemci başına 10, 8 topic seviyesi Plan kotaları
QoS 0, 1 ve 2 Ücretsizde 1'e kadar, ücretlide 2
Oturum süresi (session expiry) 30 dakikaya kadar Plan sınırları içinde istemcileriniz tarafından yapılandırılır
Uygun olduğu durum Eğitimler, demolar, hızlı testler Gerçek veriyle prototipler, pilotlar, üretim

Protokol aynıdır. MQTT 3.1.1 ve MQTT 5.0 her ikisinde de aynı şekilde davranır; yalnızca erişim ve sınırlar değişir.

Public Broker Ne Zaman Doğru Araçtır

Veri başkası için hiçbir değer taşımıyorsa ve hız her şeyden önemliyse public bir broker kullanın:

  1. MQTT öğrenmek. Dakikalar içinde yayın yapın, abone olun, joker karakterleri ve retained message'ları deneyin.
  2. Atölyeler ve sınıflar. Her katılımcı hiçbir şey yapılandırmadan bağlanır.
  3. Yeni bir kütüphane ya da kartı test etmek. ESP32'nizin ya da Python betiğinizin bir broker'a ulaşabildiğini doğrulayın.
  4. Tekrarlanabilir bir örnek paylaşmak. Herkesin çalıştırabileceği bir blog yazısı ya da hata raporu.

Hızlı bir test şöyle görünür:

# Diğer kullanıcılarla karışmamak için benzersiz bir önekle abone olun
mosquitto_sub -h broker.connectmq.com -p 1883 -i demo-sub-c41d -t "connectmq/demo/c41d/#" -v

# Başka bir terminalden yayınlayın
mosquitto_pub -h broker.connectmq.com -p 1883 -i demo-pub-c41d -t "connectmq/demo/c41d/hello" -m "it works"

Her zaman connectmq/demo/c41d/ gibi rastgele, benzersiz bir topic öneki kullanın. Bu, test trafiğinizi diğerlerinden ayrı tutar, ancak onu özel yapmaz.

Ne Zaman Private Broker'a İhtiyacınız Olur

Aşağıdakilerden herhangi biri geçerli olduğu anda private bir broker'a geçin:

  • Veri bir kişiyi, evi, aracı ya da konumu tanımlıyorsa. Bir evin ne zaman boş olduğunu ortaya koyan sensör değerleri hassastır.
  • Cihazlar komut kabul ediyorsa. Public bir broker'da herkes komut topic'inize yayın yapabilir.
  • Bir müşteriyle pilot yürütüyorsanız. Kimlik doğrulama ve şifreleme bekleyeceklerdir.
  • Public sınırların izin verdiğinden daha büyük mesajlara, daha yüksek veri hacmine ya da daha fazla aboneliğe ihtiyacınız varsa.
  • Çalışma süresi önemliyse. Public bir test hizmeti, üzerine ürün inşa edilecek bir şey değildir.

Public MQTT broker sınırlamaları makalesi bu kısıtların her birini daha derinlemesine açıklıyor.

Yeniden Yazmadan Public'ten Private'a Geçmek

Her iki taraf da standart MQTT konuştuğu için geçiş bir yapılandırma değişikliğidir. İşte hedefini ortam değişkenlerinden okuyan, paho-mqtt 2.x kullanan bir Python örneği; böylece aynı kod ikisinde de çalışır:

import os
import ssl
import paho.mqtt.client as mqtt

HOST = os.getenv("MQTT_HOST", "broker.connectmq.com")
PORT = int(os.getenv("MQTT_PORT", "1883"))
USERNAME = os.getenv("MQTT_USERNAME")          # public broker için boş bırakın
PASSWORD = os.getenv("MQTT_PASSWORD")
CLIENT_ID = os.getenv("MQTT_CLIENT_ID", "demo-c41d-py")
TOPIC = os.getenv("MQTT_TOPIC", "connectmq/demo/c41d/temp")


def on_connect(client, userdata, flags, reason_code, properties):
    print("Connected:", reason_code)
    client.subscribe(TOPIC, qos=1)
    client.publish(TOPIC, "21.7", qos=1)


def on_message(client, userdata, msg):
    print(msg.topic, msg.payload.decode())


client = mqtt.Client(
    mqtt.CallbackAPIVersion.VERSION2,
    client_id=CLIENT_ID,
    protocol=mqtt.MQTTv5,
)
client.on_connect = on_connect
client.on_message = on_message

if USERNAME:
    client.username_pw_set(USERNAME, PASSWORD)
if PORT == 8883:
    client.tls_set(cert_reqs=ssl.CERT_REQUIRED)

client.connect(HOST, PORT, keepalive=60)

try:
    client.loop_forever()
except KeyboardInterrupt:
    client.disconnect()

Private broker için değişkenleri ConnectMQ portalınızdan ayarlayın:

export MQTT_HOST=broker.connectmq.com
export MQTT_PORT=8883
export MQTT_USERNAME=YOUR_USERNAME
export MQTT_PASSWORD=YOUR_PASSWORD
export MQTT_CLIENT_ID=YOUR_CLIENT_ID
export MQTT_TOPIC=plant1/line1/temp
python client.py

ConnectMQ'da client ID'nin verilen kimlik bilgilerine bağlı olduğunu unutmayın; bu yüzden yeni bir tane uydurmak yerine portalın ürettiği client ID'yi kullanın.

Geçiş Sırasında Sık Yapılan Hatalar

  • Üretim firmware'inde 1883 portunu bırakmak. Cihazlar için 8883 (TLS), tarayıcılar için /mqtt path'iyle 8084 kullanın.
  • Demo topic önekini korumak. Topic'leri gerçek bir yapıya, örneğin tesis/alan/hat/cihaz biçimine yeniden adlandırın. Bulut MQTT broker rehberi, barındırılan broker'lar için topic tasarımına dair yönergeler içerir.
  • Kimlik bilgilerini public bir depoda koda gömmek. Bunları ortam değişkenlerinden, bir gizli bilgi deposundan ya da cihaz provisioning'inden yükleyin.
  • Tek bir client ID'yi birkaç cihazda kullanmak. Broker, diğeri her bağlandığında eski oturumu düşürür ve bu da bir yeniden bağlanma döngüsüne yol açar.
  • Her yerde QoS 2 varsaymak. Ücretsiz Serverless planı QoS 1'e kadar destekler. QoS 2'ye ihtiyacınız varsa ücretli bir plan kullanın ya da idempotent QoS 1 işleme için tasarlayın. Bkz. MQTT QoS seviyeleri açıklaması.

Private Broker'ınız için Güvenlik Kontrol Listesi

Private bir broker'a geçmek anonim erişimi ortadan kaldırır, ancak sonucun gerçekte ne kadar güvenli olduğunu birkaç alışkanlık belirler:

  1. Cihaz ya da servis başına bir kimlik bilgisi seti. Bir cihaz kaybolursa ya da ele geçirilirse diğerlerine dokunmadan onu iptal edebilirsiniz.
  2. Laboratuvar dışında her yerde TLS. Bir hatayı aşmak için doğrulamayı kapatmak yerine istemcinizde sunucu sertifikasını doğrulayın.
  3. Telemetri ve komut topic'lerini ayırın. Topic ağacında hangi mesajların gerçek ekipmanın durumunu değiştirdiğini açıkça belli edin ve bunlara kimin yayın yaptığını gözden geçirin.
  4. Bağlantı günlüğünü izleyin. Tekrarlanan başarısız girişler genellikle yanlış yapılandırılmış bir cihaz ya da sızmış bir kimlik bilgisi anlamına gelir. Broker'ınız tekrarlanan başarısızlıklardan sonra bir IP'yi engelleyebilir, ancak yine de nedenini bulmak istersiniz.
  5. Deneyler için bir test topic öneki tutun; böylece hata ayıklama trafiği asla üretim verisiyle karışmaz.

MQTT güvenliği en iyi uygulamaları rehberi bu noktaların her birini daha derinlemesine ele alıyor.

Basit Bir Pratik Kural

Bir forumda paylaşmaktan rahatsız olmayacağınız her şey için public broker'ı kullanın. Geri kalan her şey için private bir broker kullanın. Geçiş yalnızca birkaç yapılandırma değerine mal olduğundan, gerçek cihazları ilk öğleden sonradan daha uzun süre public bir broker'da tutmak için hiçbir neden yoktur.

Private Broker'ınızı ConnectMQ'da Edinin

Testlerin ötesine geçmeye hazır olduğunuzda kredi kartı gerektirmeden ücretsiz bir Serverless plana kaydolun. Bir broker oluşturun, üretilen kullanıcı adını, parolayı ve client ID'yi kopyalayın ve aynı kodu 8883 portuna yönlendirin. Portalın tarayıcı içi MQTT istemcisi ve canlı topic gezgini trafiği anında doğrulamanızı sağlar. ConnectMQ ve barındırılan bir MQTT broker'ın operasyon yükünü nasıl ortadan kaldırdığı hakkında daha fazla bilgi edinin.

Sık Sorulan Sorular

Public bir MQTT broker'da başkaları mesajlarımı görebilir mi?

Evet. Public bir broker'da herkes, # gibi joker karakterler dahil herhangi bir topic'e abone olabilir. Asla kişisel veri, kimlik bilgisi ya da gerçek ekipmanı kontrol eden komutlar göndermeyin.

Private bir MQTT broker her zaman şifreli midir?

Otomatik olarak değil, ancak iyi bir yönetilen private broker 8883 portunda TLS ve 8084 portunda Secure WebSocket sunar. Üretimde 1883 üzerindeki düz TCP yerine bu portları kullanın.

Public'ten private'a geçmek için kodumu değiştirmem gerekir mi?

Genellikle yalnızca host, port, kimlik bilgileri ve client ID değişir. Kodunuz bunları yapılandırmadan okuyorsa geçiş dakikalar sürer.

Ücretsiz bir private broker prototip için yeterli mi?

Birçok prototip için evet. ConnectMQ'nun ücretsiz Serverless planı 25 bağlantıya, QoS 1'e kadar ve 256 KB mesajlara izin verir; bu da çoğu küçük pilotu karşılar.

İ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.