ThingsBoard Mimarisine Genel Bakış

IoT Platform Mimarisi

IoT Platform Mimarisi aşağıdaki şekilde tasarlanmıştır:

Ölçeklenebilir : Yatay ölçeklenebilir platform, önde gelen teknolojileri kullanarak sisteminizi inşa edin.

Hataya Karşı Toleranslı : Tek hata noktası yoktur (SPOF), cluster’daki her düğüm eştir.

Sağlam ve Verimli : Tek sunucu düğümü kullanıldığında, kullanım durumuna bağlı olarak binlerce cihazı işleyebilir. Cluster modu kullanıldığında ise milyonlarca cihazı işleyebilir.

Özelleştirilebilir : Özelleştirilebilir widget’lar ve kural motoru düğümleri ile yeni işlevler eklemek kolaydır.

Dayanıklı : Asla verilerinizi kaybetmeyin.

IoT Platform Mimarisi

Şirket içi veya bulut kurulumu

IoT Platform Mimarisi

ThingsBoard hem şirket içi hem de bulut kurulumlarını destekler. 2000’den fazla ThingsBoard sunucusu tüm dünyada ThingsBoard AWS, Azure, GCE ve özel veri merkezlerinde çalışır durumdadır.

IoT Platform Mimarisi

Bağımsız ve Cluster modu karşılaştırması

IoT Platform Mimarisi

Platform yatay olarak ölçeklenebilir olacak şekilde tasarlanmıştır ve yeni ThingsBoard sunucularının (düğümlerinin) otomatik keşfini destekler. Cluster içindeki tüm ThingsBoard düğümleri aynıdır ve yükü paylaşır. Tüm düğümler aynı olduğundan “master” veya “coordinator” bulunmaz ve tek bir hata noktası (SPOF) yoktur. Seçtiğiniz yük dengeleyici, aygıtlardan, uygulamalardan ve kullanıcılardan tüm ThingsBoard düğümlerine istek iletebilir.

IoT Platform Mimarisi

IoT Platform Mimarisi | Monolitik ve Microservice mimarisi

IoT Platform Mimarisi

ThingsBoard her zaman dağıtılmış bir uygulama olarak çalışmak üzere tasarlandı, ancak başlangıç modeli için monolit bir uygulama olarak kullanılabileceği de düşünüldü. Bu yapıda, uygulamayı her sunucu düğümünde çalıştıran kendine ait bir java prosesi vardır. Bu prosesler, gRPC ile iletişim kurar ve service keşfi Zookeeper kullanılarak yapılır. Bu model birçok sistem için verimli çalışır ve kurulumu yapmak için minimum destek çabası, bilgi ve donanım kaynağı gerektirir.

IoT Platform Mimarisi


IoT Platform Mimarisi

IoT Platform Mimarisi

IoT Platform Mimarisi | ThingsBoard Monolitik mimarisi

IoT Platform Mimarisi

Bu bölümde, monolitik mimari açıklanmaktadır ve diyagram, bileşenler arasındaki veri akışının açıklaması ve yapılan bazı mimari seçimleri içermektedir.

Lütfen platformun microservice dağıtım modunu desteklediğini de unutmayın. Microservice modu, yüksek erişilebilirlik(High-Availability)  ve yatay ölçeklenebilirlik(Horizontally Scalable) senaryoları için tercih edilse de, birçok ThingsBoard müşterisi tek ThingsBoard düğümü ile başlayıp gelecekte ölçeklendirmeyi yararlı bulmaktadır. Ayrıca monolitik modu geliştirme ve prototip oluşturma için kullanmanızı da öneririz.

Monolitik modda, tüm ThingsBoard bileşenleri tek bir Java Sanal Makinesi’nde (JVM) başlatılır ve aynı işletim sistemi kaynaklarını paylaşır. ThingsBoard Java ile yazıldığından, monolitik mimarinin bariz avantajı ThingsBoard’u çalıştırmak için gereken belleğin en aza indirilmesidir. Sınırlı bir ortamda 256 veya 512 MB RAM ile ThingsBoard işlemini başlatabilir ve çalıştırabilirsiniz. Bariz dezavantajı, bir bileşeni MQTT aktarımı gibi mesajlarla aşırı yüklerseniz, diğer bileşenleri de etkileyebilmesidir. Örneğin, ThingsBoard işleminiz için işletim sistemi sınırı 4096 dosya betimleyiciyse, paralel olarak cihaz ve websocket kullanıcı oturumlarından 4096’dan fazla MQTT oturumu açamazsınız.

