Yönetilen MQTT Bulutu

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.

Cihazların Google Cloud Pub/Sub'ı besleyen yönetilen bir MQTT broker'a taşındığı Google Cloud IoT Core alternatifi geçiş diyagramı
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

Bir Google Cloud IoT Core alternatifi arıyorsanız ya kapanış nedeniyle ortada kalan bir cihaz filosunu taşıyorsunuz ya da Google Cloud üzerinde yerel bir cihaz ağ geçidi olmadan yeni bir proje tasarlıyorsunuz. Bu rehber IoT Core'un ne yaptığını açıklıyor, gerçekçi alternatifleri tarafsız biçimde karşılaştırıyor, IoT Core kavramlarını standart MQTT'ye eşliyor ve verileriniz Google Cloud servislerine akmaya devam ederken cihazları yönetilen bir MQTT broker'a taşıma sürecini adım adım anlatıyor.

Google Cloud IoT Core'a Ne Oldu?

Google, 2022'de Cloud IoT Core'un sonlandırılacağını duyurdu ve servis 16 Ağustos 2023'te kullanımdan kaldırıldı. Bu tarihten sonra cihazlar artık servisin MQTT ve HTTP köprülerine bağlanamadı. Google doğrudan bir halef çıkarmadı; bunun yerine müşterileri iş ortağı çözümlerine ve genel Google Cloud servisleri üzerine inşa etmeye yönlendirdi. Pub/Sub, Dataflow ve BigQuery gibi diğer Google Cloud ürünleri bundan etkilenmedi ve IoT verileri için yaygın hedefler olmaya devam ediyor.

IoT Core üç işlevi bir araya getiriyordu ve her birinin bir karşılığa ihtiyacı var:

  1. Cihaz bağlantısı: 8883 (ve 443) portunda mqtt.googleapis.com adresindeki bir MQTT endpoint'i.
  2. Cihaz kaydı ve kimlik doğrulama: projects/PROJECT/locations/REGION/registries/REGISTRY/devices/DEVICE biçimindeki uzun client ID'lerle tanımlanan, cihaz başına bir özel anahtarla imzalanıp MQTT parolası olarak gönderilen bir JWT ile kimliği doğrulanan cihazlar.
  3. Veri yönlendirme: /devices/DEVICE_ID/events topic'ine yayınlanan telemetri Pub/Sub topic'lerine iletiliyordu; yapılandırma ve komutlar /devices/DEVICE_ID/config ve /devices/DEVICE_ID/commands/# üzerinden aşağı iniyor, cihaz durumu ise /devices/DEVICE_ID/state üzerinden yukarı çıkıyordu.

Google Cloud IoT Core Alternatifi Seçeneklerinin Karşılaştırması

Tek bir doğru cevap yok. En iyi alternatif, IoT Core özelliklerini ne kadar derinlemesine kullandığınıza ve verilerinizin nerede bulunmasını istediğinize bağlıdır.

Seçenek Ne elde edersiniz Ne zaman uygun Ödünler
Yönetilen MQTT broker (ConnectMQ gibi) Standart MQTT endpoint'i, kimlik bilgileri, konsol Sade, taşınabilir MQTT istiyor ve işlemeyi Google Cloud'da tutmak istiyorsanız Pub/Sub'a küçük bir iletim servisi eklersiniz
Başka bir hyperscaler IoT servisi (AWS IoT Core, Azure IoT Hub veya Event Grid MQTT) Cihaz kaydı, kurallar, o bulutla derin entegrasyon İşlemeyi o buluta taşımaya hazırsanız Tescilli topic kuralları ve bulutlar arası veri aktarımı
Kapanış sırasında önerilen iş ortağı platformları Bazı durumlarda IoT Core uyumlu API'ler Cihazlarda en az değişikliği istiyorsanız Bağımlı olacağınız sağlayıcıya özgü bir API daha
GKE veya Compute Engine üzerinde kendi barındırdığınız broker Tam kontrol, açık kaynak seçenekler Operasyon kapasiteniz varsa Yamalar, ölçekleme, sertifikalar ve nöbet sizin sorumluluğunuzda
IoT uygulama platformları Dashboard'lar, cihaz yönetimi, kurallar Yalnızca taşıma katmanı değil, eksiksiz bir uygulama katmanı gerekiyorsa Daha ağır, çoğu zaman daha kuralcı

Her seçenek meşrudur. Hyperscaler IoT servisleri zengin kural motorları ve entegrasyon sunar; iş ortağı platformları firmware değişikliklerini azaltabilir; kendi barındırmanız maksimum kontrol sağlar. Yönetilen bir MQTT broker ise ortada konumlanır: standart protokol, minimum bağımlılık (lock-in) ve çalıştırılacak sunucu yok; bunun bedeli, Google Cloud'a iletimi kendiniz kurmanızdır. Hyperscaler servislerinin daha geniş bir karşılaştırması için AWS IoT Core alternatifi rehberimize bakın.

