Dayanıklı uygulamalar oluşturmak için cihaz yeniden bağlantılarını yönetme

Bu makalede, cihaz yeniden bağlantı stratejisi ekleyerek dayanıklı uygulamalar tasarlamanıza yardımcı olacak üst düzey yönergeler sağlanmaktadır. Cihazların neden bağlantısının kesilip yeniden bağlanması gerektiğini açıklar. Ayrıca geliştiricilerin bağlantısı kesilmiş cihazları yeniden bağlamak için kullanabileceği belirli stratejileri açıklar.

Bağlantı kesilmesine neden olan şey

Cihazların IoT Hub ile bağlantısının kesilmesinin en yaygın nedenleri şunlardır:

  • Süresi dolan SAS belirteci veya X.509 sertifikası. Cihazın SAS belirtecinin veya X.509 kimlik doğrulama sertifikasının süresi doldu.
  • Ağ kesintisi. Cihazın ağ bağlantısı kesilir.
  • Hizmet kesintisi. Azure IoT Hub hizmeti hatalarla karşılaşıyor veya geçici olarak kullanılamıyor.
  • Hizmet yeniden yapılandırma. IoT Hub hizmet ayarlarını yeniden yapılandırdıktan sonra, bu durum cihazların yeniden sağlama veya yeniden bağlanma gerektirmesine neden olabilir.

Yeniden bağlantı stratejisine neden ihtiyacınız var?

Aşağıdaki bölümlerde açıklandığı gibi cihazları yeniden bağlama stratejisine sahip olmak önemlidir. Yeniden bağlantı stratejisi olmadan çözümünüzün performansı, kullanılabilirliği ve maliyeti üzerinde olumsuz bir etki görebilirsiniz.

Toplu yeniden bağlanma girişimleri DDoS'a neden olabilir

Saniyede çok sayıda bağlantı girişimi, dağıtılmış hizmet engelleme saldırısına (DDoS) benzer bir koşula neden olabilir. Bu senaryo, sayıları milyonları bulan büyük cihaz filoları için geçerlidir. Sorun, filonun sahibi olan kiracının ötesine geçebilir ve tüm ölçek birimini etkileyebilir. DDoS, ölçeği genişletme ihtiyacı nedeniyle Azure IoT Hub kaynaklarınızda büyük bir maliyet artışına neden olabilir. DDoS, kaynak açlığı nedeniyle çözümünüzün performansına da zarar verebilir. Daha kötü durumda, DDoS hizmet kesintisine neden olabilir.

Hub hatası veya yeniden yapılandırma birçok cihazın bağlantısını kesebilir

IoT hub'ı bir hatayla karşılaştığında veya bir IoT hub'ına hizmet ayarlarını yeniden yapılandırdıktan sonra cihazların bağlantısı kesilebilir. Düzgün yük devretme için bağlantısı kesilmiş cihazlar yeniden sağlama gerektirir. Yük devretme seçenekleri hakkında daha fazla bilgi edinmek için bkz . IoT Hub yüksek kullanılabilirlik ve olağanüstü durum kurtarma.

Birçok cihazın yeniden sağlanması maliyetleri artırabilir

Cihazların IoT Hub bağlantısı kesildikten sonra en uygun çözüm cihazı yeniden sağlamak yerine yeniden bağlamaktır. DPS ile IoT Hub kullanıyorsanız DPS'nin sağlama başına maliyeti vardır. DPS'de birçok cihazı yeniden sağlamanız IoT çözümünüzün maliyetini artırır. DPS sağlama maliyetleri hakkında daha fazla bilgi edinmek için bkz . IoT Hub DPS fiyatlandırması.

Dayanıklılığa yönelik tasarım

IoT cihazları genellikle sürekli olmayan veya kararsız ağ bağlantılarına (örneğin, GSM veya uydu) güvenir. Aralıklı hizmet kullanılabilirliği ve altyapı düzeyi veya geçici hatalar nedeniyle cihazlar bulut tabanlı hizmetlerle etkileşime geçtiğinde hatalar oluşabilir. Bir cihazda çalışan bir uygulamanın bağlantı, yeniden bağlantı ve ileti gönderme ve alma için yeniden deneme mantığını yönetmesi gerekir. Ayrıca, yeniden deneme stratejisi gereksinimleri büyük ölçüde cihazın IoT senaryosuna, bağlamlarına ve özelliklerine bağlıdır.

Azure IoT Hub cihaz SDK'ları, buluttan cihaza ve cihazdan buluta bağlanmayı ve iletişim kurmayı basitleştirmeyi amaçlar. Bu SDK'lar, Azure IoT Hub'a bağlanmak için sağlam bir yol ve ileti gönderip almak için kapsamlı bir seçenek kümesi sağlar. Geliştiriciler, belirli bir senaryo için daha iyi bir yeniden deneme stratejisini özelleştirmek için mevcut uygulamayı da değiştirebilir.

Bağlantıyı ve güvenilir mesajlaşmayı destekleyen ilgili SDK özellikleri aşağıdaki IoT Hub cihaz SDK'larında kullanılabilir. Daha fazla bilgi için API belgelerine veya belirli SDK'ya bakın:

Aşağıdaki bölümlerde bağlantıyı destekleyen SDK özellikleri açıklanmaktadır.

Bağlantı ve yeniden deneme

Bu bölümde, bağlantıları yönetirken kullanılabilen yeniden bağlantı ve yeniden deneme desenlerine genel bir bakış sunulmaktadır. Cihaz uygulamanızda farklı bir yeniden deneme ilkesi kullanmaya yönelik uygulama kılavuzunu ayrıntılı olarak açıklar ve cihaz SDK'larından ilgili API'leri listeler.

Hata desenleri

Bağlantı hataları birçok düzeyde gerçekleşebilir:

  • Ağ hataları: bağlantısı kesilmiş yuva ve ad çözümleme hataları

  • HTTP, AMQP ve MQTT aktarımı için protokol düzeyinde hatalar: ayrılmış bağlantılar veya süresi dolmuş oturumlar

  • Yerel hatalardan kaynaklanan uygulama düzeyi hataları: geçersiz kimlik bilgileri veya hizmet davranışı (örneğin, kotayı aşma veya azaltma)

Cihaz SDK'ları üç düzeyde de hataları algılar. Ancak cihaz SDK'ları işletim sistemiyle ilgili hataları ve donanım hatalarını algılamaz ve işlemez. SDK tasarımı, Azure Mimari Merkezi'nden Gelen Geçici Hata İşleme Kılavuzu'na dayanır.

Yeniden deneme düzenleri

Aşağıdaki adımlar, bağlantı hataları algılandığında yeniden deneme işlemini açıklar:

  1. SDK, ağ, protokol veya uygulamadaki hatayı ve ilişkili hatayı algılar.

  2. SDK, hata türünü belirlemek ve yeniden deneme gerekip gerekmediğini belirlemek için hata filtresini kullanır.

  3. SDK kurtarılamaz bir hata belirlerse bağlantı, gönderme ve alma gibi işlemler durdurulur. SDK kullanıcıya bildirir. Kurtarılamaz hatalara örnek olarak kimlik doğrulama hatası ve hatalı uç nokta hatası verilebilir.

  4. SDK kurtarılabilir bir hata tanımlarsa, tanımlanan zaman aşımı geçene kadar belirtilen yeniden deneme ilkesine göre yeniden denenir. SDK varsayılan olarak üstel geri alma ve değişim yeniden deneme ilkesi kullanır.

  5. Tanımlanan zaman aşımı süresi dolduğunda SDK bağlanmayı veya göndermeyi denemeyi durdurur. Kullanıcıya bildirir.

  6. SDK, kullanıcının bağlantı durumu değişikliklerini almak için bir geri çağırma eklemesine olanak tanır.

