Düşük maliyetli sunucusuz Azure hizmetlerini kullanarak bir konumu gerçek zamanlı olarak paylaşma

Azure Front Door
Azure Functions
Azure Service Bus

Bu senaryoda, gerçek zamanlı hizmetleri kullanarak sayfa yenilemeye gerek kalmadan web görünümünde temel alınan verilerde yapılan değişiklikleri işleyen bir çözümün mimarisinin nasıl tasarlandığı açıklanmaktadır. Bu senaryoya örnek olarak ürünlerin ve ürünlerin gerçek zamanlı olarak izlenmesi ve sosyal medya çözümleri verilebilir.

Mimari

Azure service bus kuyruğu, Azure İşlevleri ve SignalR'nin canlı konum verilerini paylaştığını gösteren mimari diyagram.

Bu mimarinin bir Visio dosyasını indirin.

Bileşenler

  • Azure Service Bus, bir veya daha fazla çevrimdışı olduğunda bile uygulamalar ve hizmetler arasında son derece güvenilir bir bulut mesajlaşma hizmetidir.
  • Azure SignalR Hizmeti, web uygulamanıza gerçek zamanlı iletişimler eklemeyi kolaylaştırır.
  • Azure İşlevleri, karmaşık düzenleme sorunlarını da çözebilen olay odaklı, sunucusuz bir işlem platformudur.

Alternatifler

Gönderici de dahil olmak üzere bu senaryoya yönelik alternatifler vardır. Ölçeklenebilir gerçek zamanlı iletişim özellikleri oluşturan uygulama geliştiricileri için güçlü API'lerde kategori lideridir.

PubNub da var. 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.

Ably başka bir alternatiftir. Gereksinimlerinize göre güvenilir bir şekilde ölçeklendirilen sunucusuz yayımlama/abone olma (pub/sub) mesajlaşması sağlar. Mesajlaşma, WebSockets kullanılarak uçta teslim edilir. Ably platformu, API çağrısıyla yüksek oranda kullanılabilir, esnek olarak ölçeklenebilir ve küresel olarak dağıtılan gerçek zamanlı bir altyapı sağlar.

Pusher, PubNub ve Ably gerçek zamanlı mesajlaşma için en yaygın olarak benimsenen platformlar olsa da, bu senaryo için her şeyi Azure'da yapacaksınız. Sunucu ve istemci arasında çift yönlü iletişime izin verdiğinden, signalR'yi platforma geçiş olarak öneririz. Ayrıca 7,9 bin GitHub yıldızı ve 2,2 bin GitHub çatalı içeren açık kaynak bir araçtır.

Daha fazla bilgi için bkz. GitHub'daki SignalR açık kaynak deposu .

Senaryo ayrıntıları

Bu senaryoda, bir yemek teslim hizmeti işleminin canlı konumunu paylaşmak için gerçek zamanlı mesajlaşma hizmeti ayarlamayı öğreneceksiniz. Bu örnek, web veya mobil uygulamaları için gerçek zamanlı bir konum paylaşım platformu oluşturmaya çalışanlar için de yararlı olabilir.

Sunucusuz modda yapılandırılan bir SignalR hizmetini, bir hizmet veri yolu tarafından tetiklenen bir Azure İşlevleri uygulamasıyla tümleştirmek için kullanacaksınız ve bunların tümünü .NET Core kullanarak yapacaksınız.

Olası kullanım örnekleri

Bu diğer kullanım örnekleri benzer tasarım desenlerine sahiptir:

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

Dikkat edilmesi gerekenler

Bu önemli noktalar, bir iş yükünün kalitesini artırmak için kullanabileceğiniz bir dizi yol gösteren ilke olan Azure Well-Architected Framework'ün yapı taşlarını uygular. Daha fazla bilgi için bkz. Microsoft Azure Well-Architected Framework.

ServiceBusTrigger'da Azure Service Bus bağlantı dizesinde parametreleri yapılandırma da dahil olmak üzere bu senaryoyu geliştirirken göz önünde bulundurmanız gereken birkaç şey şunlardır:

  • Hub'lar: Hub'lar bir video akış hizmetiyle karşılaştırılabilir. Bir hub'dan ileti gönderip almak için bir hub'a abone olabilirsiniz.
  • Hedefler: Hedefler radyo kanalları gibidir. Bunlar, hedef kanalı dinleyen herkesi içerir ve bu kanalda yeni bir ileti olduğunda bu kişilere bildirilir.

SignalR platformunun önceki iki özelliğini hatırlayabiliyorsanız hızlı bir şekilde çalışmaya başlamanız kolay olacaktır.

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

Sonraki iki bölümde açıklananları izleyerek bu çözümle 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ş bir kesinti olursa, her çiftten en az bir bölgenin kurtarılması önceliklendirilir.
  • 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, her iki bölgenin de uygulamanız için gereken tüm Azure hizmetlerini desteklediğ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.

Bu mimarinin bir Visio dosyasını indirin.

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. Öncelik yönlendirmeyi kullandığınızda, birincil bölge kullanılamaz duruma gelirse otomatik olarak yük 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 kural kümelerini kullanarak hizmetinizi sağlamlaştırın ve uygulamanızın özel koruması için kendi kurallarınızı yazın.

Front Door sistemde olası bir hata noktasıdır. Hizmet başarısız olursa, istemciler kapalı kalma süresi boyunca uygulamanıza erişemez. Front Door hizmet düzeyi sözleşmesini (SLA) gözden geçirin ve Yalnızca Front Door kullanmanın yüksek kullanılabilirlik için iş gereksinimlerinizi karşılayıp karşılamadığı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ı el ile gerçekleştirmeniz gerekir ve DNS değişiklikleri yayılana kadar uygulamanız kullanılamaz.

Maliyet iyileştirmesi

Maliyet iyileştirmesi, gereksiz giderleri azaltmanın ve operasyonel verimliliği artırmanın yollarını gözden geçmektir. Daha fazla bilgi için bkz. Maliyet iyileştirme sütununa genel bakış.

İşletmenizde günde 1.000 sipariş olduğunu ve bunların tümüyle aynı anda konum verilerini paylaşması gerektiğini varsayalım. Bu senaryoyu dağıtmak için tahmini Azure kullanımınız, yayın tarihindeki fiyatlandırmaya bağlı olarak aylık 192 ABD dolarına yakın olacaktır.

Hizmet türü Tahmini aylık maliyet
Azure İşlevleri AMERIKAN DOLARı 119,40
Azure SignalR Hizmeti AMERIKAN DOLARı 48,97
Azure Service Bus Amerikan Doları 23,71
Toplam Amerikan Doları 192,08

Bu senaryoyu dağıtın

Azure İşlevleri geliştirme

Azure İşlevleri ve Azure SignalR Hizmeti ile oluşturulan sunucusuz gerçek zamanlı bir uygulama normalde iki Azure İşlevleri gerektirir:

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

SignalRFunctionApp

SignalRFunctionApp, SignalR ile bir service bus tetikleyicisi ile bir Azure İşlevleri örneği oluşturan bir işlev uygulamasıdır.

Negotiate.cs

Bu işlev, bir HTTP isteği tarafından tetiklenir. İstemci uygulamaları tarafından SignalR hizmetinden belirteç almak için kullanılır ve istemciler bir hub'a abone olmak için bunu kullanabilir. Bu işlev olarak adlandırılmalıdır negotiate. Daha fazla bilgi için bkz. Azure SignalR Hizmeti ile geliştirme ve yapılandırma Azure İşlevleri,

Message.cs

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

Yönergeler

Başlamadan önce:

  • Azure'da sağlanan bir hizmet veri yolu kuyruğunuz olduğundan emin olun.
  • Azure'da sunucusuz modda sağlanan bir SignalR hizmetiniz olduğundan emin olun.
  1. bağlantı dizelerinizi (Service Bus ve SignalR) local.settings.json dosyasına girin.
  2. İSTEMCI uygulamasının URL'sini (SignalR istemcisi) CORS'ye (Çıkış Noktaları Arası Kaynak Paylaşımı) girin. En son söz dizimi için bkz. Azure SignalR Hizmeti ile geliştirme ve yapılandırma Azure İşlevleri.
  3. Service Bus kuyruğunuzun adını Message.cs dosyasındaki service bus tetikleyicisine girin.

Şimdi istemci uygulamasını test etmek için yapılandıralım. İlk olarak çözüm mimarileri GitHub sayfasından örnek kaynakları alın.

SignalR istemcisi

Bu, SignalRFunctionApp tarafından oluşturulan hub'a abone olmak için basit bir .NET Core web uygulamasıdır. Service Bus kuyruğuna alınan iletileri gerçek zamanlı olarak görüntüler. Mobil istemciyle çalışmak için SignalRFunctionApp'ı kullanabilirsiniz, ancak şimdi bu depodaki bu senaryo için web istemcisine bağlı kalalım.

Yönergeler

  1. SignalRFunctionApp'ın çalıştığından emin olun.

  2. negotiate işlevi tarafından oluşturulan URL'yi kopyalayın. Şuna benzer: http://localhost:7071/api/.

  3. URL'yi chat.js dosyasının içine signalR.HubConnectionBuilder().withUrl("YOUR_URL_HERE").build();yapıştırın.

  4. Uygulamayı çalıştırın.

    Web istemcisi SignalR hub'ına başarıyla abone olduğunda durum bağlanır.

SendToQueue.js

Bu node.js betiği Service Bus'a bir ileti göndererek yeni tamamladığınız dağıtımı test edebilmenizi sağlar.

Yönergeler

  1. Düğüm 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 senaryoyla üretim ortamınıza gidebilirsiniz. Ancak Azure hizmetlerinizin ölçeklendirilecek şekilde 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. Kodunuzu Visual Studio'dan Azure İşlevleri yayımlamayı öğrenmek için Yazılım oluşturma kılavuzunu izleyin.

Azure İşlevleri'da Azure Service Bus bağlamalarıyla çalışmayı öğrenin. Azure İşlevleri, service bus kuyrukları ve konuları için tetikleyici ve çıkış bağlamalarını destekler.

Azure İşlevleri'de SignalR Hizmeti bağlamaları kullanarak Azure SignalR Hizmeti bağlı istemcilerde kimlik doğrulaması yapmayı ve gerçek zamanlı iletileri göndermeyi öğrenin. Azure İşlevleri, SignalR Hizmeti’ne yönelik giriş ve çıkış bağlamalarını destekler.