Ana içeriğe atla

*MQ (Message Queue) Mantığı

Message Queue Mantığı
Message Queue
Programlama ile ilgilenmiş çoğu kişinin karşılaştığı ve belki de önemsemeden geçtiği konulardan bir tanesi olan MQ yani Message Queue konusudur. Aslında MQ sözünü yada Message Queue sözünü muhtemelen bu haliyle duymamışsınızdır. Genelde bu mantığın uygulandığı MSMQ, ZeroMQ, IronMQ, WebsphereMQ, RabbitMQ hatta cloud message queue olarak Azure tarafından geliştirilen Azure Queues bu alanda ortaya çıka ürünler olduğu için ismini duyma ihtimaliniz çok daha fazla...
Bu uygulamaların hepsinin ortak yönü message queue hatta biraz daha açacak olursak asenkron iletişimi desteklemesidir.
Konunun anlaşılması için asenkron iletişimin de anlaşılmasının çok önemli olduğunu düşündüğüm için konuyu anlatmaya buradan başlayacağım. Devamında ise yukarıda sıraladığım uygulamalardan biri olan RabbitMQ üzerinden Message Queue mantığını anlatmaya çalışacağım. Konuyu RabbitMQ ile anlatmak istememin en önemli nedenlerinden bir tanesi platform bağımsız olması ve hemen hemen tüm programlama dillerini desteklemesidir.