SDK'lar genellikle üç yeniden deneme ilkesi sağlar:

  • Değişimli üstel geri alma: Bu varsayılan yeniden deneme ilkesi başlangıçta agresif olma eğilimindedir ve zaman içinde maksimum gecikmeye ulaşana kadar yavaşlar. Tasarım, Azure Mimari Merkezi'nden gelen Yeniden Deneme kılavuzunu temel alır.

  • Özel yeniden deneme: Bazı SDK dillerinde senaryonuz için daha uygun olan bir özel yeniden deneme ilkesi tasarlayabilir ve ardından RetryPolicy'ye ekleyebilirsiniz. Özel yeniden deneme C SDK'sı üzerinde kullanılamaz ve şu anda Python SDK'sı üzerinde desteklenmemaktadır. Python SDK'sı gerektiğinde yeniden bağlanır.

  • Yeniden deneme yok: Yeniden deneme ilkesini "yeniden deneme yok" olarak ayarlayabilirsiniz ve bu da yeniden deneme mantığını devre dışı bırakır. SDK, bağlantının kurulduğu varsayılarak bir kez bağlanmaya ve bir ileti göndermeye çalışır. Bu ilke genellikle bant genişliği veya maliyet kaygıları olan senaryolarda kullanılır. Bu seçeneği belirlerseniz, gönderilemeyen iletiler kaybolur ve kurtarılamaz.

İlke API'lerini yeniden deneme

SDK SetRetryPolicy yöntemi İlke uygulamaları Uygulama kılavuzu
C IOTHUB_CLIENT_RESULT IoTHubDeviceClient_SetRetryPolicy Bkz: IOTHUB_CLIENT_RETRY_POLICY C uygulaması
Java SetRetryPolicy Varsayılan: ExponentialBackoffWithJitter sınıfı
Özel: RetryPolicy arabirimini uygulama
Yeniden deneme yok: NoRetry sınıfı
Java uygulaması
.NET DeviceClient.SetRetryPolicy Varsayılan: ExponentialBackoff sınıfı
Özel: IRetryPolicy arabirimini uygulama
Yeniden deneme yok: NoRetry sınıfı
C# uygulaması
Düğüm setRetryPolicy Varsayılan: ExponentialBackoffWithJitter sınıfı
Özel: RetryPolicy arabirimini uygulama
Yeniden deneme yok: NoRetry sınıfı
Düğüm uygulaması
Python Şu anda desteklenmiyor Şu anda desteklenmiyor Yerleşik bağlantı yeniden denemeleri: Bırakılan bağlantılar varsayılan olarak sabit bir 10 saniyelik aralıkla yeniden denenir. İsterseniz bu işlev devre dışı bırakılabilir ve aralık yapılandırılabilir.

Hub yeniden bağlantı akışı

IoT Hub'ı yalnızca DPS olmadan kullanıyorsanız aşağıdaki yeniden bağlantı stratejisini kullanın.

Bir cihaz IoT Hub'a bağlanamadığında veya IoT Hub bağlantısı kesildiğinde:

  1. Gecikme gecikmesi işleviyle üstel geri alma kullanın.
  2. IoT Hub'a yeniden bağlan.

Aşağıdaki diyagram yeniden bağlantı akışını özetler:

IoT Hub için cihaz yeniden bağlantı akışının diyagramı.

DPS yeniden bağlantı akışına sahip merkez

IoT Hub'ı DPS ile kullanıyorsanız aşağıdaki yeniden bağlantı stratejisini kullanın.

Bir cihaz IoT Hub'a bağlanamıyorsa veya IoT Hub bağlantısı kesildiğinde, aşağıdaki durumlara göre yeniden bağlanın:

Yeniden bağlanma senaryosu Yeniden bağlanma stratejisi
Bağlantı yeniden denemelerine izin veren hatalar için (HTTP yanıt kodu 500) Gecikme gecikmesi işleviyle üstel geri alma kullanın.
IoT Hub'a yeniden bağlan.
Yeniden denemenin mümkün olduğunu, ancak yeniden bağlantının art arda 10 kez başarısız olduğunu gösteren hatalar için Cihazı DPS'ye yeniden sağlama.
Bağlantı yeniden denemelerine izin verilmeyen hatalar için (HTTP yanıtları 401, Yetkisiz veya 403, Yasak veya 404, Bulunamadı) Cihazı DPS'ye yeniden sağlama.

Aşağıdaki diyagram yeniden bağlantı akışını özetler:

DPS ile IoT Hub için cihaz yeniden bağlantı akışının diyagramı.

Sonraki adımlar

Önerilen sonraki adımlar şunlardır: