IoSphere 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

IoT Platform Mimarisi

Şirket İçi veya Bulut Kurulumu

IoT Platform Mimarisi

IoSphere hem şirket içi hem de bulut kurulumlarını destekler. 2000’den fazla IoSphere sunucusu tüm dünyada 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 IoSphere sunucularının (düğümlerinin) otomatik keşfini destekler. Cluster içindeki tüm IoSphere düğümleri aynıdır ve yükü paylaşır. Tüm düğümler aynı olduğu için “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 IoSphere düğümlerine istek iletebilir.

IoT Platform Mimarisi

IoT Platform Mimari | Monolitik ve Microservice mimari

IoT Platform Mimarisi

IoSphere her zaman dağıtılmış bir uygulama olarak çalışmak üzere tasarlanmıştır, ancak başlangıç modeli için monolit bir uygulama olarak kullanılabileceği de düşünülmüştür. 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.

SQL – NoSQL – Hibrit veritabanı yaklaşımı

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

  • SQL – Tüm varlıkları ve telemetriyi SQL veritabanında depolar. IoSphere, PostgreSQL’i kullanmanızı önerir ve bu, IoSphere’in desteklediği ana SQL veritabanıdır.
  • Hibrit (PostgreSQL + Cassandra) – Tüm varlıkları PostgreSQL veritabanında ve tüm telemetri verilerini Cassandra veritabanında depolar.
  • Hibrit (PostgreSQL + TimescaleDB) – Tüm varlıkları PostgreSQL veritabanında ve tüm telemetri verilerini Timescale veritabanında depolar.

Programlama Dilleri ve Üçüncü Parti

IoSphere back-end tarafı Java ile yazılmıştır, ancak Node.js’ye dayalı bazı microservice’lerimiz de mevcuttur. IoSphere front-end tarafı, Angular 9 çerçevesine dayalı bir SPA’dır. Kullanılan üçüncü parti bileşenler hakkında daha fazla ayrıntı için monolitik ve microservice mimariyi inceleyebilirsiniz.

IoT Platform Mimarisi


IoT Platform Mimarisi

IoT Platform Mimarisi

IoT Platform Mimarisi | IoSphere Monolitik mimari

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 IoSphere müşterisi tek IoSphere 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 IoSphere bileşenleri tek bir Java Sanal Makinesi’nde (JVM) başlatılır ve aynı işletim sistemi kaynaklarını paylaşır. IoSphere Java ile yazıldığı için, monolitik mimarinin bariz avantajı IoSphere’i çalıştırmak için gereken belleğin en aza indirilmesidir. Sınırlı bir ortamda 256 veya 512 MB RAM ile IoSphere 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, IoSphere 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

Aktarım Bileşenleri (Transport Components)

IoT Platform Mimarisi

IoSphere, 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 IoSphere “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.

IoSphere, aktarım ve çekirdek servisler arasında çok basit bir iletişim protokolü kullandığı için, ö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

IoSphere 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).

IoSphere 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. IoSphere 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ı IoSphere düğümünde işlenir. Platform, IoSphere düğümleri arasında mesaj göndermek için gRPC kullanır.

IoT Platform Mimarisi

Harici Sistemler

IoT Platform Mimarisi

Iot Platform Mimarisi | Kural Motoru üzerinden IoSphere’den 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 IoSphere’e geri bildirebilirsiniz.


IoT Platform Mimarisi | Iosphere 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.

Aktarım Microservice’leri (Transport Microservices)

Iot Platform Mimarisi | IoSphere, 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 IoSphere “Aktarım Katmanı” nın bir parçasıdır.

Yukarıda listelenen aktarım sunucularının her biri, Kafka’yı kullanarak ana IoSphere 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, IoSphere 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.

IoSphere, 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)

IoSphere, 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 | IoSphere 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ığı için, ana işlemeye etkiyi önlemek için bunları yalıtılmış bir bağlamda yürütmemiz gerekir. IoSphere, 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: IoSphere monolitik 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 IoSphere ç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 | IoSphere Node

Ç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).

IoSphere 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. IoSphere 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ı IoSphere düğümünde işlenir. Platform, IoSphere düğümleri arasında mesaj göndermek için gRPC kullanır.

IoT Platform Mimarisi | Üçüncü Parti

Kafka

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

Redis

Redis, IoSphere tarafından önbellekleme(caching) için kullanılan açık kaynaklı (BSD lisanslı), bellek içi veri yapısı deposudur. IoSphere 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. IoSphere, tek bir varlıktan (cihaz, varlık, kiracı) belirli bir IoSphere 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.


error: