TEKNİK YAZI

MQTT: IIoT Uygulamalarında Verimli ve Esnek Bir Haberleşme Yapısı

MQTT, neredeyse 30 yıldır kullanılan bir protokol olmasına rağmen protokolün tasarımı, otomasyon uygulamalarında en son trend olan IIoT (Endüstriyel Nesnelerin İnterneti) için oldukça idealdir. Bu durum özellikle de cihazların düzenli aralıklarla sorgulandığı “pasif bildirim”in aksine verinin yalnızca gerektiğinde sağlandığı “aktif bildirim”i temel alan uygulamalar için geçerlidir. MQTT’nin aracı/istemci (broker/client) tasarımı, sistemdeki tüm cihazların aynı anda çevrimiçi olma gerekliliğini  ortadan kaldırır. İstemciler (“cihazlar” veya “nesneler”) “aracı” ile doğrudan iletişim kurar, aracılar ise istemciler arasında veri  iletimini gerçekleştirir. Bu teknik yazıda IIoT uygulamaları için ideal dediğimiz MQTT protokolünü mercek altına alırken, IIoT’nin hangi ihtiyaçlarına nasıl yanıt verebildiğini de inceliyoruz.

IIoT ve MQTT

İnsanların yaşam kalitesinin iyileştirilmesi, her zaman yeni ve daha iyi teknolojik gelişmelerin ana motivasyonlarından biri olmuştur. İnternete giderek daha fazla cihazın bağlanmasına yönelik talepler de IoT uygulamaları için daha verimli ürünler geliştirmeyi günümüzün en sıcak konularından biri haline getirmiştir. IIoT kullanıcıları için en büyük zorluklardan biri ise, genellikle “uç cihazlar” olarak adlandırılan “nesnelerin” stabil bir kablolu veya kablosuz bağlantıya sahip olmayabilmesidir. Uç cihazlar merkezi bir sisteme (çoğu zaman sürekli olmadan) veri sağladığından, bu tür cihazlardan verinin nasıl toplanacağı büyük bir endişe kaynağıdır. IIoT uygulamalarının bu tür bağlantı gereksinimlerini karşılamak için MQTT, AMQP ve CoAP da dahil birçok aday protokol bulunmaktadır. Öte yandan MQTT, çoğu IIoT uygulaması için en iyi seçenek haline gelmiştir. Aşağıdaki grafikte de görülebileceği gibi IoT geliştiricilerinin yarısından çoğu MQTT’yi haberleşme protokolü olarak tercih etmektedir. Bu da IoT uygulamaları için en ideal protokolün MQTT olduğu kanısını desteklemektedir.

 

MQTT Nedir?

MQTT mesajlaşma protokolü ilk olarak 1999 yılında IBM ve Cirrus Link tarafından geliştirilmiş, 2013 yılında sürüm 3.1’den başlayarak bir ISO standardı olarak kabul edilmiştir. MQTT protokolü, veri iletiminde yayıncı-abone prensibine dayanan bir  haberleşme yapısı kullanır. Şekil 2’de gösterildiği gibi bir MQTT sistemi bir aracı (broker) ve birden çok istemciden (client) oluşur, istemciler ise yayıncı (publisher) veya abone (subscriber) olabilir. Yayıncılar aracıya MQTT paketleri halinde “topic” ve “payload”  bilgilerini içeren veriler gönderir. Aracı daha sonra verileri abonelere, ilgilendikleri konulara göre dağıtır.

 MQTT protokolü veri iletimi için standart bir format belirlememiştir, ancak uygulamalarda genellikle JSON protokolü veya düz metin kullanılır. Diğer protokollerle karşılaştırıldığında MQTT’nin sunduğu bazı avantajlar, bu protokolü IoT uygulamaları için doğru tercih haline getirir. Gelin bu avantajlara bir göz atalım.
 

Şekil 2: Yayıncı-abone şeması

Yayıncı-Abone Haberleşme Modeli

Sorgu-yanıt temelli öteki protokollere kıyasla MQTT’nin “yayıncı-abone” (publish-subscribe) haberleşme modeli, IoT kullanıcılarının sık rastlanan bazı bağlantı sorunlarını çözebilmesine olanak tanır. Örneğin sorgu-yanıt temelli haberleşme yapılarında verinin iletildiği ve alındığından emin olmak için hem istemci hem de yayıncının aynı anda çevrimiçi olması gerekir. Ancak özellikle de IIoT uygulamalarında istenen veriyi alabilmesi için uç cihazların ağ ile yeterince güçlü bir bağlantıyı devam ettirebilmesi neredeyse imkansız olabilir. Dolayısıyla sorgu-yanıt temelli haberleşme bu uygulamalar için doğru bir seçim olmayacaktır. 

MQTT’nin yayıncı-abone haberleşme modeli, cihazların her zaman ağa aynı anda bağlı olmayabileceği durumlar için idealdir. MQTT aracısı (broker) bu açıdan kritik rol oynar: aracı, bir bilgi merkezi görevindedir; “yayıncı” olarak belirlenen istemcilerden kendisine gönderilen verileri kabul edip “abone” olarak belirlenen istemcilere bu verileri gönderir. Aracı verileri bir aboneye gönderirken, önce hedef istemcinin çevrimiçi olup olmadığını kontrol eder. Değilse, istemci çevrimiçi olana kadar mesaj bekletilir ve daha sonra gönderilir. Bu stratejinin avantajı, yalnızca aracının her zaman çevrimiçi olması gerekmesidir. Yayıncılar ve aboneler ise yalnızca ağa bağlantı sağladıklarında veya veri gönderip almaları gerektiğinde çevrimiçi olmaları yeterlidir.

​Olaya Dayalı

Yayıncı-abone” modelinde, MQTT istemcileri aracıya veriyi yalnızca belirli koşullar karşılandığında  yayınlar (ör. belirli bir cihazın sıcaklığının çok yükseldiğini bildiren bir uyarı sinyali). Bir başka deyişle, istemciler pasif olarak başka bir cihazın veri istemesini beklemek yerine verileri aktif olarak güncellemeye devam eder. IoT uygulamalarında iletişim ücretleri, iletilen veri paketi miktarına bağlıdır. Sorgu-yanıt modeline kıyasla MQTT, veri aktarımının tamamlanması için yalnızca tek yönlü iletim yeterli olduğundan, önemli ölçüde tasarruf sağlar.

​Many-to-Many (Çokludan Çokluya) Haberleşme

MQTT’nin temel avantajlarından biri, yayıncı-abone haberleşme modelinin çokludan çokluya haberleşme sağlamada kolayca kullanılabilmesidir. IIoT gündeminin en sıcak konularından biri olan Machine-to-Machine (M2M, makineler arası) konsepti de çokludan çokluya haberleşmenin uygulamadaki formlarından biridir. Fabrikalardaki M2M uygulamalarında her istasyondaki makineler kendi proses durumlarını diğer istasyonlardaki makinelerle paylaşır. Bilginin bu şekilde paylaşılması, operatörlerin el ile giriş yapması gerekmeden üretim optimizasyonunun otomatize edilmesine yardımcı olur. MQTT de M2M haberleşmenin sağlanmasında kullanıldığı için, makinelerin doğrudan birbirlerine bağlanmak yerine yalnızca aracıyla bağlantı kurması yeterlidir, bu da cihazlar arası sinyal alışverişinde önemli derecede zaman kazandırır. Tüm makineler arası iletişimin sağlanması tek bir aracının görevi olduğu için, veri aktarımı daha güvenilir hale gelir.

QoS Tasarım

MQTT protokolü, verileri önceliklendirmede üç QoS seviyesi kullanır:

  • QoS 0: en fazla bir kez
    Bu durumda, istemci aracıya bir mesajı yalnızca bir kez  yayınlar. Aracı, iletinin alındığını onaylamaz veya istemciye abonelerle iletişimiyle ilgili herhangi bir bildirimde bulunmaz. Yayıncının sahip olduğu tek bilgi, mesajını göndermiş olduğudur. Ancak yayıncı, aracının veya herhangi bir abonenin iletiyi alıp almadığını bilmez. QoS 0 açık ara en hızlı gerçekleşen QoS seviyesi olmasına rağmen, aynı zamanda da en az güvenilir olanıdır.
Şekil 3: QoS 0– En fazla 1 kez
  • QoS 1: En az bir kez
    ​Burada istemci aracıya bir ileti yayınladığında, aracıdan bu iletinin abone tarafından alınıp alınmadığını bildirmesini bekler. Yayıncı önceden ayarlanmış bir sürede aracıdan onay almazsa, onay alınana kadar iletiyi tekrar tekrar yayınlayacaktır. QoS 0 ile karşılaştırıldığında, QoS 1 daha güvenlidir, ancak zaman içinde daha yavaş kalması beklenebilir. 
