Mesaj Kuyruklama (Message Queue) Nedir?
AMQP (Advanced Message Queuing Protocol) Nedir?
RabbitMQ’nun Kısaca Tarihçesi ve Gelişimi
Mesaj Odaklı Mimarinin Avantajları

Mesaj Kuyruklama (Message Queue) Nedir?

Mesaj Kuyruklama, iki veya n tane sistem arasında asenkron (asynchronous) iletişim sağlamak için kullanılan bir yöntemdir. Geleneksel mimarilerde çoğunlukla senkron (synchronous) iletişim kullanılır; bu istemcinin (client) bir istekte bulunup hemen yanıt beklediği ve yanıt gelene kadar da bekleme işlemini sürdürür. Yüksek trafikli sistemlerde işlemler yada uzun süren süreçler söz konusu olduğunda senkron (synchronous) iletişim mimariyi zorlar, performans sorunlarına ve gecikmelere neden olabilir ve sistemler arasındaki bağımlılıkları artırır.

Mesaj Kuyruklama yaklaşımında ise üretici (producer) bir mesajı kuyruğa atar ve hemen işlemini tamamlamış olur. Mesaj kuyruğunda bekleyen bu mesajı, tüketici (consumer) adı verilen sistem veya servis, kendi uygun zamanında çekerek işler. Böylece;

  1. Load Balancing (İş yükü dengelenir):
    · Farklı hızlarda çalışan hizmetler, kendi tempolarına göre mesajları tüketebilir.
  2. Loose Coupling (Gevşek bağımlılık):
    · Servisler birbirlerine doğrudan bağlı olmak yerine, kuyruk üzerinden haberleşir.
  3. Asynchrony / Asynchronous Communication (Asenkronite kazanılır):
    · Üreticinin tüketiciyi beklemesine gerek kalmaz, uygulama parçaları daha az bloklanır.
  4. Reliability Increases (Güvenilirlik artar):
    · Mesajların kuyrukta saklanabilmesi sayesinde geçici ağ kopmaları ya da hizmet kesintileri sırasında veri kaybı en aza iner.

AMQP (Advanced Message Queuing Protocol) Nedir?

AMQP (Advanced Message Queuing ProtocolGelişmiş Mesaj Sıralama Protokolü), bu protokol ilk olarak finans sektöründeki yüksek performans, güvenlik ve güvenilirlik ihtiyaçlarını karşılamak amacıyla tasarlanmıştır. Mesaj tabanlı sistemler arasında güvenilir, birlikte çalışabilir ve açık standartlara dayanan bir iletişim protokolüdür. Bu protokolün AMQP’nin temel bileşenleri şunlardır:

  1. Connection (Bağlantı)· AMQP broker (örneğin RabbitMQ) ve uygulamalar arasında kurulan TCP bağlantısına denir.
  2. Channel (Kanal)
    · Bağlantı (Connection) üzerinde oluşturulan mantıksal iletişim hatlarıdır.
    · Tek bir TCP bağlantısı üzerinde birden çok kanal açarak çoklu iletişim sağlanır.
  3. Exchange (Değişim Noktası)
    · Gelen mesajları belirli kurallara göre ilgili kuyruklara yönlendiren bileşendir.
    · Farklı exchange tipleri (direct, topic, fanout, headers) sayesinde farklı yönlendirme mekanizmaları uygulanır.
  4. Queue (Kuyruk)
    · Mesajların bekletildiği, tüketilmeyi beklediği yerdir.
    · Exchange, routing key (yönlendirme anahtarı) ve binding’ler ile doğru kuyruğa mesaj aktarımı yapılır.
  5. Binding (Bağlantılama)
    · Exchange ile queue arasındaki ilişkileri tanımlar.
    · Exchange üzerindeki mesajın hangi kuyruğa gideceğini belirleyen kurallardır (routing key aracılığıyla).
  6. Message (Mesaj)
    · Kuyruklarda depolanan, üretici (producer) tarafından gönderilen ve tüketici (consumer) tarafından tüketilen veri paketleridir.
    · Mesaj gövdesi (body) ve ek özellik bilgileri (header, properties) içerir.
  7. Producer (Üretici)
    · Mesajları üreten, exchange’e gönderen uygulama ya da servistir.
Bu bileşenler, AMQP ile uyumlu bir mesaj altyapısında birlikte çalışarak güvenilirölçeklenebilir ve esnek bir mesajlaşma sistemi kurmanıza olanak tanır. RabbitMQ, AMQP 0.9.1 sürümünü uygular ve bu protokol sayesinde farklı dillerde yazılmış sistemler arasında standart bir yöntemle veri alışverişi yapmak mümkün olur.

RabbitMQ’nun Kısaca Tarihçesi ve Gelişimi

RabbitMQ open source bir projedir, Repository Linki

· Başlangıç ve Geliştiren Şirket: RabbitMQ, 2007 yılında LShift ve Rabbit Technologies tarafından geliştirilmeye başlandı.

· Satın Alma Süreçleri: Daha sonra VMware tarafından satın alındı ve devamında Pivotal çatısı altına girdi. Son dönemde de VMware’in bulut çözümleri (Tanzu vb.) içerisinde konumlanıyor.

· Açık Kaynak ve Topluluk Desteği: RabbitMQ, açık kaynak kodlu bir proje olması sayesinde dünya çapında geniş bir kullanıcı ve geliştirici kitlesine sahiptir. Her sürümde düzenli olarak hata düzeltmeleri, performans iyileştirmeleri ve yeni özellikler eklenir.

· Çeşitli Protokol Desteği: RabbitMQ, asıl olarak AMQP’yi kullanmakla beraber STOMP veya MQTT gibi farklı protokolleri de eklentiler aracılığıyla destekler.

Mesaj Odaklı Mimarinin Avantajları

Geleneksel monolitik veya senkron (synchronous) iletişimli sistemlerde, servisler arasında doğrudan HTTP REST çağrıları yapılır. Bu durumda zamanlama sorunları, bağımlılık artışı ve performans darboğazları ortaya çıkabilir. Mesaj odaklı mimari (Message-Driven Architecture), sistem bileşenleri arasındaki iletişimi gevşek bağlı (Loose Coupling) ve asenkron (asynchronous) bir şekilde gerçekleştirir. Mesaj odaklı mimarilerde şu avantajlar belirgin şekilde ön plana çıkar:

  1. Loose Coupling (Gevşek Bağımlılık)
    · Servisler, doğrudan birbirlerine bağlı kalmadan kuyruklar (queue) veya broker’lar aracılığıyla iletişim kurar.
    · Bir servisin çalışmaması veya yavaşlaması diğer servislerin çalışmasını doğrudan etkilemez.
  2. Load Balancing (İş Yükü Dengelenmesi)
    · Mesajlaşma kuyrukları, gelen istekleri dengeleyerek tüketicilerin (consumers) kendi hızlarında mesaj işlemelerine izin verir.
    · Ani trafik artışlarında sistem geneli yerine yalnızca kuyruk üzerindeki iş yükü artar ve bu durum daha kontrollü şekilde yönetilir.
  3. Asynchrony (Asenkron İletişim)
    · Üreticiler (producers) ve tüketiciler (consumers) eşzamanlı çalışmak zorunda değildir. Üretici, mesajı kuyruğa bırakarak hızlıca yoluna devam edebilir.
    · Tüketiciler, hazır olduklarında mesajları kuyruktan alıp işleyebilir.
  4. High Scalability (Yüksek Ölçeklenebilirlik)
    · Mesaj odaklı sistemlerde ek tüketici eklemek veya tüketicileri yatayda çoğaltmak genellikle kolaydır.
    · Böylece trafik arttığında ek kaynaklar devreye alınarak sistemin performansı korunabilir.
  5. Reliability & Durability (Güvenilirlik ve Dayanıklılık)
    · Mesajlar, kalıcı (durable) kuyruklarda saklanarak, beklenmeyen kesintilerde veri kaybının önüne geçilir.
    · Otomatik tekrar deneme (retries) ve onaylama (acknowledgement) mekanizmaları, mesajın hedefe ulaşmasını garanti altına alır.
  6. Easy Integration (Kolay Entegrasyon)
    · Farklı platform ve teknolojideki servisleri ortak bir mesaj protokolü ve kuyruk sistemi üzerinden entegre etmek daha az çaba gerektirir.
    · Tek bir standart ara yüz (örneğin AMQP protokolü veya REST tabanlı bir mesaj API’si) kullanarak sistemleri birlikte çalıştırmak mümkün olur.
  7. Event-Driven Support (Olay Tabanlı Mimarinin Desteklenmesi)
    · Sistem, gerçekleşen olaylara anında (ya da gecikmeli) tepki verecek şekilde tasarlanabilir. Bu da gerçek zamanlı veya yarı gerçek zamanlı uygulamaların geliştirilmesini kolaylaştırır.
    · Olaylar dağıtılmış servisler arasında paylaşıldığından, parçaların birbiriyle senkron olmak zorunda olmadığı daha esnek bir yapı elde edilir.
  8. Maintainability & Extensibility (Bakım ve Geliştirme Kolaylığı)
    · Servislerin sorumluluk alanları net bir biçimde belirlenir ve birbirlerini doğrudan çağırmak yerine mesaj kuyrukları aracılığıyla haberleştikleri için kod bağımlılıkları azalır.
    · Yeni özellikler eklemek veya mevcut servisi güncellemek, diğer bileşenlerin çoğunu etkilemeden gerçekleştirilebilir.
Bu avantajlar sayesinde mesaj odaklı mimari, yüksek performans (high performance), ölçeklenebilirlik (scalability) ve esneklik (flexibility) gerektiren kurumsal uygulamalarda (enterprise applications) sıklıkla tercih edilir.

“Giriş ve Temel Kavramlar” bölümünde, RabbitMQ’yu anlamak için önce mesaj kuyruklama kavramını ve AMQP protokolünü anlayıp tanımladık. Ve sonrasında, RabbitMQ’nun nasıl ortaya çıktığı ve günümüzde hangi aşamalara ulaştığı üzerinde bilgiler edindik. Ve mesaj odaklı mimarilerin sunduğu avantajları maddeledik.

Bir sonraki chapter’da, RabbitMQ Mimari Bileşenleri (Broker, Exchange, Queue, Binding, Routing Key vb.) gibi konulara geçerek, kuyruk yapısının detaylarını ve nasıl çalıştığını ayrıntılı biçimde ele alacağız. Bu temel bilgilere hakim olmak yazı dizisi ilerledikçe derinleşen konuları daha iyi anlamamıza rehber olacaktır.