Sunucusuz (serverless) bir MQTT broker, tek bir sunucu bile hazırlamadan çalışan bir MQTT uç noktası, kimlik bilgileri ve bir dashboard sunar; çünkü broker'ınız sağlayıcının işlettiği paylaşımlı, çok kiracılı bir kümede yaşar. Bu rehberde sunucusuz modelin arka planda nasıl çalıştığını, hangi kullanım limitlerinin gerçekten önemli olduğunu, hangi iş yüklerine uygun olduğunu ve ConnectMQ'da ücretsiz bir sunucusuz broker'ı adım adım nasıl oluşturup test edeceğinizi öğreneceksiniz.
Bir MQTT Broker İçin "Sunucusuz" Ne Anlama Gelir
Elbette işin içinde hâlâ sunucular var. "Sunucusuz", sunuculara kimin sahip olduğunu ve onları nasıl tükettiğinizi tanımlar. Bir sanal makinede Mosquitto gibi kendi barındırdığınız bir broker'da makine boyutunu seçer, paketleri kurar, güvenlik duvarı portlarını açar, TLS sertifikalarını yeniler ve işletim sistemini yamalarsınız. Sunucusuz bir MQTT broker'da bunların hepsi sağlayıcının işidir. Bir hostname, portlar, bir kullanıcı adı, bir parola ve bir client ID alırsınız ve yayın yapmaya başlarsınız.
Temel fikir çok kiracılıktır. İyi boyutlandırılmış tek bir broker kümesi aynı anda birçok müşteriye hizmet verir. Her müşteri o kümede mantıksal olarak izole bir "broker" alır: kendi kimlik bilgileri, kendi topic alanı ve kendi kotaları. Kapasite havuzlandığı için sağlayıcı küçük bir katmanı ücretsiz veya çok ucuza sunabilir ve siz de %2 CPU'da boşta bekleyen bir sanal makine için asla ödeme yapmazsınız.
Broker'ın rolünü hatırlamak istiyorsanız devam etmeden önce bir MQTT broker'ın ne yaptığına göz atın.
Kiracı İzolasyonu Nasıl Çalışır
Paylaşımlı bir küme ancak kiracılar birbirini göremiyor veya rahatsız edemiyorsa güvenlidir. İyi tasarlanmış sunucusuz bir broker izolasyonu birkaç katmanda uygular:
- Kimlik doğrulama. Her bağlantı tek bir kiracıya verilmiş kimlik bilgilerini sunar. Burada client ID'ler verilen kimlik bilgilerine bağlıdır, dolayısıyla başka bir kiracı cihazlarınızın kimliğine bürünemez.
- Topic isim alanı. Topic'leriniz broker'ınızla sınırlıdır, bu yüzden
#aboneliği yalnızca sizin trafiğinizi döndürür. - Kotalar. Bağlantı sayıları, mesaj boyutu ve QoS seviyesi plan başına uygulanır, böylece bir kiracı paylaşılan kaynakları tüketemez.
- Kötüye kullanım koruması. Flood koruması ve tekrarlanan başarısız girişlerden sonra IP engelleme, hatalı davranan bir istemcinin kümeyi herkes için yavaşlatmasını önler.
Bir kotaya ulaşıldığında MQTT 5 istemcisi sessizce düşürülmek yerine anlamlı bir reason code alır (örneğin 0x97, quota exceeded); bu da limitleri gizemli olmaktan çıkarıp hata ayıklanabilir kılar.
Sunucusuz, Dedicated ve Kendi Barındırma Karşılaştırması
Sunucusuz katman, tam yönetilen bir MQTT servisini tüketmenin birkaç yolundan biridir. Tablo yaygın seçenekleri karşılaştırıyor.
| Özellik | Kendi barındırma | Serverless (paylaşımlı) | Dedicated (izole) |
|---|---|---|---|
| Sunucuları kim çalıştırır | Siz | Sağlayıcı | Sağlayıcı |
| İlk mesaja kadar geçen süre | Saatlerden günlere | Dakikalar | Hazırlık adımı |
| Kapasite | Ne kadar boyutlandırırsanız | Havuzlanmış, plan kotaları | Size ayrılmış |
| Gürültülü komşular | Yok | Kotalarla hafifletilir | Yok |
| Boşta maliyet | Tam VM maliyeti | Ücretsiz veya düşük | Ayrılmış kapasite |
| En uygun olduğu durum | Tam kontrol, internetten yalıtılmış sahalar | Prototipler, küçük filolar, eğitim, erken aşama ürünler | Sabit yükü olan üretim filoları |
Dürüst ödünleşim şu: sunucusuz model, küçük ölçekte sıfır operasyon ve neredeyse sıfır maliyet karşılığında ayrılmış kapasiteden ve bir miktar yapılandırılabilirlikten vazgeçer. Garantili izolasyona ve öngörülebilir kapasite payına ihtiyaç duyduğunuzda bir sonraki adım dedicated MQTT broker olur.
Sunucusuz Bir MQTT Broker'da Önemli Olan Limitler
Her paylaşımlı katman kotalarını yayımlar. Bunları dipnot değil, tasarım kısıtları olarak okuyun. ConnectMQ'nun sunucusuz planları şöyledir:
| Limit | Serverless (Free) | Serverless (Paid) |
|---|---|---|
| Eşzamanlı bağlantılar | 25'e kadar | 1.000'e kadar |
| Maksimum QoS | 1 | 2 |
| Maksimum mesaj boyutu | 256 KB | 1 MB |
| Shared subscription | Hayır | Evet |
| Protokoller | MQTT 3.1.1 ve 5.0 | MQTT 3.1.1 ve 5.0 |
Bunların pratikteki anlamı:
- Kıt kaynak bağlantılardır. Her cihaz, her dashboard sekmesi ve her backend işçisi bir bağlantı tutar. Yirmi sensör artı bir Node-RED örneği artı iki tarayıcı dashboard'u şimdiden 23 bağlantı eder. Dağıtmadan önce sayın.
- QoS 1 çoğu telemetriyi karşılar. İdempotent tüketicilerle en az bir kez teslimat neredeyse her sensör iş yükünü kaldırır. Gerçekten tam olarak bir kez semantiğine ihtiyacınız varsa MQTT QoS seviyeleri yazısını okuyun ve ücretli katmanı değerlendirin.
- Mesaj boyutu telemetride nadiren sorun olur. Bir JSON okuması birkaç yüz bayttır. 256 KB'nin önemli olduğu yer görüntüler ve firmware parçalarıdır; dosyanın kendisi yerine nesne depolamaya giden bir URL yayımlayın.
- Shared subscription yatay tüketicileri mümkün kılar. Tek bir topic akışını bölen birkaç backend işçisi çalıştırmayı planlıyorsanız ücretli sunucusuz katmanda bulunan
$share/group/topicözelliğine ihtiyacınız vardır.
Sunucusuz Modele Uyan İş Yükleri
Sunucusuz bir MQTT broker şunlar için mükemmel bir seçimdir:
- Prototipler ve kavram kanıtları. Bir fikirden çalışan bir cihaz-dashboard döngüsüne bir öğleden sonrada geçebilirsiniz.
- Küçük üretim filoları. Bir düzine sensörlü bir bina, bir sera kontrolcüsü veya küçük bir perakende kurulumu bağlantı kotalarına rahatça sığar.
- Sınıflar ve hackathon'lar. Kimse altyapı çalıştırmadan her takım izole bir broker alır.
- Erken aşama ürünler. Girişimler ayrılmış kapasiteye bağlanmadan önce pazarı doğrulayabilir. Girişimler için MQTT broker seçimi rehberimiz büyüme yolunu ele alıyor.
- Geliştirme ve staging ortamları. Dedicated bir üretim broker'ı olan ekipler bile geliştirme için çoğu zaman sunucusuz bir broker tutar.
Binlerce sürekli açık cihazınız, sürekli yüksek verim altında sıkı gecikme bütçeleriniz veya paylaşımlı altyapıyı yasaklayan bir politikanız olduğunda daha zayıf bir seçimdir.
Adım Adım: Ücretsiz Bir ConnectMQ Serverless Broker Oluşturun
Adım 1: Kaydolun ve Broker'ı Oluşturun
ConnectMQ adresine gidin, portalı açın, Serverless (Free) planını seçin ve bir broker oluşturun. Portal bir kullanıcı adı, bir parola ve bir client ID üretir. Bunları güvenli bir yere kopyalayın; parolaya diğer gizli bilgiler gibi davranın.
Adım 2: Tarayıcı İçi İstemciyle Test Edin
Portal, tarayıcı içi bir MQTT istemcisi ve canlı bir topic gezgini içerir. test/# konusuna abone olun, test/hello konusuna yayın yapın ve mesajın göründüğünü doğrulayın. Bu, işin içine herhangi bir cihaz kodu girmeden önce kimlik bilgilerini doğrular.
Adım 3: Komut Satırından Bağlanın
Mosquitto istemcileri kuruluyken 8883 portunda TLS üzerinden bağlanın:
mosquitto_sub -h broker.connectmq.com -p 8883 --capath /etc/ssl/certs \
-u YOUR_USERNAME -P YOUR_PASSWORD -i YOUR_CLIENT_ID -t 'sensors/#' -v
Broker bir Let's Encrypt sertifikası kullanır, bu nedenle sistem CA paketi yeterlidir; özel bir CA dosyası gerekmez.
Adım 4: Python'dan Yayın Yapın
Bu betik, sürüm 2 callback API'siyle paho-mqtt 2.x kullanır ve her beş saniyede bir okuma yayımlar.
import json
import random
import ssl
import time
import paho.mqtt.client as mqtt
HOST = "broker.connectmq.com"
PORT = 8883
USERNAME = "YOUR_USERNAME"
PASSWORD = "YOUR_PASSWORD"
CLIENT_ID = "YOUR_CLIENT_ID"
def on_connect(client, userdata, flags, reason_code, properties):
print(f"Connected: {reason_code}")
def on_disconnect(client, userdata, flags, reason_code, properties):
print(f"Disconnected: {reason_code}")
client = mqtt.Client(
mqtt.CallbackAPIVersion.VERSION2,
client_id=CLIENT_ID,
protocol=mqtt.MQTTv5,
)
client.username_pw_set(USERNAME, PASSWORD)
client.tls_set(cert_reqs=ssl.CERT_REQUIRED)
client.on_connect = on_connect
client.on_disconnect = on_disconnect
client.connect(HOST, PORT, keepalive=60)
client.loop_start()
try:
while True:
reading = {"temp_c": round(random.uniform(20, 25), 2), "ts": int(time.time())}
info = client.publish("sensors/room1/temperature", json.dumps(reading), qos=1)
info.wait_for_publish()
print("Published", reading)
time.sleep(5)
except KeyboardInterrupt:
pass
finally:
client.loop_stop()
client.disconnect()
Kaydolmadan yalnızca denemek istiyorsanız, 1883 portundaki herkese açık MQTT test broker'ını kullanın, kimlik bilgilerini kaldırın, boş olmayan benzersiz herhangi bir client ID ve connectmq/demo/a7f3k2/... gibi benzersiz bir topic öneki kullanın. Herkese açık alanın herkes tarafından okunabildiğini unutmayın; oraya asla gerçek veri göndermeyin.
Adım 5: Kullanımı Dashboard'da İzleyin
Portal dashboard'u broker'ınızın etkinliğini gösterir; topic'leriniz ISA-95 yapısını izlediğinde cihazlar görünümü istemcileri ISA-95 seviyelerine göre gruplar. Ayrıca eşik uyarı kuralları tanımlayabilir (örneğin sıcaklık 30'un üzerinde) ve tetiklenen uyarıları uyarı günlüğünde inceleyebilirsiniz.
Kotaların İçinde Kalmak İçin Tasarım İpuçları
- Bağlantıları yeniden kullanın. On BLE sensörünü tek bir MQTT bağlantısında toplayan bir ağ geçidi on değil, bir slot kullanır.
- Boştaki dashboard'ları kapatın. WebSocket üzerinden açık olan tarayıcı sekmeleri açık kaldıkları sürece bağlantı sayılır.
- Durum için retained message kullanın. Bilinen son değeri retained olarak yayımlamak, yeni abonelerin yoklama yapmadan mevcut durumu anında okumasını sağlar.
- Makul bir keep alive belirleyin. 30 ila 60 saniye tipiktir. Çok kısa aralıklar trafiği israf eder; çok uzun olanlar bağlantı kopmasının tespitini geciktirir.
- Reason code'ları ele alın. Bir kota reddinin günlüklerinizde net görünmesi için CONNACK ve DISCONNECT reason code'larını günlüğe kaydedin.
- Benzersiz client ID'ler kullanın. Aynı ID'yi paylaşan iki cihaz birbirini sürekli düşürür; "istemcim sürekli yeniden bağlanıyor" sorununun en yaygın tek nedeni budur.
Sunucusuzun Ötesine Geçmek
Ücretsiz katmanı aşmak iyi bir sorundur. Yol genellikle şöyledir: geliştirme için Serverless (Free), 1.000'e kadar bağlantı ve shared subscription ile erken aşama bir ürün için Serverless (Paid), ardından izole bir küme istediğinizde Dedicated. Her şey standart MQTT 3.1.1 ve 5.0 konuştuğu için katman değiştirmek, cihaz firmware mantığını yeniden yazmak değil, hostname ve kimlik bilgilerini güncellemek anlamına gelir. Barındırma seçeneklerinin büyük resmi için bulut MQTT broker rehberimizi okuyun ve bir değerlendirme kontrol listesi için bir IoT MQTT broker nasıl seçilir yazısına bakın.
Sunucusuz Broker'ınızı ConnectMQ'da Başlatın
app.connectmq.com adresinde kredi kartı olmadan ücretsiz bir Serverless broker oluşturabilirsiniz. Serverless (Free) planını seçin, bir broker oluşturun, üretilen kimlik bilgilerini kopyalayın ve yukarıdaki Python betiğini çalıştırın. Sağlayıcı kümeyi yönetirken dakikalar içinde TLS üzerinden yayın yapan cihazlarınız, ayrıca onları izlemek için bir topic gezgini, dashboard ve uyarı kurallarınız olacak.
Sık Sorulan Sorular
Sunucusuz bir MQTT broker üretim için yeterince güvenli mi?
Evet, birçok iş yükü için. Trafik TLS ile şifrelenir, kimlik bilgileri kiracıya özeldir ve client ID'ler bunlara bağlıdır; politikanız paylaşımlı altyapıyı yasaklıyorsa dedicated veya BYOC bir kurulum seçin.
Bağlantı limitini aştığımda ne olur?
Broker fazladan bağlantıyı reddeder. MQTT 5 istemcileri quota exceeded gibi bir reason code alır; böylece tahmin etmek yerine bunu günlüğe kaydedip tepki verebilirsiniz.
Ücretsiz katmanda MQTT 5 özelliklerini kullanabilir miyim?
Evet. Retained message, session expiry, message expiry ve topic alias'lar dahil MQTT 3.1.1 ve 5.0'ın ikisi de desteklenir; QoS 1 ile sınırlıdır ve shared subscription ücretli sunucusuz planı gerektirir.
Plan yükseltmek için cihaz kodumu değiştirmem gerekir mi?
Genellikle hayır. Yükseltme kotaları değiştirir; dedicated bir broker'a geçmek ise MQTT mantığı aynı kalırken genellikle hostname ve kimlik bilgilerini güncellemek anlamına gelir.
Herkese açık test broker'ı sunucusuz bir broker ile aynı şey mi?
Hayır. broker.connectmq.com adresindeki herkese açık broker anonim bağlantıları kabul eder ve her şey herkes tarafından okunabilir; sunucusuz bir broker ise size özel, kimliği doğrulanmış kimlik bilgileri ve kendi kotalarınızı verir.



