MQTT (Message Queue Telemetry Transmission), İnternet’in TCP/IP protokolü üzerine inşa edilmiş bir IoT İletişim protokolüdür. MQTT protokolünün IoT iletişimleri için bir standart haline geldiği konusunda şüphe yoktur çünkü gerçekten birçok avantajı vardır.
Bu makale, size MQTT hakkında temel bir anlayış kazandıracak ve diğer internet protokolleri ile MQTT arasında bir karşılaştırma yapacaktır. Bu makaleyi okuduktan sonra, MQTT’nin IoT uygulamaları için neden İDEAL olduğunu bileceksiniz.
MQTT Nedir?
MQTT, 1990’ların sonlarında IBM tarafından icat edilmiş ve geliştirilmiştir. Orijinal amacı, petrol boru hatlarındaki sensörleri uydularla bağlamaktı.
Adından da anlaşılacağı gibi, taraflar arasında asenkron iletişimi destekleyen bir mesajlaşma protokolüdür. Asenkron mesaj protokolü, mesaj göndereni alıcıdan uzay ve zaman açısından ayırır, böylece güvenilmez bir ağ ortamında genişletilebilir.
Mesaj kuyruk telemetri iletileri olarak adlandırılmasına rağmen, mesaj kuyruğuyla hiçbir ilgisi yoktur, bunun yerine bir yayınlama ve abonelik modeli kullanır.
2014 yılının sonunda, resmi olarak OASIS açık standardı haline geldi ve bazı popüler programlama dilleri tarafından desteklendi (birçok açık kaynak uygulaması aracılığıyla).
MQTT’nin IoT geliştiricileri için neden bu kadar uygun olduğunu anlamak için, önce diğer popüler ağ protokollerinin IoT’de neden başarılı bir şekilde uygulanamadığını analiz edelim.
Neden HTTP Seçmiyoruz?
Çoğu geliştirici, HTTP Web hizmetleri ile zaten aşinadır. Peki, IoT cihazlarının web hizmetlerine neden bağlanmasına izin vermiyoruz? Cihaz, verilerini HTTP istekleri şeklinde gönderebilir ve sistemden HTTP yanıtları şeklinde güncellemeler alabilir.
Bu istek ve yanıt modeli bazı ciddi sınırlamalara sahiptir:
1. HTTP senkronizasyon protokolüdür. İstemci, sunucunun yanıt vermesini beklemek zorundadır. Web tarayıcıları bu tür gereksinimlere sahiptir ancak ölçeklenebilirlikten ödün vermektedir.
2. HTTP tek yönlüdür. İstemci, bir bağlantı başlatmak zorundadır. IoT uygulamalarında, cihazlar veya sensörler genellikle istemcidir, bu da onların ağdan pasif olarak komut alamayacakları anlamına gelir.
3. HTTP 1-1 protokolüdür. İstemci bir istek gönderir ve sunucu yanıt verir. Ağdaki tüm cihazlara mesaj göndermek yalnızca zor değil, aynı zamanda maliyetlidir ve bu, IoT uygulamalarında yaygın bir kullanım durumudur.
4. HTTP ağır bir protokoldür ve birçok başlık ve kurala sahiptir. Kısıtlı ağlar için uygun değildir.
HTTP protokolünün iki süreci

HTTP protokolünün iki süreci, İstek ve Yanıt, her birinin kendi dil formatları vardır. Bunların neler olduğunu görelim.

