Azure Storage Services – Part 4:Queue Storage

Makale serimizin önceki bölümlerinde Azure Storage hizmetlerinin detaylarını, Blob ve Table storage hizmetlerini inceledik. Bu makalemizde depolama hesabı ile birlikte gelen Blob ve Table dışındaki diğer hizmet olan Queue Storage detaylarını inceleyeceğiz.

Azure depolama hizmetlerinin bir parçası olarak Queue Storage’ı incelemeden önce yazılım dünyasında Queue’nun öneminden biraz bahsetmek faydalı olacaktır. IT Pro olarak bu makaleyi okuyorsanız Queue sizin için çok fazla ifade taşımayabilir ancak gün içerisinde kullandığımız kompleks uygulamaları tasarlayan yazılım mühendisleri, mimarları için Queue’nun önemi oldukça fazla.

Bir markete girdiğinizi ve aldığınız ürünlerle kasaya doğru ilerlediğinizi düşünün. Kasaya vardığınızda yapacağınız şey varsa bir sıraya girmek yada sırayı başlatan olmaktır. Diyelim ki ilk sırada siz varsınız ve kasada aldığınız ürünleri okutmaya başladınız. Bu sırada da 2 farklı kişi daha aynı kasaya ilerledi. Bu noktada siz sıradaki ilk kişi oluyorsunuz. 2 kişiden de önce varan (FIFO – First In First Out) 2.ci olarak arkanızda sıraya girer. 3. kişi ise haliyle sıradaki son kişi olur.

Oluşturduğunuz bu yeni kuyrukta kuyruğa yeni girenler her zaman kuyruğun sonundan kuyruğa dahil olurlar. Kuyruktan başarılı çıkabilenler ise aslında kuyruğa daha önce katılanlar ve kuyruğun önünden işini bitirip çıkanlar olur. Bu senaryoya benzer birçok örneği günlük hayattan verebiliriz.

Yazılım mimarisinde de benzer süreçler için Queue data structure kullanabiliriz. Oluşturduğumuz kuyruktan ilk giren ve dolayısı ile ilk çıkan kişi dequeue fonksiyonunu gerçekleştirmiş olur. Her yeni giren nesne de enqueue fonksiyonunu gerçekleştirir. Queue içerisinde bu iki fonksiyon dışında farklı fonksiyonlar da bulunur. Örneğin size fonksiyonu queue uzunluğunu verir, empty fonksiyonu kuyrukta kimse yok ise true cevabını döndürür.

image

image_4

Aslında bilgisayar bilimlerinde herhangi bir aplikasyon için verimli bir FIFO kuralını uygulamak istediğiniz senaryolarda, queue kullanımı sıklıkla görülür. Örneğin binlerce farklı kullanıcıya hizmet veren bir web sitesi dizayn ettiğimizi düşünelim. Tabii ki kaynaklarınız tüm kullanıcılara aynı anda hizmet vermeye yetmeyecektir. Bu durumda verimli şekilde bir kuyruk yönetimi gerçekleştirmemiz gerekir. Eğer aynı anda 100 kullanıcıya hizmet verecek kaynağımız bulunuyor ise bir kuyruk tasarımı gerçekleştirip kuyruk ile aynı anda 100 kullanıcıya hizmet veren bir yapı tasarlanabilir.

Capture

Aynı senaryo işletim sistemlerinde CPU yönetimi için de düşünülebilir. İşlenmesi gereken görevler düzenlenen poliçeler ile verimli şekilde önceleklendirilir ve işleme alınır.

Yada sinema biletleri, uçak biletlerini aldığınız ve FIFO kuralının acımasızca geçerli olduğu sistemleri düşünelim.

Uygulamaların inşa edilmesinde queue kullanımı aynı zamanda hızlı esneklik özelliklerini de bize kazandırır. Birbirine oldukça bağımlı farklı bileşenleri kullanarak gerçekleştirilen bir çözüm yerine bulut üzerinde queue ile birlikte birbirinden ayrılmış fonksiyonel katmanlar kendilerine dedike edilen görevleri olabildiğinde efektif şekilde gerçekleştirebilir. Diyelim ki var olan uygulamanızda birbirine bağımlı iki bileşeniniz var. Birisi lokal veri merkezinizde diğeri ise bulut hizmeti üzerinde. Bu iki bileşen birbirlerini web servisi aracılığı ile çağırıyor olabilir. Bu noktada bileşenlerden herhangi birisi erişilmez durumda olduğunda sistem tamamı ile hizmet veremez duruma gelir. Ancak bu senaryoda iki bileşen arasındaki iletişimi Azure Queue ile gerçekleştirmek isterseniz yerel veya bulut üzerindeki bileşenlerden birisinde problem olması durumda dahi kuyruk halen gelen mesajları kabul edebilir. Diğer taraf ayağa kalktığı anda kuyruktaki mesajlar işlenmeye devam eder.

Microsoft Azure IaaS ile altyapı hizmetlerini sunmakla birlikte IaaS’dan çok daha önce hizmete sunduğu PaaS ile uygulamaların platform bağımsız çok daha hızlı, güvenli ve esnek şekilde inşa edilmesine imkan verdi. Azure Queue da bu hizmetlerden birisi idi.

Azure Queue mesajlarınızın yönetimi için (enqueue ve dequeue) sunulan bir RESTful hizmetidir. Bunun dışında farklı platformlar üzerinden de (.NET, Java, Ruby, Python vb) kullanılabilir durumdadır. Ancak Windows Azure Queue ile Windows Azure Service Bus Queue hizmetlerini birbirine karıştırmamakta fayda var.

Aralarındaki temel fark için aşağıdaki msdn makalesini inceleyebilirsiniz.

http://msdn.microsoft.com/en-us/library/hh767287.aspx

Diğer makalelerde olduğu gibi Storage Queue hizmetinin kod içerisinden kullanımını ilerleyen makalelerimizde inceleyeceğiz. Bu makalede biraz daha queue mimarisinden bahsetmekte fayda var.

Queue oluşturduktan sonra yapılması gereken işlem queue içerisine mesajları eklemektir. Storage Queue içerisindeki her bir mesajın desteklenen maksimum boyutu 64KB’dir. Siz bir storage account oluşturup diğer makale serilerimizde inceleyeceğimiz gibi queue içerisine msajlarınızı göndermeye başladıktan sonra yine sizin seçiminize göre bu mesajlarınız queue storage içerisinde farklı Azure veri merkezlerine replike olabilir. Bulut teknolojilerinin en büyük artılarından birisi aslında budur. Yalnızca ufak bir ek ücret ödeyerek kuyruk içerisinde gönderdiğiniz mesajlarınız aynı zamanda farklı coğrafi lokasyonlarda yedekli şekilde tutulabilir.

Storage hesabı için seçebileceğiniz bu replikasyon senaryolarını Azure Storage Services – Part 6:Redundancy yazısında inceleyeceğiz.

Queue içerisine mesajlarımızı kimlik doğrulaması gerçekleştirdikten sonra basit bir HTTP POST işlemi ile gönderebiliriz. Gönderilen bu mesajlar 64KB maksimum boyutunda olmasına rağmen queue toplam boyutu 100TB’a kadar çıkabilir. Aslında bu değer Storage Account maksimum değeridir. Aynı zamanda her bir mesaj için Visibility Timeout değeri değiştirilerek kullanıcılara ne zaman gösterileceği seçilebilir.

Aynı şekilde time-to-live attribute değeri ile de bir mesaj kuyruk içerisinde belirtilen TTL süresi boyunca işlenmez yada silinmez ise otomatik olarak silinecektir. Bu değer varsayılan olarak 7 gündür.

2 thoughts on “Azure Storage Services – Part 4:Queue Storage

Leave a Reply

Your email address will not be published. Required fields are marked *

9 + 1 =