Azure Service Bus vs Azure Storage Account Queue

By | 25 May 2020

Azure Mesajlaşma Servisleri – Azure Service Bus & Azure Storage Account Queue

Monolitik uygulamalar yerine birbirinden bağımsız bileşenleri olan ve bu bileşenlerin bağımsız şekilde deploy edilebildiği microservice mimarilerinde birimler arası iletişimler mesajlaşma servisleri kullanılarak sağlanır. Azure üzerinde de bu mesajlaşmaları sağlayan ve kullanım amaçlarına göre farklı özellikler barındıran bir kaç mesajlaşma servisi bulunur.

İşim gereği ziyaret edip anlatım yaptığım müşterilerde Azure üzerinde bulunan bu mesajlaşma servislerinin çoğunlukla karıştırıldığını yada tercih konusunda kararsız kalındığını gördüm. Bu sebeple bu yazımda sizlere bu mesajlaşma servislerinin özelliklerinden, kullanım alanlarından,örnek kullanım senaryolarından ve fiyatlandırmalarından bahsedeceğim. Umarım Azure üzerinde bu platform servislerini kullanan kişiler için faydalı bir yazı olur.

Fazla uzun olmaması açısından konuyu iki bölüm olarak ele alacağım. İlk bölümünde sizlere Azure Service Bus’ı ve Azure Storage Queue servisini anlatmaya çalışacağım. İkinci bölümde de Event Grid ve Event Hub servislerini ayrıntılı olarak kullanım senaryoları ile anlatacağım. Şimdiden iyi okumalar.

Mesajlaşma servislerinin temel bileşenleri mesajlar ve event’lerdir. Aslında event’ler de mesajın farklı bir türüdür.

Peki, Mesaj ve Event arasındaki temel farklar nelerdir?

Bu iki birim arasındaki farkları aşağıdaki şekilde özetleyebiliriz.

Message Event
Publisher tarafından raw data mesaj olarak yayınlanır. Durum değişikliği olduğunda üretilen bildirimlerdir.
Publisher consumer’ın mesaj’ı ne yaptığı ile ilgilenir. Publisher event’i üretir. Consumer’ın event ile ne yaptığı ile ilgilenmez. Event ile ne yapılacağına consumer karar verir.
Işlemler async olarak gerçekleşir. Telemetry ve distributed data streaming konularında kullanılır.
Finansal işlemler, E-ticaret işlemleri,Envanter takip mesajları vb durumlarda kullanılır. Event grid ve Event Hub event’ler ile işlem yapan platform servisleridir.
Azure Service Bus ve Azure Storage Queue mesaj birimini kulan platform servisleridir.

Genellikle loosly-coupled olarak isimlendirilen microservice mimarilerinde servisler arası iletişim bu birimler yardımı ile sağlanır.

Azure üzerinde 3 adet ana mesajlaşma Birimi bulunur.

  1. Azure Service Bus
  2. Event Hub
  3. Evet Grid

Birde bunlara ek olarak daha basit operasyonlar için kullanılabilen Azure Storage Queue servisi de mevcuttur. Bu bölümda message kullanan platform servislerini anlatacağım için, Azure Storage Queue’dan ayrıntılı olarak bahsedeceğim.

 

Azure platfromu üzerindeki queue mimarilerine geçmeden önce neden queue mimarilerini kullandığımızı basit bir kaç örnek ile açıklamak istiyorum.

Neden queue yapılarını kullanıyoruz?

Queue mimarilerini kullanmaktaki ana sebep uygulamalara ait çeşitli bileşenler arasındaki bağlantıyı minimuma indirmektir. Örneğin uygulamaya ait birbiri ile veri alış verişi yapan iki bileşen olduğunu var sayalım. Bu bileşenlerden de birisi cloud üzerinde diğeri onpremise üzerinde bulunsun. Eğer bu iki bileşenin queue yapılarının kullanılmadığı bir mimaride birbirleri ile iletişim kurmaları gerekirse, iki bileşenin de online olması gerekir. Eğer bir taraf offline olursa uygulama çalışmayacaktır. Aynı şekilde eğer performans gibi nedenlerden ötürü uygulama scale edilmek istenirse bileşenlerin birbirlerine bağlılığından ötürü bu işlem kolay olmayacaktır.

Aynı örneği queue kullanılan yapı ile karşılaştıracak olursak, bileşenlerden birisi herhangi bir serbepten ötürü offline olursa diğer taraf mesajlarını queue’ya iletmeye devam edecektir. Offline olan taraf tekrar ayağa kalktığında queue’dan mesajları alarak işine devam edecektir. Scaling durumunda ise bileşenlerden birisi iş yüküne bağlı olarak scale olup sayısını arttırdığı zaman queue üzerinden paralel olarak mesajları okuyup performansını koruyabilecektir.

Tabi bu mimarilerde düşünülmesi gereken diğer konu da queue servisinin çalışır ve ulaşılabilir olmasını sağlamaktır. Çünkü verdiğim örnekte bileşenler arasındaki queue servisi belli bir sebepten dolayı offline olursa, uygulama bileşenleri haberleşemeyecektir. Bu sebeple Azure üzerinde tamamen Microsoft tarafından yönetilen Queue servislerinin tercih edilmesi önemlidir.

Queue yapılarına ilişkin bu temel bilgilerin ardından en basit mesajlaşma birimi olan Azure Storage Queue’dan başlayarak diğer kompleks mesajlaşma servislerine doğru ilerleyelim.

Azure Storage Queue’nun temel özellikleri nelerdir?

Azure üzerinde storage account 4 temel birimden oluşur Bunlardan bir tanesi de Queue Storage’tır. Yani temel olarak storage account’un bir parçasıdır. Queue storage’ın kendisine özgü bir URL’i vardır.

Sahip olduğu bu URL’in yapısı aşağıdaki gibidir;

https://storageaccountname.queue.core.windows.net/queuename

Storage account’un diğer tiplerinde olduğu gibi, queue storage üzerinde yapılan tüm aksiyonlar REST API üzerinden çağırılır. Storage üzerinde bulunan bu queue yapısı reliable’dır ancak mesajların sıralı şekilde iletileceği garanti edilmez.

Storage queue üzerinde tutabileceğiniz maximum mesaj boyutu 64KB’tır. 2017-07-29 öncesi versiyonlar için , mesaja ait maksimum time-to-live süresi 7 gündür. Ancak 2017-07-29 ve sonrası versiyonlar için maksimum time-to-live süresi herhangi bir pozitif sayı atanarak konfigüre edilebilir şekilde değişmiştir. Ayrıca gerekli parametreye -1 değeri atanarak mesajın expire olması engellenebilir. Eğer bu konfigürasyon yapılmazsa, varsayılan değer 7 gündür.

Azure storage queue’nun sunduğu diğer bir avantaj da Azure storage’ın bir parçası olmasından ötürü, server side loglamayı desteklemesidir.

Azure storage queue’lar için GB başına ödenen ücret, storage için seçilen replikasyon seçeneklerine göre farklılık göstermektedir. Bunlara ek olarak egress trafik içinde bir ücretlendirme mevcuttur. Ücretlendirmeye ilişkin tablo aşağıdaki gibidir.

Aşağıdaki linki kullanarak Azure Storage Queue’ya ilişkin ücretlendirme hakkında daha ayrıntılı bilgi edinebilirsiniz.

https://azure.microsoft.com/en-us/pricing/details/storage/queues/

Şimdi de Azure üzerindeki daha profesyonel olan ve gelişmiş özellikleri içeren Azure Service Bus isimli yönetilen mesajlaşma servisini inceleyelim.

Azure Service Bus – Daha gelişmiş mesajlaşma servisi