Şekil 4: QoS 1 – En az bir kez
  • QoS 2: Tam olarak bir kez
    ​Bu durumda istemci ve aracı dört ileti alışverişinde bulunur. İstemci önce verileri aracıya gönderir, ardından istemci ve aracı verilerin yalnızca bir kez iletildiğini güvenceye almak için üç ileti alışverişi yapar: PUBREC, PUBREL ve PUBCOMP. QoS 2, MQTT QoS seviyelerinin içinde en yavaş da olsa en güvenilir seviyedir.

Şekil 5: QoS 2 – Tam olarak bir kez
 

Güvenlik

Güvenlik, IIoT uygulamalarında kullanıcıların en temel kaygılarının başında gelir. Gittikçe artan sayıda cihazın internete bağlanması, verinin saldırıya uğrama ihtimalinin nasıl en aza indirileceğini bilmeyi en büyük öncelik haline getirmiştir. Aşağıdaki grafik, güvenliğin IoT uygulamaları için en büyük endişe kaynağı olduğunu açıkça göstermektedir. MQTT söz konusu olduğunda ise aracı, yetkisiz istemcilerin konulara abone olmak üzere aracıya bağlanmasının önüne geçmek adına, hesap isimleri ve parolaları saklar. MQTT ayrıca verilerin aktarım sırasında saldırıya uğrama olasılığını en aza indirmek için TLS şifrelemesini de destekler.

 

MQTT Uygulama Mimarisi

Bu yazının başında da belirtildiği gibi, geleneksel OT uygulamaları, popüler MQTT protokolünü kullanan IIoT uygulamaları şeklinde yeniden tasarlanmaktadır. Bu noktada iki büyük sistem mimarisi kullanılmaktadır:

Doğrudan Buluta Bağlanma

Çoğu genel bulut hizmeti (AWS, Azure, Google Cloud, Alibaba Cloud vb.) uç cihazların doğrudan buluta bağlanmasında MQTT protokolünü destekler. Rekabetçi kalmak ve sektörün geleceğini şekillendirmeye yardımcı olmak açısından bulut hizmetleri en azından şu faydaları sağlamalıdır:

  • Zaman tasarrufu
    Bulut hizmeti donanımın (cloud server, CPU, bellek vb.)  işlerliğini devam ettirebildiğinden, kullanıcılar uzmanlık isteyen bu bakım görevlerini bulut hizmetinin IT uzmanlarına bırakabilir hale gelir. Böylece kullanıcılar kendi çözümlerini geliştirmeye daha fazla vakit ayırabilirler.
  • Kesintisiz hizmet
    Müşteriler artık bulut servis sağlayıcılarından %100’e yakın stabilite bekler hale gelmiştir, bu da ağ kararlılığı ve güvenilirliğini birincil derecede önemli yapmıştır. Her bulut hizmet sağlayıcısı, Hizmet Düzeyi Sözleşmesinde (SLA), sağlamayı hedefledikleri kesintisiz hizmet düzeyini açıkça belirtir. Örneğin; Amazon Compute, bu sözleşmesinde aylık %99,99 kesintisiz çalışma süresi taahhüdünde bulunur, bu da aylık hizmet kesintisinin 4,32 dakikadan az olmasının beklenebileceğini gösterir. Bu hizmet düzeyini “kesintisiz hizmet” şeklinde düşünmek yanlış olmayacaktır.
  • Zengin veri madenciliği araçları seti
    Bulut hizmetleri, platformların bir parçası olarak veri görselleştirme, veri algoritmaları, sanal makine ve makine öğrenimi gibi zengin bir araç seti sağlar. Bu tür araçlara erişim sayesinde kullanıcılar farklı çeşitlerde birçok uygulamayı daha kolay uygulayabilir. Örneğin, sistem personeli veri madenciliği için bir bulut hizmeti kullanabilir, bu hizmetle sunucu bakımının zorluklarını azaltabilir ve operasyonel verimliliği arttırabilir. 
Şekil 7: Doğrudan buluta bağlanma şeması

Yerel Ağ Geçidine Bağlanma

Uç cihazları doğrudan buluta bağlamanın faydaları vardır, ancak IIoT uygulamalarında bulut hizmetlerini kullanmakla ilgili çeşitli endişelerin olduğunu unutmamak gerekir.

  • Endişelerin en başında maliyet gelir. Bulut hizmetleri, kullanıcıları iletilen veri paketi sayısına göre ücretlendirdiğinden, verileri uç cihazlardan doğrudan bir bulut hizmetine aktarmak maliyet etkin olmayacaktır. Uç cihazlar buluta 3G/4G üzerinden bağlansa bile 3G/4G hizmeti için de ödeme yapılması gerekir.
  • Diğer bir husus ise veri güvenliğidir. Bulut hizmetleri, kullanıcı verilerini depolamak için iyi korunan ortamlar sunuyor olsa da bazı kullanıcılar yine de hassas verilerini buluta yüklemekten çekinebilir.