İstek mesaj formatı:
<method> <request-URL> <version>
<headers>
<entity-body>
Yanıt mesaj formatı:
<version> <status> <reason-phrase>
<headers>
<entity-body>
İşte iki örnek:
İstek mesajı:
GET /index.html HTTP/1.1
Accept: text/*
Host: www.myweb.com
Yanıt mesajı:
HTTP/1.1 200 OK
Content-type: text/plain
Content-length: 3
Bu nedenlerden dolayı, çoğu yüksek performanslı, ölçeklenebilir sistem, iç veri alışverişi için Web hizmetleri yerine asenkron mesaj hatları kullanmaktadır.
Diğer Protokoller
Aslında, kurumsal ara yazılım sistemlerinde en popüler mesaj protokolü AMQP (Advanced Message Queuing Protocol) olarak adlandırılmaktadır.
Ancak, yüksek performanslı ortamlarda, hesaplama gücü ve ağ gecikmesi genellikle sorun değildir.
AMQP, kurumsal uygulamalarda güvenilirlik ve birlikte çalışabilirlik sağlamaya kendini adamıştır. Büyük bir özellik setine sahiptir, ancak kaynak kısıtlı IoT uygulamaları için uygun değildir.
AMQP dışında, başka popüler mesajlaşma protokolleri de vardır.
Örneğin, XMPP (Extensible Messaging and Presence Protocol), bir eşler arası anlık mesajlaşma (IM) protokolüdür.
IM kullanım durumlarını destekleyen özelliklere yüksek derecede bağımlıdır, örneğin varlık durumu ve medya bağlantısı. MQTT ile karşılaştırıldığında, cihazlar ve ağlar üzerinde çok daha fazla kaynak gerektirir.
MQTT’nin Avantajları.
MQTT, IoT geliştiricileri için uygun dengeyi sağlamaya adanmış hafif ve esnek bir ağ protokolüdür:
- Bu hafif protokol, son derece kısıtlı cihaz donanımında ve yüksek gecikme/bant genişliği sınırlı ağlarda uygulanabilir.
- Esnekliği, IoT cihazları ve hizmetlerinin çeşitli uygulama senaryolarını desteklemesini sağlar.
MQTT neden bu kadar hafif ve esnek?
MQTT protokolünün ana özelliklerinden biri yayınlama ve abonelik modelidir. Tüm mesajlaşma protokollerinde olduğu gibi, verinin yayıncısını tüketiciden ayırır.
Aşağıdaki ana özelliklere sahiptir:
1. Uygulamaları arasında birden fazla mesaj yayınlama ve ayrıştırma sağlamak için yayınla/abonelik mesaj modelini kullanır;
2. Mesaj iletimi yük içeriğini bilmek zorunda değildir;
3. Ağ bağlantısı sağlamak için TCP/IP kullanır;
4. Haber yayınlama için üç tür hizmet kalitesi vardır:
- QoS 0: “En fazla bir kez”, mesaj yayınlama tamamen altındaki TCP/IP ağına bağlıdır. Dağıtılmış mesaj kaybolabilir veya çoğaltılabilir. Örneğin, bu seviye çevresel sensör verileri için kullanılabilir, tek bir veri kaybı sorun değildir çünkü yakında ikinci bir iletim olacaktır.
- QoS 1: “En az bir kez” mesajın ulaşmasını sağlamak için, ancak mesaj tekrarlanabilir.
- QoS 2: “Sadece bir kez” mesajın yalnızca bir kez ulaşmasını sağlamak için. Örneğin, bu seviye bir faturalama sisteminde kullanılabilir, burada tekrarlanan veya kaybolan mesajlar yanlış faturalandırmaya yol açabilir.
5. Küçük iletim, yüklenme çok küçüktür (sabit uzunlukta başlık 2 bayttır), protokol değişimi ağ trafiğini azaltmak için en aza indirilmiştir;
6. Last Will and Testament özelliklerini kullanarak, ilgili tarafları istemcinin anormal kesilme mekanizması hakkında bilgilendirir;
MQTT protokolünde, bir MQTT veri paketi üç bölümden oluşur:

- bir sabit başlık (Fixed header)
- bir değişken başlık (Variable header)
- bir mesaj gövdesi (payload).
MQTT’nin iletim formatı çok küçüktür, en küçük veri paketi yalnızca 2 bit olup, uygulama mesaj başlığı yoktur.
Yayınlama/Abonelik Modeli hakkında daha fazla açıklama
MQTT protokolü, ağda iki tür varlık tanımlar: bir mesaj aracısı ve bazı istemciler. Aracı, istemciden gelen tüm mesajları alan ve ardından bu mesajları ilgili hedef istemciye yönlendiren bir sunucudur.

İstemci, mesaj göndermek ve almak için aracı ile etkileşimde bulunabilen herhangi bir şeydir. İstemci, yerinde bir IoT sensörü veya bir veri merkezinde IoT verilerini işleyen bir uygulama olabilir.
- İstemci aracıya bağlanır. Aracıdaki herhangi bir mesaj “konusuna” abone olabilir. Bu bağlantı, basit bir TCP/IP bağlantısı veya hassas mesajlar göndermek için kullanılan şifreli bir TLS bağlantısı olabilir.
- İstemci, mesajı ve konuyu aracıya göndererek belirli bir konuda mesaj yayınlar.
- Aracı daha sonra mesajı konuya abone olan tüm istemcilere iletir.
MQTT mesajları konuya göre düzenlendiği için, uygulama geliştiricileri belirli istemcilerin yalnızca belirli mesajlarla etkileşimde bulunmasını sağlama esnekliğine sahiptir.
Örneğin:
Sensör, “sensor_data” konusu içinde okumaları yayınlayacak ve “config_change” konusuna abone olacaktır. Sensör verilerini arka uç veritabanında depolayan veri işleme uygulamaları “sensor_data” konusuna abone olur.
Yönetim konsolu uygulaması, sistem yöneticisinden sensör yapılandırmasını ayarlamak için komutlar alabilir, örneğin hassasiyet ve örnekleme frekansı gibi, ve bu değişiklikleri “config_change” konusuna iletebilir.
Özet

Yukarıda MQTT ve HTTP arasındaki karşılaştırma tablosu bulunmaktadır, bu makaleyi okuduktan sonra, MQTT hakkında temel bir anlayışa sahip olacağınızı ve neden IoT uygulamaları için ideal olduğunu bileceğinizi düşünüyoruz.
Gelecekte, ODYSSEY – X86J4105, ODYSSEY – STM32MP157C, Raspberry Pi ve Grove Sensörleri gibi geçit ürünümüzü kullanarak MQTT tabanlı IoT uygulamaları nasıl oluşturacağınızı öğretmek için bazı eğitimler sunacağız. Eclipse Mosquitto’yu kullanarak MQTT uygulamalarını nasıl geliştireceğinizi göstereceğiz.
Lütfen takipte kalın.
Ayrıca, tartışmak istediğiniz bir şey varsa, bize yorum bırakmaktan çekinmeyin.
