AWS Türkçe Blog

AWS IoT Greengrass PubSub SDK kullanılarak dağıtılmış IoT uygulamaları nasıl geliştirilir?

Giriş

IoT uygulamaları, dağıtılmış hizmetlerin olayla tetiklenen mesajlar aracılığıyla iletişim kurduğu Publish / Subscribe (Yayınla / Abone Ol, PubSub) modeliyle eş anlamlıdır. PubSub modeli, tasarımda esneklik sunar ve olaya dayalı dağıtılmış IoT sistemlerine çok uygundur. Ancak bu esneklik, sistemler, hizmetler ve ekipler arasında bağımlılıklar oluşturan birçok tasarım kararını geliştiricinin eline verir. Bu yayında, Python için AWS IoT Greengrass PubSub SDK kullanılarak AWS IoT Greengrass tarafından dağıtılan ve yönetilen dağıtılmış IoT PubSub uygulamalarının geliştirilmesini nasıl hızlandıracağınızı ve basitleştireceğinizi öğreneceksiniz.

Çözüme Genel Bakış

Python için AWS IoT Greengrass PubSub SDK (burada SDK olarak anılır), AWS Greengrass V2 Components için bir Python kütüphanesi olarak sunulan, oldukça iyi düşünülmüş bir IoT PubSub uygulama mimarisi sağlar. SDK, AWS IoT Greengrass PubSub işlevini özetler ve AWS IoT Greengrass IPC / MQTT mesajlarını kullanıcı tanımlı uygulama geri aramalarına otomatik olarak yönlendirmek için veriye dayalı bir mesaj formatı tanımlar. Bunu yaparken, SDK, PubSub konu (topic) şemasını istenen arayüz işlevselliğinden ayıran bir No/Low-Code mesajlaşma hizmeti sunar.

Aşağıdaki şema, Python mimarisi için AWS IoT Greengrass PubSub SDK’e yüksek düzeyde bir genel bakış sağlar:

AWS Greengrass PubSub SDK Overview

Tipik bir IoT PubSub hizmetinde, mesaj veri yükü (payload) formatı ve konu şeması, API’ların işlevselliğine sıkı sıkıya bağlıdır. Bu yaklaşımı kullanmak, karmaşık ve yönetilmesi zor yukarı akış bağımlılıkları yaratır. Son bir zorluk, PubSub mesaj işleme ve yönlendirmeyi yönetmek için standart kodun tekrar tekrar geliştirilmesidir.

Aşağıdaki şema, mesaj biçimleri ve konuları ile bireysel hizmet işlevleri arasında sıkı entegrasyonlar ve bağımlılıklar içeren tipik bir dağıtılmış IoT uygulama hizmeti arabirimini açıklar.

Python için AWS IoT Greengrass PubSub SDK, aşağıdakileri sağlayarak bu önemli bağımlılıkları ve zorlukları çözer:

  1. Tanımlanmış Mesaj Formatı: SDK, PubSub konularını arayüz işlevselliğinden ayırmak için veriye dayalı mesaj yönlendirmeyi destekleyen kontrol alanlarıyla tanımlanmış ancak genişletilebilir bir mesaj formatı sağlar.
  2. Basitleştirilmiş Konu Şeması: SDK, veriye dayalı mesaj yönlendirmesiyle mümkün kılınan, yalnızca tek bir ingress (giriş) ve egress (çıkış) konusundan oluşan basit ama genişletilebilir bir konu şeması tanımlar.
  3. Mesajlaşma Hizmeti Standart Kodu: SDK, PubSub mesajlarını işlemek ve kullanıcı tanımlı uygulama geri aramalarına yönlendirmek için AWS IoT Greengrass IPC ve MQTT PubSub işlevselliğini özetler.

Aşağıdaki şema, AWS IoT Greengrass PubSub SDK’ini mesaj biçimleri ve konu şemasıyla artık hizmet işleviyle eşlenmemiş olarak kullanırken benzer bir hizmet arabirimini gösterir. Bu, veriye dayalı mesaj yönlendirmesi ile mümkün hale gelir ve bu halka açık hizmet özniteliklerinde yukarı akış bağımlılığını ve değişiklik yönetimini ortadan kaldırır.

PubSub Mesaj İşlemi ve Yönlendirme

Mesaj Formatı

SDK mesaj yönlendirmesi, aşağıda gösterilen belirtilen mesaj formatındaki route field tarafından kontrol edilir:

{
  "sdk_version": "0.1.0",
  "message_id": "20220403170948930231",
  "status": 200,
  "route": "MyPubSubMessageHandler.pubsub_message_callback_function",
  "message": {
    "my-message-param01": "param01",
    "my-message-param02": "param02"
  }
}
JSON

route field, Class.Function ad alanı kuralını kullanarak uygulama mantığınızda (Düz Eski Python) bir geri arama işlevi olan bir rota hedefini tanımlar.

  1. sdk_version: Dağıtılmış sistemler arasında mesaj sürümü kontrolü sağlar. Varsayılan olarak, SDK farklı bir ana sürüme sahip mesajları reddedecektir.
  2. message_id: Bu genellikle bir zaman damgasıdır, ancak herhangi bir kullanıcı tanımlı dize olabilir. Asenkron İstek / Yanıt (Request / Response) modellerinde mesajları izlemek için kullanılır.
  3. status:  Mesaj isteğinin, yanıtın veya güncellemenin durumu. message_id ile kullanıldığında, asenkron İstek / Yanıt mesajlarının, başarı / başarısızlık (success / failure) konularına ve mesaj biçimlerine ihtiyaç duymadan belirli bir durumu rapor etmesine olanak tanır.
  4. route: Açıklandığı gibi, SDK tarafından PubSub mesajlarını Class.Function ad alanı kuralında kullanıcı tanımlı uygulama geri aramalarına yönlendirmek için kullanılır.
  5. message: SDK formatlı mesajlar için kullanıcı tanımlı veri yükü alanı. SDK, bu değişikliği, açıklanan diğer alanlarla birlikte kullanıcı tanımlı geri aramalara iletecektir.

Aşağıdaki şema, mesajları kablodan kullanıcı tanımlı uygulama geri aramalarına yönlendirmek için SDK tanımlı mesaj formatının nasıl kullanıldığını daha ayrıntılı olarak açıklar:SDK Message Routing Process

  1. SDK ile dağıtılan bir AWS IoT Greengrass bileşeni, geçerli bir SystemMessageHandler.health_check route alanına sahip iyi biçimlendirilmiş bir mesaj alır.
  2. SDK mesajı işler, geçerliliğini, SDK sürümünü kontrol eder ve yolun kullanıcı tanımlı bir uygulama geri aramasıyla eşleşip eşleşmediğini belirler ve mesajı buna göre yönlendirir.
  3. PubSub mesajı, kullanıcı uygulama mantığı tarafından işlenmek üzere parametrelenmiş tüm SDK mesaj alanları ile birlikte health_check işlevine iletilir.
  4. Burada, health_check işlevinin, veri yükündeki sistem sağlığı ile iyi biçimlendirilmiş bir yanıt ve yeni bir geçerli route oluşturduğunu ve yukarı akış sistemleri için message_id‘yi yansıttığını varsayıyoruz.
  5. SDK, health_check işlevinden mesaj yayınlama isteğini alır ve mesajı uygun PubSub konusuna iletir.

Bu veriye dayalı mesaj yönlendirme, yalnızca gerekli küçük değişikliklerle hizmet arabirimi işlevselliğini güncellemenize olanak tanır. Örneğin, açıklanan sistem sağlık kontrolü talebini desteklemek için arayüz eklemek için; uygulama mesajı işleyicinize uygun geri arama işlevini eklemeniz ve ardından verilen rotayı yukarı akış hizmetlerine bildirmeniz yeterlidir. PubSub konu şemasında herhangi bir değişiklik yoktur, çok az kod değişikliği vardır ve mevcut arayüz işlevselliği ile geriye dönük olarak uyumludur ve kesintisizdir.

Konu Şeması

Mesaj tabanlı yönlendirme alanları nedeniyle, SDK temel konu şeması, Ingress ve Egress konuları olmak üzere yalnızca iki konudan oluşabilir:

  • Ingress Topic: BASE_TOPIC/AWS_IOT_THING_NAME/ingress
  • Egress Topic: BASE_TOPIC/AWS_IOT_THING_NAME/egress

BASE_TOPIC, her bir SDK tabanlı AWS Greengrass Bileşeni başlatılırken sağlanan, kullanıcı tanımlı parametreli bir alandır. Genellikle bileşen adına ayarlanır.

Bu basit konu şeması, bileşen tarifi (JSON) dosyasından parametre enjeksiyonu yoluyla genişletilebilir, böylece kod değişikliğine gerek kalmadan konu şeması değişikliklerine ve özel aboneliklere izin verilir. Bu şekilde, SDK hizmetler arasındaki arabirim sözleşmesini yönetir, böylece geliştirici olarak siz yalnızca kaliteli uygulama mantığı sunmaya odaklanabilirsiniz.

End To End Greengrass Pubsub SDK Consistant Messaging

AWS IoT Greengrass PubSub SDK’ini Dağıtma

AWS IoT Greengrass PubSub SDK’i başlatmanın ve dağıtmanın en kolay yolu, SDK GitHub deposunda sağlanan örnek bileşeni çoğaltmak ve AWS IoT Greengrass Development Kit (GDK) aracılığıyla dağıtmaktır. Bu süreci ayrıntılı olarak açıklayan iki kaynak vardır:

  1. SDK Örnek Dizini: SDK, SDK’in kurulu olduğu örnek bir AWS IoT Greengrass bileşeni sağlar. Tek bir bileşeni dağıtmak ve basit bir MQTT PubSub İstek / Yanıt mesajı göndermek için Samples dizininde sağlanan kılavuzu izleyin.
  2. AWS IoT Greengrass PubSub SDK atölyesiyle Dağıtılmış bir IoT Uygulaması oluşturun: Bu atölye, SDK’i kullanarak Amazon SQS entegrasyonlarına sahip bir Smart Factory dağıtılmış IoT PubSub Uygulaması oluşturur.

Daha fazla okuma

AWS IoT Greengrass PubSub SDK, aşağıdaki bağlantılarda sağlanan ayrıntılı bir geliştirici kılavuzu ve API belgeleriyle birlikte gelir:

AWS IoT Greengrass ve AWS IoT hakkında daha fazla bilgi için aşağıdaki bağlantılara bakın:

Sonuç

Bu yazıda, geliştiricilerin dağıtılmış IoT PubSub uygulamalarını tasarlarken karşılaştıkları ortak zorlukları tartıştım. AWS IoT Greengrass PubSub SDK’i tanıttım ve bu çözümü kullanmanın, bu zorlukların ve bağımlılıkların çoğunu nasıl çözebileceğini açıkladım. Oluşturmaya başlamak için AWS IoT Greengrass PubSub SDK atölyesiyle Dağıtılmış IoT Uygulaması Oluşturma‘yı denemenizi öneririz.