IoT Platform Mimarisi

Monolitik Mimari Diyagramı

IoT Platform Mimarisi

IoT Platform Mimarisi

Aktarım bileşenleri (Transport Components)

IoT Platform Mimarisi

ThingsBoard, cihaz uygulamalarınız / ürün yazılımınız için kullanılabilen MQTT, HTTP ve CoAP tabanlı API’ler sağlar. Protokol API’lerinin her biri ayrı bir sunucu bileşeni tarafından sağlanır ve ThingsBoard “Aktarım Katmanı” nın bir parçasıdır.

Aktarım bileşenlerinin her biri verileri kural motoruna iletir ve ayrıca aygıt kimlik bilgilerini vb. doğrulamak amacıyla veritabanına istekleri göndermek için çekirdek servisleri(Core Services) kullanabilir.

ThingsBoard, aktarım ve çekirdek servisler arasında çok basit bir iletişim protokolü kullandığından, özelleştirilebilir aktarım protokolü desteğini kullanmak oldukça kolaydır, örneğin: Düz TCP üzerinden CSV veya UDP, vb. üzerinden binary payload gibi.

IoT Platform Mimarisi

Kural motoru bileşeni ( Rule Engine Component)

IoT Platform Mimarisi

ThingsBoard kural motoru, gelen mesajları kullanıcının tanımladığı mantık ve akışa göre işlemekten sorumludur.

IoT Platform Mimarisi

Çekirdek Servisler ( Core Services)

IoT Platform Mimarisi

Çekirdek servisler aşağıdakilerden sorumludur:

  • REST API çağrıları;
  • Varlık telemetrisi ve öznitelik değişikliklerine ilişkin WebSocket abonelikleri;
  • Aygıt bağlantı durumunu izleme (etkin / etkin değil).

ThingsBoard düğümü kullanıcı, cihaz, kural zincirleri ve kural düğümü aktörlerini uygulamak için Akka aktör sistemini kullanır. Platform düğümleri, her düğümün eşit olduğu Cluster’a katılabilir. Service keşfi Zookeeper ile yapılır. ThingsBoard düğümleri, varlık kimliğine dayalı tutarlı karma algoritma kullanarak iletileri birbirleri arasında yönlendirir. Dolayısıyla, aynı varlığa ait mesajlar aynı ThingsBoard düğümünde işlenir. Platform, ThingsBoard düğümleri arasında mesaj göndermek için gRPC kullanır.

Not: ThingsBoard yazılımcıları, ThingsBoard düğümleri arasında mesaj alışverişi yapmak için gelecek sürümlerde gRPC’den Kafka’ya geçmeyi düşünüyorlar.

IoT Platform Mimarisi

Harici sistemler

IoT Platform Mimarisi

Iot Platform Mimarisi | Kural Motoru üzerinden ThingsBoard’dan harici sistemlere mesaj göndermek mümkündür. Verileri harici sisteme aktarabilir, verileri işleyebilir ve işleme sonuçlarını görselleştirme için ThingsBoard’a geri bildirebilirsiniz.


IoT Platform Mimarisi| ThingsBoard Microservice mimarisi

Bu bölüm diyagram, çeşitli hizmetler arasındaki veri akışının açıklaması ve yapılan bazı mimari seçimleri içermektedir.

Microservice Mimari diyagramı

IoT Platform Mimarisi

Aktarım Microservices (Transport Microservices)

Iot Platform Mimarisi | ThingsBoard, cihaz uygulamalarınız / ürün yazılımınız için kullanılabilen MQTT, HTTP ve CoAP tabanlı API’ler sağlar. Protokol API’lerinin her biri ayrı bir sunucu bileşeni tarafından sağlanır ve ThingsBoard “Aktarım Katmanı” nın bir parçasıdır.

Yukarıda listelenen aktarım sunucularının her biri, Kafka’yı kullanarak ana ThingsBoard Node microservice’leriyle iletişim kurar. Apache Kafka dağıtılmış, güvenilir ve ölçeklenebilir kalıcı mesaj kuyruğu ve yayın akışı (streaming) platformudur.

Kafka’ya gönderilen mesajlar, mesaj tanımlamalı protokol buffer’ları kullanılarak yayınlanır.

V2.5’ten itibaren, ThingsBoard PE alternatif kuyruk uygulamasını destekleyecek: Amazon DynamoDB

Aktarım katmanı microservice’leri tarafından kullanılan iki ana Topic vardır.

İlk Topic “tb.transport.api.requests”, aygıt kimlik bilgilerini denetlemek veya ağ geçidi adına aygıt oluşturmak için kısa ömürlü API isteklerini yürütmek için kullanılır. Bu isteklere verilen yanıtlar, her aktarım microservice’i için özel olan Topic’e gönderilir. Bu tür “geri arama”(callback) Topic’inin öneki varsayılan olarak “tb.transport.api.responses” şeklindedir.

İkinci Topic olan “tb.rule-engine”, kural motoru tarafından işlenmedikçe cihazlardan gelen tüm telemetri mesajlarını saklamak için kullanılır. Kural motoru düğüm (ler) inin kapanması durumunda mesajlar kalıcı olacak ve daha sonraki işlemler için kullanılabilir olacaktır.

ThingsBoard, aktarım ve çekirdek servisler arasında çok basit bir iletişim protokolü kullandığından, özelleştirilebilir aktarım protokolü desteğini kullanmak oldukça kolaydır, örneğin: Düz TCP üzerinden CSV veya UDP, vb. üzerinden binary payload gibi.

Web Kullanıcı Arayüzü Microservice’leri (Web UI Microservices)

ThingsBoard, statik web kullanıcı arayüzü içeriğini barındırmak için Express.js framework’ünü kullanılarak yazılan hafif bir bileşen sağlar. Bu bileşenler tamamen stateless’dır ve fazla yapılandırma gerektirmez.

JavaScript Yürütücü Microservice (JavaScript Executor Microservices)

Iot Platform Mimarisi | ThingsBoard kural motoru, kullanıcıların mesajları ayrıştırmak, filtrelemek ve dönüştürmek için özel javascript işlevleri belirlemelerine olanak tanır. Bu işlevler kullanıcı tarafından tanımlandığından, ana işlemeye etkiyi önlemek için bunları yalıtılmış bir bağlamda yürütmemiz gerekir. ThingsBoard, kullanıcı tanımlı JavaScript işlevlerini temel kural motoru bileşenlerinden ayırmak için uzaktan yürütmek için Node.js kullanılarak yazılan hafif bir bileşen sağlar.

Not: ThingsBoard monolith uygulamasında ise java gömülü JS motorunda, kaynak tüketiminin izole edilmesine izin verilmeyen kullanıcı tanımlı işlevler yürütülebilir.

JS yürütme isteklerinin belirli eşzamanlılık düzeyine ve yük dengelemesine izin verecek 20’den fazla ayrı JavaScript Yürütücüsü başlatmanızı öneririz. Her microservice, yük dengelemesini sağlamak için tek bir tüketici grubunun parçası olarak “js.eval.requests” Kafka Topic’ine abone olacaktır.

Tek JS yürütmesinde JS yürütücü microservice’e yük binmemesi için, beklemede olan maksimum JS yürütme isteği ve maksimum istek zaman aşımı tanımlamak mümkündür. Her ThingsBoard çekirdek servislerinin JS işlevleri için ayrı bir kara listesi vardır ve engellenen işlevi 3 (varsayılan olarak) kereden fazla çağırmaz.

IoT Platform Mimarisi |Thingsboard Node Microservices

Çekirdek servisler aşağıdakilerden sorumludur:

  • REST API çağrıları;
  • Varlık telemetrisi ve öznitelik değişikliklerine ilişkin WebSocket abonelikleri;
  • Aygıt bağlantı durumunu izleme (etkin / etkin değil).

ThingsBoard düğümü kullanıcı, cihaz, kural zincirleri ve kural düğümü aktörlerini uygulamak için Akka aktör sistemini kullanır. Platform düğümleri, her düğümün eşit olduğu Cluster’a katılabilir. Service keşfi Zookeeper ile yapılır. ThingsBoard düğümleri, varlık kimliğine dayalı tutarlı karma algoritma kullanarak iletileri birbirleri arasında yönlendirir. Dolayısıyla, aynı varlığa ait mesajlar aynı ThingsBoard düğümünde işlenir. Platform, ThingsBoard düğümleri arasında mesaj göndermek için gRPC kullanır.

Not: ThingsBoard yazılımcıları, ThingsBoard düğümleri arasında mesaj alışverişi yapmak için gelecek sürümlerde gRPC’den Kafka’ya geçmeyi düşünüyorlar.

IoT Platform Mimarisi| Üçüncü parti

Kafka

Apache Kafka açık kaynaklı bir yayın akışı işleme (streaming-prossessing) yazılım platformudur. ThingsBoard, Kafka’yı kural motoru tarafından işleninceye kadar HTTP / MQTT / CoAP aktarımlarından gelen telemetriyi iletmek için kullanır. ThingsBoard ayrıca Kafka’yı microservice’ler arasında bazı API çağrıları için de kullanıyor.

Redis

Redis, ThingsBoard tarafından önbellekleme(caching) için kullanılan açık kaynaklı (BSD lisanslı), bellek içi veri yapısı deposudur. ThingsBoard varlıkları, varlık görünümlerini, cihazları, cihaz kimlik bilgilerini, cihaz oturumlarını ve varlık ilişkilerini önbelleğe alır.

Zookeeper

Zookeeper, son derece güvenilir dağıtılmış koordinasyon sağlayan açık kaynaklı bir sunucudur. ThingsBoard, tek bir varlıktan (cihaz, varlık, kiracı) belirli bir ThingsBoard sunucusuna yapılan istekleri işlemek için Zookeeper’ı kullanır ve belirli bir cihazdan sadece bir sunucunun verileri tek bir noktada işlemesini garanti eder.

Not: Zookeeper Kafka tarafından da kullanılır, bu nedenle paralel olarak iki farklı koordinasyon hizmetini kullanmaya gerek yoktur.

HAProxy (veya başka bir LoadBalancer)

Yük dengeleme için HAProxy kullanmanızı öneririz.


IoT Platform Mimarisi | SQL vs NoSQL vs Karma veritabanı yaklaşımı

ThingsBard, varlıkları (cihazlar, varlıklar, müşteriler, gösterge tabloları, vb.) Ve telemetri verilerini (özellikler, zaman çizelgesi sensör okumaları, istatistikler, olaylar) depolamak için veritabanını kullanır. Platform şu anda üç veritabanı seçeneğini desteklemektedir:

SQL – Tüm varlıkları ve telemetriyi SQL veritabanında saklar. ThingsBoard yazılımcıları PostgreSQL kullanmanızı önerir ve bu, ThingsBoard’un desteklediği ana SQL veritabanıdır. HSQLDB’yi yerel geliştirmeler yapmak amacıyla kullanmak mümkündür. Test amacı dışında HSQLDB kullanılmasını önermiyoruz.

NoSQL – Tüm varlıkları ve telemetriyi NoSQL veritabanında saklar. ThingsBoard yazılımcıları Cassandra’yı kullanmanızı önerir ve şu anda ThingsBoard’un desteklediği tek NoSQL veritabanıdır. Bununla birlikte, yönetilen veritabanlarına sahip dağıtımlara büyük ilgi duyulması nedeniyle, ilerleyen güncellemelerde AWS DynamoDB’ye destek sunmayı planlıyoruz.

Karma – SQL veritabanında tüm cihazlar, varlıklar, müşteriler, gösterge tabloları, vb. depolar. NoSQL veritabanında ise tüm telemetri verilerini depolar.

IoT Platform Mimarisi | Programlama dilleri ve üçüncü taraf

ThingsBoard’un back-end tarafı Java ile yazılmıştır, ancak Node.js tabanlı bazı microservice’lerimiz de vardır. ThingsBoard’un front-end tarafı, Angular JS çerçevesine dayanan tek sayfalık bir uygulamadır (SPA).

error: