Yönetilen MQTT Bulutu

Bölgeye Göre MQTT Broker Gecikmesi: Nasıl Ölçülür ve Konum Nasıl Seçilir

Broker'ınızın nerede çalıştığı, uçtan uca MQTT gecikmesinin büyük bir bölümünü belirler. Gecikmeye nelerin katkıda bulunduğunu, kendi sahalarınızdan gidiş-dönüş sürelerini nasıl ölçeceğinizi ve bir kurulum konumunu nasıl seçeceğinizi öğrenin.

Dünya haritası, cihaz sahaları ve aday broker konumlarına gidiş-dönüş sürelerini gösteren bölgeye göre MQTT broker gecikmesi 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

Bölgeye göre MQTT broker gecikmesi önemlidir, çünkü cihazlarınız ile broker arasındaki fiziksel mesafe, hiçbir ayarlamanın ortadan kaldıramayacağı bir alt sınır belirler. Bu rehber MQTT gecikmesinin nereden geldiğini açıklıyor, kendi sahalarınızdan gidiş-dönüş sürelerini kısa bir betikle nasıl ölçeceğinizi gösteriyor ve broker'ınızın nerede çalışması gerektiğini seçmek için pratik bir yöntem sunuyor.

MQTT Gecikmesi Nereden Gelir

Bir sensörün yayın yapmasından bir abonenin mesajı almasına kadar bir MQTT mesajının uçtan uca gecikmesi birkaç bileşenin toplamıdır:

Bileşen Nedir Neden etkilenir
Erişim ağı Cihazdan internete: Wi-Fi, Ethernet, hücresel, uydu Radyo koşulları, operatör, ağ geçidi donanımı
Yayılım Işığın fiber içinde broker'a gidip gelmesi Fiziksel mesafe ve yönlendirme yolu
Yönlendirme ve peering Ağlar arasındaki atlamalar ISS ve bulut sağlayıcı ara bağlantıları
Broker işlemesi Ayrıştırma, yetkilendirme, abonelik eşleştirme, teslimat Broker yükü, plan, fan-out
Abone yolu Broker'dan tüketen uygulamaya Abonenin çalıştığı yer
İstemci davranışı Tamponlama, gruplama, QoS onayları Kütüphane ayarları ve kodunuz

Bölge seçimi çoğunlukla yayılım ve yönlendirmeyi etkiler. Optik fiberdeki ışık, boşluktaki hızının yaklaşık üçte ikisiyle ilerler; bu da herhangi bir yönlendirme sapmasından önce her 100 kilometrelik fiber yolu için yaklaşık 1 milisaniyelik gidiş-dönüş süresine karşılık gelir. Gerçek ağ yolları nadiren düz çizgidir, bu yüzden ölçülen süreler daha yüksektir. Bir kıtadaki cihaz başka bir kıtadaki broker'la konuşuyorsa, her gidiş-dönüşte bu mesafenin bedelini her zaman öder.

Bağlantı kurulumu gidiş-dönüşleri katlar

Gecikme en çok bağlanma anında can yakar. İlk mesaj akmadan önce TLS korumalı bir MQTT istemcisinin bir TCP el sıkışmasına, bir TLS el sıkışmasına ve bir MQTT CONNECT/CONNACK alışverişine ihtiyacı vardır. TLS 1.3 el sıkışması için bir gidiş-dönüş gerekir, TLS 1.2 için genellikle iki. Bu da ilk yayından önce birkaç gidiş-dönüş demektir; derin uykudan uyanan, bağlanan, yayın yapan ve bağlantıyı kesen cihazlarda bu fark edilir. Sürekli bağlı cihazlarda kurulum maliyeti bir kez ödenir ve kararlı durumdaki gidiş-dönüş süresi daha önemlidir.

QoS onay gidiş-dönüşleri ekler

QoS 0 yayını gönder-ve-unut şeklindedir. QoS 1 bir PUBACK bekler, QoS 2 ise dört adımlı bir alışveriş gerektirir. Mesaj abonelere yaklaşık aynı anda ulaşır, ancak yayıncı daha uzun süre bekler; bu da sınırlı in-flight penceresine sahip istemciler için önemlidir. MQTT QoS seviyeleri yazımız bu ödünleşimleri ele alıyor.

Sahalarınızdan MQTT Gecikmesi Nasıl Ölçülür

Genel gecikme haritaları faydalı bir başlangıç noktasıdır, ancak önemli olan kendi sahalarınızdan yaptığınız kendi ölçümlerinizdir. Üç seviyede ölçüm yapın.

Seviye 1: Ağ gidiş-dönüş süresi

Cihaz sahasındaki bir makineden şunu çalıştırın:

# ICMP gidiş-dönüş (bazı ağlar tarafından engellenebilir)
ping -c 20 broker.connectmq.com

# Yolun atlama bazında görünümü, sapmaları fark etmek için faydalı
mtr --report --report-cycles 20 broker.connectmq.com