Çoğu IIoT uygulamasında, uç cihazlardan verileri toplamak ve/veya sahada M2M haberleşmeyi etkinleştirmek için bir ağ geçidi kurmak, bu konudaki endişeleri önlemenin bir yoludur. Bu ağ geçidi genellikle gömülü bir bilgisayardır, hem MQTT aracısı hem de MQTT istemcisi rolleri için yapılandırılabilir. Bir MQTT aracısı olarak ağ geçidi sahadaki M2M veri aktarımını sağlayabilir. Bir MQTT istemcisi olarak ise ağ geçidi, sahadan gelen cihaz verisini toplayabilir ve kullanılabilir verileri bir SCADA sistemine, HMI veya bulut hizmetine gönderebilir. Ağ geçidi çözümü, sahada M2M haberleşmeyi bulut üzerinden yapmak yerine MQTT ile sağlayarak maliyetleri daha da aza indirir.

Şekil 8: Doğrudan yerel ağ geçidine bağlanma şeması

Geleneksel Uygulamalardan IIoT’ye Geçişin Zorlukları

Geleneksel OT uygulamasını IIoT uygulamasına dönüştürürken aşağıdaki zorlukların bir kısmıyla veya tamamıyla karşılaşabilirsiniz:

Kullanımdaki Eski Tip Cihazlar MQTT Desteklemeyebilir

Fabrikalarda saha personeli veri erişimi ve çevresel denetim için genellikle bir uzak I/O kurulumu kullanır. Buna ek olarak elektrik sayaçlarından veri toplamak ve enerji tüketimini denetlemek için protokol ağ geçitleri (protocol gateway) kullanılır. IIoT yükselişine devam ederken, eğer MQTT protokolü verileri buluta aktarmak için kullanılacaksa, saha personelinin önce MQTT’yi destekleyen yeni uzak I/O donanımları ve ağ geçitlerini araştırıp satın alması gerekmektedir. Dünyanın dört bir yanında sahalarda hala kullanılmakta olan eski tip cihaz sayısının çokluğunu düşünürsek, bir fabrikayı IIoT tabanlı bir yapıya dönüştürmek büyük bir yatırım gerektirebilir.

Söylemesi Kolay Yapması Zor: IT ile Geleneksel Otomasyon Uygulamalarını Birleştirmek

Bir IIoT uygulamasının en temel yönlerinden birisi, OT verilerinin toplanarak buluta iletilmesidir. Daha sonra bu veriler işlenebilir ve/veya analiz edilebilir. Bu noktadaki zorluk ise IT ve OT endüstrilerinin farklı iletim protokollerini kullanmasından kaynaklanır. OT alanında kullanılan en yaygın protokollerden biri olan Modbus, sınırlı bant genişliğine sahip ağlar üzerinden aktarım yapabilmek için küçük başlık ve yüklere sahip veri paketleri kullanır. Öte yandan, IT personeli veri toplamak için MQTT, RESTful API ve SNMP gibi IT protokollerini kullanır, dolayısıyla birçoğu Modbus’a aşina değildir.

Temel Endişe Kaynağı: Güvenlik

Ağ güvenliğini sağlamak, IIoT uygulamaları için temel bir endişe kaynağıdır. Geçmiş deneyimlere göre, siber saldırılar fabrika dışından kaynaklanır, bu nedenle siber güvenliği iyileştirmenin ilk adımı güvenli bir yönlendirici kurmak, güvenlik duvarını siber korsanları dışarıda tutacak şekilde yapılandırmak ve genel itibariyle ağ güvenliğini dış saldırıları önleyecek şekilde arttırmaktır. Fabrika intranetindeki uç cihazlar, çoğu zaman yalnızca sınırlı güvenlik işlevlerini, o da varsa destekler, kullandıkları protokoller ise şifrelenmemiştir. Örneğin Modbus, uç cihazlardan ve uç cihazlara veri iletmede yaygın olarak kullanılır. Son yıllarda, bazı yüksek profilli siber saldırılar endüstriyel ağ güvenliği sorunlarına dikkat çekmiştir. Örneğin Ağustos 2018’de TSMC, WannaCry varyantından bir saldırının kurbanı olmuş, tahmini 200 milyon dolarlık bir gelir kaybıyla sonuçlanmıştır. Saldırı, TSMC intranetindeki tüm cihazlara en son güvenlik yamasının yüklenmemesinin bir sonucuydu, bu da saldırı aslında kolayca önlenebilirdi anlamına geliyor. Bu olay bize ağ güvenliğinin uç cihaz düzeyinde de bir şekilde uygulanmasının önemini gösteriyor.