IoT Core Kavramlarını Standart MQTT'ye Eşleme

Standart bir broker'a geçmek büyük ölçüde bir çeviri işidir:

IoT Core kavramı ConnectMQ'daki standart MQTT karşılığı
mqtt.googleapis.com:8883 broker.connectmq.com:8883 (TLS) veya güvenli WebSocket için 8084
Uzun registry client ID'si Portaldan verilen client ID
Cihaz anahtarıyla imzalanmış JWT Kimlik bilgisi seti başına verilen kullanıcı adı ve parola
/devices/ID/events Kendi hiyerarşiniz, ör. fleet/site1/ID/telemetry
/devices/ID/state Retained topic, ör. fleet/site1/ID/state
/devices/ID/config Cihazın abone olduğu retained topic, ör. fleet/site1/ID/config
/devices/ID/commands/# QoS 1 ve idempotent payload'lara sahip komut topic'i
Pub/Sub yönlendirmesi Pub/Sub'a ileten bir abone servisi
Registry meta verileri Kendi envanter veritabanınız veya retained meta veri topic'leri

Topic düzenini artık siz tasarlıyorsunuz. IoT Core'un kullandığı baştaki eğik çizgiyi kaldırın, çünkü boş bir ilk seviye ekler; imalat alanında çalışıyorsanız ISA-95 tarzı bir hiyerarşi düşünün.

Adım Adım: Cihazları Yönetilen Bir MQTT Broker'a Taşıyın

1. Broker'ı Hazırlayın

