Düşük maliyetli sunucusuz Azure hizmetlerini kullanarak gerçek zamanlı konum paylaşımı

Front Door
İşlevler
Service Bus

Bu senaryo, gerçek zamanlı hizmetleri kullanarak sayfa yenilemesine ihtiyaç duymadan değişiklikleri web görünümündeki temel alınan verilere işleyen bir çözüm tasarlamayı açıklar. Ürün ve mallara ilişkin gerçek zamanlı izleme ve sosyal medya çözümleri bu senaryoya yönelik kullanımlara örnek verilebilir.

Bu senaryoda, yiyecek teslimatı hizmeti işlemlerinin canlı konumunu paylaşmak için gerçek zamanlı mesajlaşma hizmeti ayarlamayı inceleyeceğiz. Bu örnek, web veya mobil uygulamalar için gerçek zamanlı konum paylaşma platformu oluşturmaya çalışan kullanıcılar için de yararlı olabilir.

Sunucu tarafından tetiklenen bir Azure İşlevleri uygulamasıyla tümleştirerek .NET Core kullanılarak Service Bus sunucusuz modda yapılandırılmış bir SignalR hizmetini kullanacağız.

Olası kullanım örnekleri

Diğer kullanım örneklerinde de benzer tasarım desenleri bulunur:

  • İstemci cihazlarıyla gerçek zamanlı konum paylaşımı.
  • Kullanıcılara anında iletme bildirimi gönderme.
  • Zaman çizelgelerini güncelleştirme.
  • Sohbet odaları oluşturma.

Mimari

Service Bus Kuyruğu, Azure İşlevleri ve SignalR’yi canlı konum verilerini paylaşırken gösteren mimari diyagram.

Bileşenler

  • Uygulama veya hizmetlerden biri ya da daha fazlasının çevrimdışı olduğu durumlarda bile kullanılabilen Service Bus, uygulama ve hizmetler arasında bulut mesajlaşması için oldukça güvenilir bir hizmettir.
  • SignalR, web uygulamanıza gerçek zamanlı iletişim eklemeyi kolaylaştırır.
  • Azure İşlevleri, karmaşık düzenleme problemlerini de çözebilen, olaya dayalı bir sunucusuz işlem platformudur.

Dikkat edilmesi gerekenler

ServiceBusTrigger’da ve Azure Service Bus bağlantı dizesindeki parametreleri yapılandırma gibi, bu senaryo geliştirilirken dikkate alınan durumların bazıları aşağıda verilmiştir:

Hub’lar: Hub’lar, bir video akışı hizmetine benzer. Bir Hub’a ileti göndermek veya bundan ileti almak için Hub’a abone olabilirsiniz.

Hedefler: Hedefler, radyo kanallarına benzer. Kanala gönderilen yeni iletiler, hedef kanalı dinleyen herkese bildirilir.

SignalR platformunun yukarıdaki iki özelliğini hatırlayabilirseniz, bunu kolayca başlatıp çalışır duruma getirebilirsiniz.

Kullanılabilirlik, ölçeklenebilirlik ve güvenlik

Aşağıdaki adımları gerçekleştirerek bu çözümde yüksek kullanılabilirlik elde edebilirsiniz:

Bölgesel eşleştirme

Her Azure bölgesi aynı coğrafyadaki başka bir bölgeyle eşleştirilir. Genel olarak, bölgeler için aynı bölge çiftinden (örneğin, Doğu ABD 2 ve Orta ABD) seçim yapın. Bunu yapmanın avantajları şunları içerir:

  • Geniş kapsamlı bir kesinti durumunda her çiftte en az bir bölgenin kurtarılmasına öncelik verilir.
  • Olası kapalı kalma süresini en aza indirmek için, planlı Azure sistem güncelleştirmeleri bölge çiftlerine tek tek uygulanır.
  • Çoğu durumda, veri yerleşikliğinin karşılanması için çiftler aynı coğrafyada yer alır.
  • Ancak uygulamanız için gereken tüm Azure hizmetlerinin her iki bölge tarafından da desteklendiğinden emin olun. Bkz. Bölgelere göre hizmetler. Bölgesel çiftler hakkında daha fazla bilgi için bkz. İş sürekliliği ve olağanüstü durum kurtarma (BCDR): Eşleştirilmiş Azure Bölgeleri.

Azure Front Door

Azure Front Page’in bir mobil uygulama için yüksek kullanılabilirlik sağlamak üzere nasıl çalıştığını gösteren mimari diyagram.

Azure Front Door, genel uygulamalarınızı hızla teslim etmenize olanak tanıyan ölçeklenebilir ve güvenli bir başlangıç noktasıdır. Öncelikli yönlendirmeyi kullanarak, birincil bölge kullanılamaz hale geldiğinde yükü otomatik olarak devreder. Çok bölgeli bir mimari, tek bir bölgeye dağıtmaya göre daha yüksek kullanılabilirlik sağlayabilir. Birinci bölge bölgesel bir kesintiden etkileniyorsa, ikinci bölgeye yük devretmek için Front Door kullanabilirsiniz. Bu mimari, tek başına bir alt sistem veya çözüm başarısız olduğunda da yardımcı olabilir. Web Uygulaması Güvenlik Duvarı ve DDos Koruması sayesinde, ağ ve uygulama katmanındaki saldırıları uçta durdurun. Microsoft tarafından yönetilen kuralları kullanarak ve kendiniz uygulamanızın özel olarak korunmasına yönelik kurallar yazarak hizmetinizi güçlendirin.

Front Door sistemde olası bir hata noktasıdır. Hizmet başarısız olursa istemciler, kapalı kalma süresinde uygulamanıza erişemez. Front Door hizmet düzeyi sözleşmesini (SLA) gözden geçirin ve yalnızca Front Door kullanımıyla, yüksek kullanılabilirliğe ilişkin iş gereksinimlerinizin karşılanıp karşılanmadığını belirleyin. Aksi durumda, yardımcı çözüm olarak başka bir trafik yönetim çözümü eklemeniz faydalı olabilir. Front Door hizmeti başarısız olursa, DNS’deki kurallı ad (CNAME) kayıtlarınızı diğer trafik yönetimi hizmetini gösterecek şekilde değiştirin. Bu adımın el ile uygulanması gerekir ve uygulamanız DNS değişiklikleri yayılana kadar kullanılamaz.

Bu senaryoya ilişkin fiyatlandırma

İşletmenizin günde 1000 sipariş aldığını ve bunların tümüne yönelik konum verisi paylaşması gerektiği varsayılırsa, yazma zamanındaki fiyatlandırma temel alınarak bu senaryoyu dağıtmaya ilişkin Azure kullanımınız aylık 192 ABD doları civarında olur.

Hizmet türü Tahmini Aylık Maliyet
Azure İşlevleri 119,40 ABD doları
Azure SignalR Service 48,97 ABD doları
Service Bus 23,71 ABD doları
Toplam 192,08 ABD doları

Bu senaryoyu dağıtın

Azure İşlevleri geliştirme

Azure İşlevleri ve Azure SignalR Hizmeti ile oluşturulan sunucusuz bir gerçek zamanlı uygulama için genelde iki Azure İşlevi gerekir:

  • Müşterinin geçerli bir SignalR Hizmeti erişim belirteci ve hizmet uç noktası URL’si almak için çağırdığı “negotiate” işlevi.
  • İleti gönderen veya grup üyeliğini yöneten bir ya da daha fazla işlev.

SignalRFunctionApp

Bu, SignalR kullanarak Service Bus ile Azure İşlevi oluşturan bir işlev uygulamasıdır.

Negotiate.cs

Bu işlev, bir HTTP isteği tarafından tetiklenir. İstemcilerin bir hub’a abone olmak için kullanabileceği SignalR hizmetinden belirteç almak için istemci uygulamaları tarafından kullanılır. Bu "negotiate" olarak adlandırılmış olmalıdır. Daha fazla bilgi için bu kılavuzu okuyun

Message.cs

Bu işlev bir Service Bus tetikleyicisi tarafından tetiklenir. SignalR Service’e bağlıdır. İletiyi kuyruktan çeker ve bunu bir SignalR hub’ına aktarır.

Yönergeler

  1. Azure’da Service Bus kuyruğu sağladığınızdan emin olun.
  2. Azure’da sunucusuz modda bir SignalR hizmeti sağladığınızdan emin olun.
  3. bağlantı dizelerinizi (Service Bus & SignalR) &
  4. İstemci uygulamanın URL’sini (SignalR istemcisi) CORS’ye girin. Bu kılavuz, en son kullanılan söz dizimi sunar.
  5. Message.cs dosyasının içindeki Service Bus Tetikleyicisine Service Bus Kuyruğu adınızı girin.

Şimdi, test edilecek istemci uygulamayı yapılandıracağız. Öncelikle buradan örnek kaynakları edinin

SignalR istemcisi

Bu, SignalRFunctionApp tarafından oluşturulan hub'a abone olmak ve kuyrukta alınan iletileri gerçek zamanlı olarak görüntülemek Service Bus basit bir .NET Core web uygulamasıdır. SignalRFunctionApp'i bir mobil istemciyle çalışmak için kullanabilirsiniz ancak bu deponun amacı doğrultusunda web istemcisini kullanmalıyız.

Yönergeler

  1. Önce SignalRFunctionApp'in çalıştır olduğundan emin olun.
  2. Negotiate işlevi tarafından oluşturulan URL’yi kopyalayın. Şöyle görünür: http://localhost:7071/api/
  3. signalR.HubConnectionBuilder().withUrl("YOUR_URL_HERE").build(); içinde URL’yi chat.js dosyasına yapıştırın
  4. Uygulamayı çalıştırın.
  5. Web istemcisi SignalR hub’ına başarıyla abone olduğunda bağlı durumunu görürsünüz.

SendToQueue.js

Bu, yukarıda yaptığınız dağıtımı test edebilmeniz için Service Bus’a ileti göndermeye yarayan bir node.js betiğidir.

Yönergeler

  1. Azure Service Bus modülünü (@azure/service-bus) yükleyin.
  2. Betiğe bağlantı dizelerinizi ve kuyruk adınızı girin.
  3. Betiği çalıştırın.

Sonraki adımlar

Bu senaryoyu üretim ortamınıza alabilirsiniz. Ancak, Azure hizmetlerinizin ölçeğe göre ayarlandığından emin olun. Örneğin, Azure Service Bus’ınız, bir standart veya premium plana ayarlanmalıdır.

Kodu, Visual Studio’dan Azure İşlevleri’ne dağıtabilirsiniz. Visual Studio’dan kodunuzu Azure İşlevleri’nde yayımlamayı öğrenmek için bu kılavuzu izleyin.

Alternatifler

Bu senaryo için Pusher gibi alternatifler vardır. Pusher, ölçeklenebilir gerçek zamanlı iletişim özellikleri oluşturan uygulama geliştiricilerine yönelik güçlü API’lerde kategori lideridir.

PubNub da kullanılabilir. PubNub, altyapı hakkında endişelenmeden uygulamalarınıza gerçek zamanlı özellik eklemenizi kolaylaştırır. Kullanıcılarınızın mobil, tarayıcı, masaüstü ve sunucudan etkileşime geçmesine olanak tanıyan uygulamalar oluşturun.

Pusher ve PubNub gerçek zamanlı mesajlaşma için yaygın olarak benimsenmiş platformlardır. Ancak, bu senaryo için her şeyi Azure’da yapacağız. Sunucu ve istemci arasında iki yönlü iletişime olanak tanıdığı için SignalR bana en uygun olan seçenekti. 7\.900 GitHub yıldızı ve 2.200 GitHub çatalı bulunan açık kaynaklı bir araçtır.

SignalR’nin GitHub’daki açık kaynak deposuna açılan bağlantıyı burada bulabilirsiniz.

Bu makale, Azure İşlevleri’nde Azure Service Bus bağlamalarıyla çalışmayı açıklar. Azure İşlevleri, Service Bus sıraları ve konularına yönelik tetikleme ve çıkış bağlamalarını destekler.

Bu makale, Azure İşlevleri’ndeki SignalR Hizmeti bağlamalarını kullanarak Azure SignalR Hizmeti’ne bağlı olan istemcilerde kimliğinizi doğrulamayı ve bunlara gerçek zamanlı iletiler göndermeyi açıklar. Azure İşlevleri, SignalR Hizmeti’ne yönelik giriş ve çıkış bağlamalarını destekler.