Moxa Çözümleri

Moxa’nın yeni ioThinx 4510 serisi modüler uzak I/O cihazları, IIoT uygulamalarına mükemmel uyum sağlayan temel özelliklere sahiptir.

MQTT Client Desteği
ioThinx 4510 serisi, cihaza bağlı aygıtların bulut hizmetlerine kolayca bağlanmasını sağlayan MQTT clientlarını destekler. ioThinx 4510, giriş düzeyinde bir uzak I/O ürünü olarak tanıtılmasına rağmen, MQTT’ye desteği onu güçlü bir cihaz haline getirmiştir. Aslında, saha mühendisleri kendi MQTT konularını tanımlamak için ioThinx 4510’un kullanıcı arayüzünü kullanabilir ve ardından bu konulara dayanarak hangi clientların hangi verilere abone olduğunu belirleyebilir. Kanal verilerine ek olarak ioThinx 4510 serisi, abonelere kanal modu, maksimum ya da minimum değerler gibi veri özelliklerini de sunabilir. Böylece ağa bağlı IT cihazları da MQTT aracılığıyla ioThinx 4510 cihazına ait son durum verilerini alabilir. MQTT yükleri, günümüzün IT endüstrisinde yaygın olarak kullanılan JSON biçimini kullanır. Aboneler bir MQTT paketi aldıklarında, yükte aradıkları verileri bulmak için belirli bir “değer” ile verileri kolayca arayabilirler.


Yerleşik Modbus Gateway
ioThinx 4510 Serisi, bir Modbus ağ geçidini uygulamak için kullanılabilen yerleşik 3’ü 1 arada seri arayüze sahiptir. ioThinx 4510’u bir seri Modbus cihazından veri toplayacak şekilde yapılandırmak yalnızca birkaç tıklama ile yapılabilir. I/O verilerinde olduğu gibi, seri Modbus verilerine MQTT tarafından erişilir. Bu fonksiyon sayesinde, hem I/O hem de seri veriler tek bir ioThinx 4510 serisi cihaz kullanılarak toplanabilir. Bu da sistemin karmaşıklığını ve maliyetini büyük ölçüde azaltır. Modbus verilerine ek olarak ioThinx 4510 serisi, Modbus / TCP, RESTful API ve SNMP gibi diğer protokollere erişebilir. Kısacası, ioThinx 4510 serisi ile seri verileri buluta göndermek daha kolay ve anlaşılır hale gelmektedir.

Güvenlik Geliştirmeleri
ioThinx 4510 serisi, kullanıcıların verilerini korumak için MQTT iletimleri yoluyla gönderilen verileri TLS v1.2 ile şifrelemektedir. Yaygın olarak kullanılan ve tanınan veri şifreleme teknolojisi, bir ağ üzerinden iletilen verileri üçüncü taraf bilgisayar korsanlarından korur. ioThinx 4510 ayrıca, verilerin yetkisiz aracılara yayınlanmasını önlemek için aracının hesap adlarını ve parolalarını destekler. Desteklenen tüm IT protokollerinin veri şifrelemesi ile iletilebilmesi için HTTPs ve SNMPv3 aracılığıyla RESTful API’yi destekler. Verileri düz metin olarak ileten Modbus / TCP protokolü için ioThinx 4510 serisi, kendisine erişme yetkisi verilen IP adresleri listesine dayanan ve böylece işletim güvenliğini arttıran bir erişim kontrol işlevine sahiptir.

Bu gelişmiş özellikler ve çeşitli I/O modelleri desteği ile ioThinx 4510 serisi sadece IT mühendislerinin sahadaki verileri toplamasına yardımcı olmakla kalmaz, aynı zamanda OT mühendislerinin verileri bulut hizmetlerine güvenli bir şekilde teslim etmelerine yardımcı olur. Aslında, ioThinx 4510 serisi IT ve OT dünyaları arasındaki boşluğu da ortadan kaldırır.

Kaynak: Shih, Chan. (2019) “MQTT – Enabling Edge-Device Connectivity in the IIoT Era”, Moxa Inc.