Azure Service Bus bakıldığında tek bir platform servisi gibi görünsede aslında bir ürün ailesidir. Şimdi bu ürün ailesinin elemanlarını kısaca inceleyelim.

  • Service Bus: Tamamen yönetilen bir mesajlaşma servisidir.
  • Service Bus Queue: Point-to-point iletişim için kullanılır. Mesajlar pull modda iletilir.
  • Service Bus Topic: Point-to-Multipoint iletişimler için kullanılır. Publish/subscribe yapısında çalışacak şekilde dizayn edilmiştir.
  • Service Bus Relay: Eğer on-premise üzerinde bulunan bir WCF servisiniz varsa ve Azure Service Bus ile iletişim kurmasını istiyorsanız kullanmanız gereken Azure Service Bus Relay bileşenidir. Genellikle Hybrid senaryolarda tercih edilmelidir.

Temel olarak ASB(Azure Service Bus) mimarisinde bulunan ürünler bu şekildedir. Tabi yapısında bu şekilde alt ürünler bulunduran bir servisin Azure storage queue ile karşılaştırıldığında daha gelişmiş özelliklere sahip olmasını beklemek olağandır 😊. Şimdi bu özelliklerden biraz bahsedelim.

  • One-to-many mimarileri desteklemek amacı ile topic’ler kullanılır.
  • Maximum mesaj boyutu 256KB’tır. ( Azure storage queue’nun 4 katı). Premium tier seçildiğinde maksimum mesaj boyutu 1MB olur.
  • Dead lettering queue özelliği mevcuttur. Bu özellik ile eğer consumer taraf mesajı alma konusunda sorun yaşarsa, mesaj dead letter queue üzerinde tutulmaya devam eder.
  • Dublication Detection özelliği mevcuttur. Bu özellik sayesinde uygulama tarafından bir şekilde aynı mesaj bir den fazla yollanırsa, ASB tarafından fazla olan kopya drop edilir.
  • Peek and lock özelliği mevcuttur. Bu özellik ile mesaj consumer tarafından alınır ancak mesaj ileride kullanılmak üzere queue üzerinde kilitlenir. Bu işlemin ardından mesaj belirlenen kilitli kalma süresi buyunca diğer consumer’lar tarafından erişilebilir olmaz. Sürenin bitmesinin ardından mesaj tekrar erişilebilir hale gelir.
  • Receive and Delete özelliği mevcuttur. Bu özellik ile consumer queue üzerinden mesajı alır ve ardından mesajı queue üzerinden siler.
  • ASB advanced message queue protocol v1 (AMQP) kullanır. Bu protokol kullanılan REST on HTTP/HTTPS protokolleri için bir alternatiftir. Herhangi bir vendor’a ait olmayan open bir protokoldür. Bu sebeple bu protokol kullanılarak geliştirme yapıldığında uygulamalar cross-platform destekler hale gelir. Yani Azure üzerinde bu protokolü kullanarak geliştirdiğiniz uygulamayı daha sonra onpremise üzerine indirdiğinizde yada farklı bir cloud platformuna geçiş yaptığınızda yine bu protokolü destekleyen araçlar ile sorunsuz şekilde uygulamanız çalışmaya devam eder.
  • AMQP TCP protokolünü kullanır ve bu sebeple güvenilir bir iletişim altyapısı sunar. Microsoft ve non-Microsoft sistemler ile uyumlu şekilde çalışır. Ayrıca birden çok client library’i de destekler.

Azure Service Bus servisi Azure platformu üzerinde Basic, Standard ve Premium olarak üç farklı şekilde hizmete sunulmuştur. Bu üç seviye ve desteklenen özellikleri aşağıdaki gibidir.

Daha ayrıntılı bilgi için aşağıdaki link’ten faydalana bilirsiniz.

https://azure.microsoft.com/id-id/pricing/details/service-bus/

Azure üzerinde bulunan bu iki mesajlaşma servisini temel özellikleri ile el aldıktan sonra en belirgin özellikleri ile karşılaştıralım.

Azure Storage Queue vs Azure Service Bus

Azure Storage Queues Service Bus Queues
Basit mesajlaşma operasyonları için uygundur. Daha gelişmiş özellikler barındıran gelişmiş mesajlaşma operasyonları için uygundur.
Mesajların sıralı iletilmesi konusunda garanti vermez. Mesajlar FIFO patern’i ile iletilir. Mesajların sıralı iletileceğinin garantisini verir.
Maksimum Queue size’ı 500TB’tır. Queue size’ı maksimum 80GB’tır.
Maksimum mesaj boyutu 64KB’tır. Maksimum mesaj boyutu standad tier için 256KB, premium tier için 1MB’tır.
Queue sayısı sınırsızdır. Service namespace başına 10000 queue oluşturulabilir.
Eş zamanlı client sayısı sınırsızdır. Eş zamanlı client sayısı sınırsızdır. (Eğer TCP protokol’ü üzerinden bağlanılıyorsa bu değer 100’dür)
Tüm queue operasyonları için server side loglama kullanılması gerektiğinde kullanılmalıdır. AMQP protokol desteği ihtiyacı olduğunda kullanılmalıdır.
Uygulama hali hazırda storage account ile entegre olduysa, kolaylıkla kullanılabilir. Kuyruğu devamlı kontrol etmek zorunda kalmadan mesaj almayı destekler.

Azure Storage Queue’yu hangi durumlarda kullanmalıyız?

Azure service bus queue gerek gelişmiş özellikleri gerekse fiyatından dolayı gelişmiş iş yükleri için uygundur. Ancak eğer mesajlaşma servisine ihtiyaç duyuyorsanız ve Azure storage queue’nın sunduğu özellikler uygulamanız için yeterliyse, ASB kullanmanıza gerek yoktur. Azure storage queue’lar uzun süren async tasklar için uygundur. Örneğin bir işlem sonrasında uygulamanın bir döküman oluşturup bunu db’ye atması gerekiyorsa ve uygulama bunu işlemin ardından yapmaya çalışıyorsa, bu işlem uygulama performansını negatif yönde etkileyecektir. Bunun yerine bu task’ın async olarak arka planda çalışması uygulamanın bu task’ı beklemesi zorunluluğunu ortadan kaldıracaktır. Yani yapılan İşlem sonrasında data encapsulate edilip JSON formatında mesaja içerik olarak eklendikten sonra Azure storage queue’ya gönderilebilir. Ardından başka bir servis yardımı ile mesaj alınır ve database’e yazma işlemi yerine getirilebilir. Böylece bu iş yükü uygulama performansını etkilemeden arka planda halledilmiş olur. İşte bu tarz arka planda çalışacak basit tasklar için Azure queue storage’lar oldukça uygundur. Ayrıca maliyetleri de ASB’ye göre oldukça düşüktür.

Sonuç?

Sonuç olarak mesajlar üzerinde basit get,put,delete ve peak operasyonları yapılacaksa, yüksek miktarda mesaj saklamak ve yönetmek gerekiyorsa , server side logging ihtiyacı varsa Azure storage queue ihtiyaçlarınızı karşılamaya yetecektir.

Ancak mesajlaşma alt yapısında gelişmiş özelliklere ihtiyaç duyuyorsanız (Point-to-multipoint iletişim, dead lettering, dublication detection vs.), daha fazla kontrol sahibi olmak istiyorsanız tercih etmeniz gereken mesajlaşma servisi Azure Service Bus’tır.

Bir sonraki bölümde Event grid ve Event Hub ile devam ediyor olacağım.

Kaynak : https://docs.microsoft.com/en-us/azure/storage/queues/storage-queues-introduction

Kaynak2: https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-premium-messaging

Kaynak3: https://www.todaysoftmag.com/article/1260/what-messaging-queue-should-i-use-in-azure

Kaynak4: https://app.pluralsight.com/player?course=microsoft-azure-messaging-architecture-designing

Kaynak5: https://www.c-sharpcorner.com/UploadFile/fe6121/deep-dive-into-azure-storage-queue-vs-azure-service-bus-queu/

Leave a Reply