Konunun anlaşılabilmesi için diğer önemli noktalardan bir tanesi de AMQP'nin(Advanece Message Queue Protocol) anlaşılmasıdır. Bu yüzden başta söylemek istiyorum ki konu biraz uzun olacak. Bu makaleyi okurken sıkılmamanız için de bazı konularda kısaca bilgi verip konuyu detaylı anlattığım makalelere link vereceğim.
Yukarıda makaleye giriş yapma açısından ve bir anlamda makale için yol haritası da belirlerken önemli olan konulardan bir tanesi Asenkron İletişimin anlaşılmasıdır. Bunun için de senkron ve asenkron iletişi farkını açıkça ortaya koymakta fayda var.
Senkron iletişimde bir metoda parametre gönderirsiniz ve bu fonksiyon yapmalı olduğu işlemleri yapar ve size bir sonuç döndürür. Muhakkak ki sizin de şimdiye kadar yaptığınız programların çoğu bu mantıkla yazılmıştır. Tabi ki burda threadlerle farklı iş parçacığı olarak çalıştırmaktan bahsetmiyorum. Sonuçta threadlerle de çalışırken yine belirli fonksiyonlara iş yaptırmayı ve sonucu beklersiniz. Asenkron iletişim ise daha çok belirli bir işi yaparken sizden parametreleri alır ve size bu parametreleri aldığına dair bir garanti verir. Zamanı geldiğinde verileri işler ve size sonuç döndürür. Ama bu işlemleri yaparken extradan sizie bekletmez. Aslında bu işlemler için Message Patternler tasarlanmıştır ki bunlardan da en yaygın olarak kullanılanları Fire and Forget, Request Response ve Publise Subcribe'dır. Bu konuların hepsini detaylı olarak anlatacağım için burada detaylarına girmiyorum. Ama önemli olan nokta her zaman eğer bir kanal üzerinden fonksiyon içine parametre gönderiyorsak, cevabı bu kanal üzerinde değil işlem bittikten sonra oluşan yeni kanal üzerinden aktarırız. Örneğin Fire And Forget patterni için önemli olan sadece fonksiyonu tetiklemek iken, Request ve Response patterni mesajı alır, aldığına dair geri mesaj döndürür. Verileri işleyip sonuç aldıktan sonra ise sonucu ayrı ir kanalo üzerinden karşıya iletir.
Yukarıda anlattığım aslında asenkron iletişim temel taşları ve bilinmesi gereken önemli konular. Kısaca bahsettiğim message patternleri ise asenkron iletişimi uygulamak için kalıplardır. Tabi ki bu kalıplara uymak zorundasınız diye bir şey yok.  Ama bu alanda yapılmış ve yılların tecrübesini barındıran bu kalıpların sizin kendi uygulamalarınıza asenkron iletişimi uygulamakta çok faydalı olacağını düşünüyorum. O yüzden bu konuları da incelemekte fayda var.
Kısaca bahsetmiş olsam da zannedersem asenkron iletişimin temel mantığını anlatabilmişimdir. Anlattığım kısmın da birazdan anlatacağım message queue mantığını anlamanız için yeterli olduğunu düşünüyorum. Ama tabi ki bu konular bu kadar anlatımla detaylandırılacak kadar kısa konular değil. O yüzden makale içerisinde verdiğim linklerde konularla alakalı detaylı bilgiler almak isterseniz daha detaylı bilgiler bulabilirsiniz.
Asenkron iletişimi anlattıktan sonra sanırım artık message queue yapısının ne olduğunu ve bu yapının asenkron iletişimle nasıl bir bağı olduğunu açıklamaya çalışalım. Message queue basitçe bir mesaj kuyruğu olduğunu ve uygulamalarınızın haberleşmesi için bir araç olarak görebilirsiniz. Bir uygulamanız bu kuyruğa mesaj yazarken diğer uygulamanız da bu kuyruktan mesajları alarak işleyebilir. Burada mesajı kuyruğa gönderene publisher denilirken, kuyruktan okuyana da consumer denilir. Message queue mantığında en önemli özellik ise bir mesajın kesinlikle kaybolmayacağını garanti etmektir. Örneğin kuyruğa bir mesaj gönderildiğinde bu mesajın gittiğinden emin olmak zorundasınız ve kuyruktan mesaj okunduğunda da bu mesajın kuyruktan kaldırıldığından emin olmak zorundasınız. Tabi ki uygulama geliştiricileri bu anlamda çok sıkıntı yaşamazlar. Ticari uygulamaların çoğunun oluşabilecek hatalar ve mesaj güvenliği için geliştirdikleri bir çok prosedür ve önlemler bulunmaktadır. Oluşabilecek hatalarla ilgili basit örnek vermek gerekirse uygulamanızın kuyurğa bir mesaj gönderdiğini düşünün. Bu mesaj kuyruğa eklenmesine rağmen, bu kuyruktan uygulamanıza ben bu mesajı aldım gibisinden bir cevap gelmese bu mesajın kuyruğa yazılıp yazılmadığından emin olamazsınız. Bu zamanda message queue mantığındaki güvenli mesajlaşma yada kaybolmayan mesaj ilkesini çiğnemiş olursunuz. Ama bu işin sadece altyapısını, yani uygulamalarınızda bunları çözmeniz beklenmez. Yukarıda sıraladığımız uygulamalar örneğin RabbitMQ, ZeroMQ ve başka uygulamaların çoğunda oluşabilecek bu gibi sıkıntıları çözme potensiyalı vardır. Tabi ki, konuyu detaylı incelediğinizde ve bu alanda yazdığım diğer makaleleri okuduğunuzda siz de göreceksiniz ki, MQ mantığının asıl mantığı uygulamalar arasında güvenli mesajlaşmayı sağlamaktır ve güvenli, garanti mesaj yapısı da kurmak o kadar basit bir iş değildir. Oluşabilecek tüm olasılıkları düşünmek bile çoğu noktada yetersiz kalabilir. Bu yüzden yılların tecrübeleriyle oluşturulmuş Message Queue dünyasına hoşgeldiniz diyorum...
Konuyu çok fazla uzatmak istemediğim için ve makale başlığındaki MQ mantığı, yani Message Queue mantığını anlamanız için makalede anlatılanların yeterli olduğunu düşünüyorum. Buradan sonra konuyla alakalı olan diğer makale linkleri de makaleleri yazdığım zaman bloğuma ekleyeceğim. Message Queue mantığında önemli olan iki nokta asenkron iletişim ve güvenli mesajlaşma konularını burada anlatmaya çalıştım. Okuyan insanları da daha fazla sıkmamak için ve fazla laf kalabalığı olmaması açısından konuyla ilgili daha spesifik makalelerle karşınızda olacağım. 

Konuya alakalı sorularınız olursa lütfen sormaktan çekinmeyin. En kısa sürede yanıtlamaya çalışacağım.

Yorumlar

Bu blogdaki popüler yayınlar

Medyan (Ortanca) Nedir? Nasıl Hesaplanır? Nerelerde Kullanılır?