# MQTT TLS portuna TCP bağlantı süresi
time nc -z -w 5 broker.connectmq.com 8883

nc satırı yalnızca ham bir TCP bağlantısını ölçer; aşağıdaki MQTT seviyesindeki betik daha faydalı TLS ve protokol rakamlarını verir.

Seviye 2: MQTT bağlantısı ve yayın gidiş-dönüşü

paho-mqtt 2.x kullanan bu Python betiği, TLS üzerinden CONNACK'e kadar geçen süreyi ve ardından aynı istemci tarafından yayımlanan ve alınan mesajların gidiş-dönüşünü ölçer. Önemsediğiniz her sahadan çalıştırın.

# mqtt_rtt.py - MQTT bağlantı süresini ve yayın/alma gidiş-dönüşünü ölçer
import statistics
import sys
import threading
import time
import uuid

import paho.mqtt.client as mqtt

HOST = sys.argv[1] if len(sys.argv) > 1 else "broker.connectmq.com"
PORT = 8883
SAMPLES = 30
run_id = uuid.uuid4().hex[:8]
TOPIC = f"connectmq/demo/{run_id}/rtt"

connected = threading.Event()
received = threading.Event()
rtts = []
sent_at = 0.0

def on_connect(client, userdata, flags, reason_code, properties):
    client.subscribe(TOPIC, qos=0)

def on_subscribe(client, userdata, mid, reason_codes, properties):
    connected.set()

def on_message(client, userdata, msg):
    rtts.append((time.perf_counter() - sent_at) * 1000)
    received.set()

client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2,
                     client_id=f"rtt-{run_id}", protocol=mqtt.MQTTv5)
# Özel bir broker için kimlik bilgilerini ekleyin:
# client.username_pw_set("YOUR_USERNAME", "YOUR_PASSWORD")
client.tls_set()
client.on_connect = on_connect
client.on_subscribe = on_subscribe
client.on_message = on_message

t0 = time.perf_counter()
client.connect(HOST, PORT, keepalive=30)
client.loop_start()
if not connected.wait(15):
    sys.exit("could not connect and subscribe")
print(f"connect + TLS + subscribe: {(time.perf_counter() - t0) * 1000:.0f} ms")

for i in range(SAMPLES):
    received.clear()
    sent_at = time.perf_counter()
    client.publish(TOPIC, str(i), qos=0)
    if not received.wait(5):
        print("timeout on sample", i)
    time.sleep(0.2)               # herkese açık broker'da 10 mesaj/sn'nin rahatça altında kal

client.loop_stop()
client.disconnect()
if rtts:
    rtts.sort()
    print(f"publish->receive RTT over {len(rtts)} samples: "
          f"median {statistics.median(rtts):.1f} ms, "
          f"p90 {rtts[int(len(rtts) * 0.9) - 1]:.1f} ms, max {rtts[-1]:.1f} ms")

Aynı istemci hem yayın yapıp hem de aldığı için sonuç, broker üzerinden tam bir gidiş-dönüştür; backend'iniz broker'a yakın konumdaysa bu, cihazdan backend'e gecikme için iyi bir göstergedir. Betik, rastgele bir topic ile herkese açık MQTT test broker'ını kullanır, dolayısıyla hesap gerektirmeden çalışır.

Seviye 3: Kontrolünüzdeki aday bölgeler

Karar vermeden önce konumları karşılaştırmak için her aday bulut bölgesinde küçük bir sanal makine başlatın, TLS ile Mosquitto kurun ve aynı betiği her sahadan her birine karşı çalıştırın. Böylece varsayımlar yerine gerçek rakamlardan oluşan bir matris elde edersiniz.

Ölçümleri Bir Karara Dönüştürmek

Sonuçları, tek ping'ler yerine medyan ve yüksek bir yüzdelik değer kullanarak şuna benzer bir tabloda toplayın:

Saha Bölge A medyan / p90 Bölge B medyan / p90 Bölge C medyan / p90 Cihaz sayısı
Fabrika 1 ... ... ... ...
Fabrika 2 ... ... ... ...
Depo ... ... ... ...
Backend servisleri ... ... ... yok

Ardından şu kuralları uygulayın:

  1. Yalnızca cihaz sayısına göre değil, öneme göre ağırlıklandırın. Bir sahadaki bir kontrol döngüsü, başka yerlerdeki yüzlerce dashboard'dan daha önemli olabilir.
  2. Backend'inizi dahil edin. Veritabanları ve servisler tek bir bulut bölgesinde çalışıyorsa, onlardan uzaktaki bir broker tüketilen her mesaja gecikme ekler.
  3. Yalnızca medyana değil, p90 ve maksimuma da bakın. Etkileşimli her şey için jitter önemlidir.
  4. Veri yerleşimi gereksinimlerini kontrol edin. Veri koruma kuralları bölgeyi gecikmeden önce belirleyebilir; bkz. MQTT veri yerleşimi.
  5. Bölümlendirmeyi değerlendirin. Sahalar kıtalara yayılmışsa ve düşük gecikme gerekiyorsa, bölge başına ayrı broker'lar tek bir merkezi broker'dan daha iyi olabilir.
  6. Gecikmenin nadiren tek etken olduğunu unutmayın. İnsanlar tarafından okunan telemetride maliyet, veri yerleşimi ve operasyonel sadelik çoğu zaman birkaç milisaniyeden daha ağır basar.

