RabbitMQ ve AMQP protokolü: seni de dinleyeceğim, yeter ki sıranı bekle
Aynı anda gelen istekler makinenin belleğini yiyordu. Mesaj kuyruğunun bunu nasıl çözdüğü, AMQP ve RabbitMQ tam olarak ne.
İçindekiler

Merhabalar,
Bu yazıyı yazmamın sebebi aylar önce bir problemle karşılaşmam ve bu problemi de yaygın kullanılan çok güzel bir çözümle aşmamdır. Bu yaygın çözümü kısa bir şekilde paylaşmak istedim ki, benim gibi henüz bu konularda tecrübesiz arkadaşlar da öğrensin.
Problem
Aylar önce hobi olarak yaptığım bir projede; gelen istekler (request) projenin çalıştığı makinede aşırı ram tüketimine yol açıyordu. Yüksek seviyede video encoding ve audio encoding işlemleri mevcuttu. Bundan ötürü belli bir sayıdan fazla istek geldiğinde makine ya da projede bir patlak ortaya çıkıyordu. Sorunumuzu kısaca isteklerin aynı anda işleme girmesi olarak belirtebiliriz.
Çözüm
Bundan dolayı internette çözümler araştırdım ve kod tarafında FIFO (First In First Out), LIFO (Last In First Out) gibi çözümler de yapabileceğimi öğrendim. Biraz daha araştırdığımda ise sıralama protokolleri ve AMQP protokolü (Advanced Message Queuing Protocol, Gelişmiş Mesaj Sıralama Protokolü) gibi bir kavramla karşılaştım. Sonrasında ise sürekli duyduğum ama ne işe yaradığını tam olarak bilemediğim RabbitMQ ile karşılaştım.
AMQP low level programlanmış bir protokol iken RabbitMQ bu protokole otomatik entegre olabilen bir “Message Queuing, Mesaj Sıralama” web uygulamasıdır. FTP ve FileZilla arasındaki bağıntıyı AMQP ve RabbitMQ arasında da kurabiliriz diye düşünüyorum sistemi anlamak açısından. P2P ile Torrent uygulamalarını da ekleyebiliriz bu örneklem düzlemine.
Sizlere AMQP ve RabbitMQ’dan yüzeysel olarak bahsetmek isterim.
Amqp nedir, nasıl doğmuştur…

Advanced Message Queuing Protocol olarak da yazılabilecek protokol. temel olarak kuyruğa almanız gereken veya bunun size yararı dokunabilecek mesajları, spefisik olarak belirlediğiniz servislere sırasıyla iletmenizi sağlayan bir uygulama.
JP Morgan, Goldman Sachs, Barclays, Bank Of America gibi finans şirketleriyle Microsoft, VMware, Red Hat, Cisco gibi bt şirketlerinin ortak çalışma grubu oluşturmasıyla geliştirilmiş teknoloji. Aslında ilk olarak JP Morgan 2003’te tek başına başlıyor bu işe fakat sonradan bir protokol haline getirmek amacıyla 2005 yılında bir çalışma grubu kuruluyor. Teknolojinin gelişiminde finans sektörünün önemini açıklayan bir başka teknoloji aslında.
İnternet sitelerinden aldığınız neredeyse her üründe kullandığımız bir protokol.
RabbitMQ, Bana Ver Ben Sıraya Koyarım Diyen Ağabeyimiz…

AMQP protokolünü de kullanabilen message queue sistemi diyebiliriz. Örnek bir kullanımının resmini çizecek olursak:
1-) Bir queue servisimiz vardır ve bu queue servisi gelen istekleri farklı queue’lara ayrıştırarak yollar ve bu istekler RabbitMQ’da birikmektedir.
2-) RabbitMQ ise bu istekleri sıraya koyar ve sürekli olarak takibini yapar. Sistemlerimiz çalışmasa bile bu istekleri depolamaktadır ve veri kaybına uğramayız.
3-) RabbitMQ’yu dinleyen bir servisimiz vardır ve bu queue’ya alınmış istekleri istenilen konfigürasyonda oluşturulan sırayla gerçekleştirir.
Bankacılık uygulamalarından tutun, web sitelerin ve mobil uygulamaların mail gönderimine kadar birçok yerde kullanılmaktadır. RabbitMQ’yu avantajlı kılan şey ise oldukça kolay bir development süreci sağlamasıdır. Queue sistemlerini teorik olarak bilen birisinin RabbitMQ’yu anlaması ve kavraması yaklaşık birkaç saat alacaktır. Ayrıca “docker swarm” ile birlikte scalable servisler de oluşturmanıza fayda sağlar. Gelen istek sayısına göre consumer (sıralanan istekleri işleme koyacak dinleyici) sayısını ayarlamaya sağlar. Bir nevi otomatize edilmiş loadbalancer gibi düşünebilirsiniz. Yaklaşık 3-4 senedir profesyonel olarak yazılımcıyım fakat öğrendiğime bu kadar sevindiğim sanırım Docker olmuştur. Ondan sonra da bu basit ama vazgeçilmez queue sistemlerini öğrenmek oldukça vizyon kattı.
Sizlere en çok yararlandığım videoyu atmak isterim. Aşağıdaki 10 dakikalık kısa videoyu izlerseniz kesinlikle en iyi şekilde anlarsınız.
Bundan sonra yapmanız gereken tek şey RabbitMQ dokümantasyonunu okumak. Umarım işinize yarayan bir yazı olmuştur.
Esenlikler dilerim…