Medyan işlemi olasılık hesaplamalarında sıkça kullanılan bir sayı dizisinin ortalamasını hesaplamak için alternatif yöntemlerden bir tanesidir. Ortanca medyan işleminin diğer adıdır. Matematiksel olarak medyan işlemi bir sayı dizisi küçükten büyüğe sıralayarak ortada kalan elemanı medyan değeri olarak belirleme işlemidir. Örnek verecek olursak: 2, 1, 5, 4, 5, 1, 2, 3, 5 serisi sıralanırsa 1, 1, 2, 2, 3, 4, 5, 5, 5 serisi elde edilir. Bu seri 9 elemanlı olduğundan ortadaki, yani 5. eleman (medyan) olacaktır. 5. eleman 3 sayısıdır. Yani ortanca değeri 3'dür Eleman sayısı tek sayı olan bir seride medyan değerin sırasının hesaplaması şu şekilde formüle edilir. Medyanın Sırası = (Eleman Sayısı + 1) / 2 Bu formülü yukarıdaki örneği uygulayacak olursak; Medyanın Sırası = (9 + 1) / 2 = 5 Veri serisi eleman sayısı bir çift sayı ise bu durumda serinin 2 medyanı olacaktır. Örneğin 2, 1, 5, 4, 5, 1, 2, 3, 5, 4 serisi sıralandığında 1, 1, 2, 2, 3, 4, 4, 5, 5, 5 s

Ağaçlar Kireçle veya Badana İle Neden Boyanır?

Ağaçlar kireçle boyanmasının veya badana yapılmasının hem çevreye hem de doğaya, ağaçlara faydası var. Bu makalede bu geleneği enine boyuna tartışmaya çalıştık. Ağaca zarar veren mikrop ve bakterileri öldürür. Ağacı çok aşarı soğuk havalarda ve çok aşırı sıcak havalarda korur. Ağacın çürümesini ve kurtlanmasını önler. Ağacın gövdesinin alabileceği zararları en az düzeyde düşürmeyi sağlar. Hoş, güzel, hijyenik, temiz pırıl pırıl bir görüntü oluşturur. Ayrıca çok sıcak havalarda da ağacı yanmaya karşı korumak. En büyük etkisi soğuk havalarda ağacı don vurmalarına karşı korumak . Küresel ısınma göz önüne alındığında mevsim değişiklikleri ani don, ani ısı artışları ve azalışları sonucunun doğuracağı etkenler için yararlı etkin bir yöntem. Gövdeden obur dalların çıkmasını azaltmak için sürülür. Kireçleme ağaçları güneş yanığından korumak için yapılıyor. Ağaçlar da güneşten yanabiliyorlar. Bu arada odun dokudaki gözenekleri doldurarak kapattığı için, zararlıların yuv

Azərbaycan Dilində Vurğu Qəbul Etmeyen Şekilçiler

Sözlərdə hecalardan birinin digərlərinə nisbətən daha qüvvətli deyilməsinə heca vurğusu deyilir. Üzərinə vurğu düşən hecaya isə vurğulu heca deyilir. Azərbaycan dilində vurğu adətən söz sonuna düşür. Söz şəkilçi qəbul ederkən vurğu adətən şəkilçinin üzərinə keçir. Məsələn: çiç ə k - çiçəkl ə r - çiçəklərd ə n məkt ə b - məktəbl i - məktəblil ə r - məktəblilərd ə n Buna baxmayaraq dilimizdə bir sıra şəkilçilər var ki onlar vurğu qebul etmirlər. Bu məqalədə Azərbaycan dilində vurğu qebul etməyən şəkilçilər incələnəcək ve bu şekilçilərin hansı hallarda vurğu qebul edib hansı hallarda vurğu qebul etmediyi araşdırılacaqdır. Eyni zamanda bildirmək istəyirəm ki vurğu ilə bağlı daha geniş və ətraflı məlumat üçün Azərbaycan Dilində Vurğunun Praktik Məsələləri adlı məqaləyə də nəzər yetirə bilərsiniz.  1. İsimlərdəki şəxs(xəbərlik) şəkilçiləri Məsələn: müəli'məm müəli'msən müəli'mdir müəli'mik müəli'msiniz müəli'mdirlər Qeyd: -dır4