ConnectMQ Kurulum Konumu Seçmek

ConnectMQ birkaç kurulum modeli sunar ve konum her birinde farklı işler:

  • Serverless (Free ve Paid): broker'ınız ConnectMQ'nun paylaşımlı kümesinde çalışır. Gidiş-dönüş süresinin ihtiyaçlarınızı karşılayıp karşılamadığını görmek için ölçüm betiğini sahalarınızdan ona karşı çalıştırın.
  • Dedicated: iş yükünüz için izole bir küme. Konum seçeneklerini ekiple görüşün ve ölçüm tablonuzu getirin.
  • BYOC: broker kendi bulut hesabınızda çalışır, dolayısıyla diğer sistemlerinizin zaten bulunduğu bölgede konumlanabilir. Planlama sırasında desteklenen sağlayıcıları ve bölgeleri ekiple teyit edin; BYOC MQTT broker rehberimiz bu modeli anlatıyor.
  • Self Managed Enterprise: kendi altyapınızı nerede çalıştırıyorsanız oraya yerleştirirsiniz.

Çoğu telemetri ve izleme iş yükü için cihazlarla aynı geniş coğrafyada iyi konumlanmış bir broker yeterlidir. Sıkı kontrol döngülerini uçta yerel tutun ve bulut broker'ı denetim, raporlama ve entegrasyon için kullanın. Gerçek zamanlı dijital ikiz gecikmesi yazımız bu ayrımı daha ayrıntılı ele alıyor.

Yaygın Gecikme Tuzakları

  • Ofisten bir kez ölçmek. Gerçek cihaz ağlarından, özellikle hücresel sahalardan ölçün.
  • Wi-Fi'ın suçunu broker'a atmak. Önce ağ testlerini çalıştırın; erişim ağları çoğu zaman mesafeden daha fazla gecikmeye katkıda bulunur.
  • Her mesaj için yeniden bağlanmak. Derin uyku cihazları her uyanışta birkaç gidiş-dönüş öder; güç izin verdiğinde oturumları açık tutun.
  • Aboneleri broker'dan uzağa yerleştirmek. Başka bir bölgedeki backend, her mesajın kat ettiği mesafeyi ikiye katlar.
  • DNS'i göz ardı etmek. Yavaş çözümleyiciler her yeni bağlantıya gecikme ekler; sonuçları ağ geçitlerinde önbelleğe alın.

Gecikmenizi ConnectMQ'da Ölçün

ConnectMQ, Serverless, Dedicated ve BYOC kurulum seçeneklerine sahip barındırılan bir MQTT broker'dır; böylece konumu sahalarınıza ve sistemlerinize göre eşleştirebilirsiniz. app.connectmq.com adresinde kredi kartı gerekmeden ücretsiz bir Serverless broker oluşturun, betiği sahalarınızdan çalıştırın ve sonuçları üretim kurulumunuzu seçmek için kullanın. Bulut MQTT broker rehberi barındırma kararının geri kalanını, bir MQTT broker nasıl ölçeklendirilir yazısı ise kapasiteyi ele alıyor.

Sık Sorulan Sorular

Bölge seçimi MQTT gecikmesini ne kadar etkiler?

Mesafe, her 100 kilometrelik fiber için yaklaşık 1 milisaniyelik bir minimum gidiş-dönüş süresi belirler ve gerçek rotalar buna ek yapar. Başka bir kıtadaki cihazlar için bölge seçimi genellikle gecikmenin ağ kısmına hâkimdir.

MQTT broker gecikmesini ölçmenin en iyi yolu nedir?

Cihaz sahasından bağlantı, TLS ve yayından almaya kadar olan gidiş-dönüşü zamanlayan MQTT seviyesinde bir test çalıştırın ve çok sayıda örnek üzerinden medyan ve yüksek yüzdelik değerleri toplayın.

TLS MQTT'yi yavaşlatır mı?

TLS bağlanma anında gidiş-dönüşler ekler, ancak sonrasında mesaj başına maliyeti çok düşüktür. El sıkışmanın bir kez ödenmesi için mümkün olduğunda bağlantıları açık tutun.

ConnectMQ broker'ımın nerede çalışacağını seçebilir miyim?

BYOC ile broker kendi bulut hesabınızda çalışır, dolayısıyla bölgeyi ekibin desteklediği seçenekler içinden siz seçersiniz. Dedicated kurulumlar için konumu ekiple görüşün.

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