app.connectmq.com adresinden kaydolun, zirve bağlantı sayınıza uygun bir plan seçin, bir broker oluşturun ve kimlik bilgilerini oluşturun. Ücretsiz Serverless plan (en fazla 25 bağlantı, QoS 1'e kadar) firmware'i ve iletim servisini doğrulamak için yeterlidir; Serverless Paid ise en fazla 1.000 bağlantı ve QoS 2'yi destekler.

2. Cihaz Firmware'ini Güncelleyin

JWT üretimini ve IoT Core client ID'sini verilen kullanıcı adı, parola ve client ID ile değiştirin, host'u değiştirin ve topic adlarını güncelleyin. TLS'i 8883 portunda tutun; ConnectMQ bir Let's Encrypt sertifikası kullandığından güven deponuz (trust store) Google'ın kök sertifikaları yerine ISRG Root X1 sertifikasını içermelidir. IoT Core cihazlarında sıklıkla yeniden bağlanma hatalarına yol açan JWT yenileme mantığını kaldırın. Cihazlarınız ESP32 tabanlıysa ESP32 MQTT eğitimi eksiksiz bir TLS istemcisi gösteriyor.

3. Telemetriyi Pub/Sub'a İletin

ConnectMQ bulut veri köprüleri içermez; bu nedenle veriler Pub/Sub'a sıradan bir MQTT istemcisi olarak bağlanan küçük bir iletim servisi aracılığıyla ulaşır. Bunu topic'e yayın yapma izni olan bir servis hesabıyla Cloud Run, GKE veya bir VM üzerinde çalıştırın. Kurulum için pip install "paho-mqtt>=2.0" google-cloud-pubsub komutunu kullanın.

import os
import ssl

import paho.mqtt.client as mqtt
from google.cloud import pubsub_v1

PROJECT = os.environ["GCP_PROJECT"]
PUBSUB_TOPIC = os.environ.get("PUBSUB_TOPIC", "device-telemetry")
MQTT_FILTER = os.environ.get("MQTT_FILTER", "fleet/+/+/telemetry")

publisher = pubsub_v1.PublisherClient()
topic_path = publisher.topic_path(PROJECT, PUBSUB_TOPIC)


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


def on_message(client, userdata, msg):
    device_id = msg.topic.split("/")[2]
    future = publisher.publish(
        topic_path,
        msg.payload,
        mqtt_topic=msg.topic,
        device_id=device_id,
    )
    future.add_done_callback(
        lambda f: f.exception() and print("Pub/Sub publish failed:", f.exception())
    )


client = mqtt.Client(
    mqtt.CallbackAPIVersion.VERSION2,
    client_id=os.environ["MQTT_CLIENT_ID"],
    protocol=mqtt.MQTTv5,
)
client.username_pw_set(os.environ["MQTT_USERNAME"], os.environ["MQTT_PASSWORD"])
client.tls_set(cert_reqs=ssl.CERT_REQUIRED)
client.on_connect = on_connect
client.on_message = on_message
client.reconnect_delay_set(min_delay=1, max_delay=60)
client.connect("broker.connectmq.com", 8883, keepalive=60)
client.loop_forever()

MQTT_USERNAME, MQTT_PASSWORD ve MQTT_CLIENT_ID değişkenlerini portaldaki değerlere (YOUR_USERNAME, YOUR_PASSWORD, YOUR_CLIENT_ID) ayarlayın; tercihen bunları Secret Manager'dan alın. device_id gibi attribute'lar, tıpkı IoT Core'un cihaz attribute'ları eklemesi gibi, alt akıştaki abonelerin ve Dataflow işlerinin payload'ı ayrıştırmadan filtreleme yapmasını sağlar. Resmi Pub/Sub istemci kütüphanesi dokümantasyonu yüksek hacimler için toplu gönderim (batching) ve akış kontrolünü ele alıyor. Ölçeklemek için $share/forwarders/fleet/+/+/telemetry gibi bir MQTT 5 shared subscription ile birden fazla instance çalıştırın; bu özellik Serverless Paid ve üzerinde mevcuttur.

4. Yapılandırma ve Komutları Değiştirin

IoT Core'un config mesajları doğal olarak retained MQTT mesajlarına karşılık gelir: her cihazın yapılandırmasını kendi config topic'ine retained olarak yayınlayın; cihaz bunu her bağlandığında alır. Komutlar ise QoS 1 bir komut topic'ine karşılık gelir. MQTT broker kesintisi atlatma rehberimizde anlatıldığı gibi komutları benzersiz bir ID ve bir son geçerlilik süresiyle idempotent hale getirin.

5. Dalgalar Halinde Yayına Alın

Önce bir pilot grubu taşıyın, bağlantı durumunu $SYS/broker/connection/{clientId}/state üzerinden ve portalın topic gezgininde izleyin, ardından geri kalanını bölge veya ürün hattı bazında taşıyın. Bazı cihazlar hızlıca güncellenemiyorsa, yerel bir ağ geçidi eski topic'lerini çevirip yeni hiyerarşiye yeniden yayınlayabilir.

Geçiş Öncesi Kontrol Listesi

  1. Cihazların, firmware sürümlerinin ve kullanılan IoT Core özelliklerinin envanteri.
  2. Yeni topic hiyerarşisi tasarlandı ve belgelendi.
  3. Broker planı zirve bağlantı, QoS ve mesaj boyutuna göre boyutlandırıldı.
  4. Kimlik bilgileri cihaz başına oluşturuldu ve güvenli şekilde saklandı.
  5. Firmware yeni host, güven deposu, kimlik bilgileri ve topic'ler için güncellendi.
  6. İletim servisi çalışıyor ve Pub/Sub'da doğrulandı.
  7. Config ve komut akışları uçtan uca test edildi.
  8. Pilot grup ve geri dönüş adımlarını içeren yayına alma planı hazır.

Filonuzun bir kısmı zaten yerel bir broker üzerinde çalışıyorsa, Mosquitto'dan bulut MQTT'ye geçiş rehberi bridge kurulumunu ve dalgalar halinde geçişi daha ayrıntılı ele alıyor.

Filonuzu ConnectMQ'ya Taşıyın

app.connectmq.com adresinde kredi kartı gerekmeden Serverless planda ücretsiz bir broker oluşturun ve filoyu taşımadan önce firmware'inizi ve iletim servisinizi doğrulayın. ConnectMQ; standart MQTT 3.1.1 ve 5.0, TLS, WebSocket ve canlı topic gezgini içeren bir portal sunan tam yönetilen bir MQTT servisidir. Dağıtım seçenekleri için bulut MQTT broker rehberini okuyun veya ilk test için ücretsiz herkese açık MQTT broker'ı deneyin.

Sık Sorulan Sorular

Google Cloud IoT Core ne zaman kapandı?

Google, 2022'de sonlandırma kararını duyurduktan sonra Cloud IoT Core'u 16 Ağustos 2023'te kullanımdan kaldırdı. Cihazlar artık servisin endpoint'lerine bağlanamıyor.

Başka bir broker'a geçtikten sonra Pub/Sub ve BigQuery'yi kullanmaya devam edebilir miyim?

Evet. Bu servisler etkilenmedi. Küçük bir abone servisi MQTT mesajlarını broker'dan Pub/Sub'a iletir ve mevcut veri hatlarınız oradan devam eder.

Yeni bir MQTT broker'da JWT kimlik doğrulamasına ihtiyacım var mı?

Şart değil. ConnectMQ dahil çoğu yönetilen broker, TLS üzerinden cihaz başına kullanıcı adı ve parola kullanır; bu da JWT yenileme mantığını firmware'den çıkarır.

IoT Core cihaz yapılandırmasının en yakın karşılığı nedir?

Retained MQTT mesajları. Her cihazın yapılandırmasını kendi config topic'ine retained olarak yayınlayın; cihaz her bağlandığında en güncel sürümü alı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

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.