İleti kuyrukları

Tamamlandı

İleti kuyruğu, işlemler arası iletişim (IPC olarak da bilinir) için veya bir uygulamanın çeşitli bileşenleri arasında ya da uygulamalar genelinde kullanılan bir tekniktir. İleti kuyrukları, ileti geçirmeyi etkinleştirmek için bir protokol veya arabirim sağlar.

Tek bir makinedeki işlemler arası iletişim için ileti kuyrukları, UNIX <sys.msg.h> ve POSIX mqueue.h sistem kitaplıkları aracılığıyla kullanıma sunulur ve burada hem zaman uyumlu hem de zaman uyumsuz modda kullanılabilir. Zaman uyumlu iletide, ileti gönderilirken, alıcı tarafından alındığı onaylanıncaya kadar gönderme veya alma işlemlerinin engellenmesi gerekir. Zaman uyumsuz iletiler, gönderme veya alma işlemlerini engellemez ve gecikmeli teslim için arabelleğe alınabilir.

Birden çok makineye yayılan uygulamalarda, IBM WebSphere MQ, Java Message Service (JMS) ve RabbitMQ gibi birçok özel ve açık kaynak ileti kuyruğu sistemi geliştirilmiştir. Tüm bu sistemler, ileti gönderme, yönetme ve alma yeteneği sağlar.

İleti kuyrukları devreye alındığında, uygulama tasarımı daha da karmaşık hale gelebilir ve geleneksel istek ve yanıt mesajlaşmasına kıyasla yönetilmesi gereken hizmet sayısında artış olabilir. Ancak belirli bir ölçekte ve akış işleme gibi uygulamalar için, ek karmaşıklığı ve ölçeği yönetmek için dağıtılmış ileti kuyruğu sistemleri gerekir.

An interface connects to senders (or producers), which create messages, and to receivers (or consumers), which can receive the messages.

Şekil 1: Arabirim, iletileri oluşturan gönderenlere (veya üreticilere) ve iletileri alabilen alıcılara (veya tüketicilere) bağlanır.

İleti kuyruklarının özellikleri

İleti kuyrukları ve bunların sunduğu yenilikler, geleneksel RPC ve istek-yanıt mekanizmalarıyla karşılaştırılarak anlaşılabilir ve beğeni kazanabilir. Bir ileti kuyruğunun birincil özellikleri şunlardır:

Depolama: Yuvalar üzerinden temel TCP ve UDP protokollerini kullanan geleneksel istek ve yanıt sistemlerinden farklı olarak, ileti kuyrukları iletileri genellikle bir hedef işlem tarafından okunana veya ileti kuyruğundan açıkça kaldırılana kadar bir tür arabellekte depolar.

Zaman uyumsuzluk: İstek ve yanıt sistemlerinin aksine, iletilerin arabelleğe alınması, ileti kuyruklarının uygulamalarda zaman uyumsuzluk derecesini ortaya çıkararak kaynak işlemlerin iletileri göndermesine ve hedef işlemler bunları işlemek üzere alırken kuyrukta birikmesine olanak tanır. Böylece kaynak işlem veya hedef işlem hatası ya da aralıklı bağlantı gibi belirli hata senaryolarında uygulamaların çalışmasına olanak sağlanır.

Yönlendirme: İleti kuyrukları, birden çok işlemin aynı kuyruktaki iletileri okuyabildiği veya yazabildiği, yayın veya tek noktaya yayın iletişim paradigmalarına olanak sağlayan yönlendirme işlevi de sağlayabilir.

İleti kuyruklarının avantajları

İleti kuyruğunun birincil avantajı, dağıtılmış bir uygulamada çeşitli varlıklar arasında gevşek bağlantı sağlamasıdır. Böylece işlem hatalarına karşı daha yüksek hataya dayanıklılık sağlayan zaman uyumsuz, engelleyici olmayan iletişime imkan tanınır.

Message queues provide an interface that allows for programs to communicate with each other.

Şekil 2: İleti kuyrukları, programların birbirleriyle iletişim kurmasını sağlayan bir arabirim sağlar.

  • Programlar arasında doğrudan bağlantı yok: İleti kuyruğa alma, dolaylı programdan programa iletişim sağlar. Gönderenlerin, ileti alıcılarını ve ileti alıcılarının da gönderenleri mutlaka bilmesi gerekmez. Böylece iletileri yönlendirme mantığına (ve büyük ihtimalle çalışmaya) ileti kuyruğu sistemi tarafından karar verilmesi sağlanır.
  • Programlar arasındaki iletişim zamandan bağımsız olabilir: İleti kuyrukları genellikle iletileri programlar arasında arabelleğe alır, böylece iletileri göndermek veya almak için yürütmelerini engellemeleri veya kesintiye uğratmaları gerekmez. Başka işler yapabilir ve bir ileti geldiğinde veya daha sonraki bir zamanda yanıtı işleyebilir. Bir mesajlaşma uygulaması yazarken, programın ne zaman ileti gönderdiğini veya hedefin iletiyi ne zaman alabildiğini bilmeniz (ya da bunu dert etmeniz) gerekmez. İleti kaybolmaz; hedef tarafından işlenmeye hazır oluncaya kadar kuyruk yöneticisi tarafından tutulur. İleti bir program tarafından kaldırılıncaya kadar kuyrukta kalır. Başka bir deyişle, gönderme ve alma programları ayrılmıştır; gönderen, alıcının iletiyi aldığını onaylamasını beklemeden işlemeye devam edebilir. İleti gönderildiğinde hedef uygulamanın çalışıyor olması bile gerekmez. Başlatıldıktan sonra iletiyi alabilir.
  • Çalışma, küçük, bağımsız programlar tarafından gerçekleştirilebilir: İleti kuyruğa alma, küçük, bağımsız programlar kullanmanın avantajlarını kullanmanıza olanak tanır. Bir işin tüm parçalarını sırayla gerçekleştiren tek bir büyük program yerine işi birkaç bağımsız küçük programa yayabilirsiniz. İsteme programı, ayrı programların her birine iletiler göndererek her birinin işlevlerini gerçekleştirmelerini ister. Her program tamamlandığında sonuçlar bir veya daha fazla ileti olarak geri gönderilir.
  • İletişim olaylar tarafından yönlendirilebilir: Programlar kuyrukların durumuna göre denetlenebilir. Örneğin, bir programı, bir kuyruğa ileti geldiği anda başlatılacak şekilde düzenleyebilirsiniz. Veya örneğin, kuyrukta belirli bir önceliğin üzerinde 10 ileti veya kuyrukta herhangi bir öncelikte 10 ileti oluncaya kadar programın başlatılmamasını da belirtebilirsiniz.
  • Uygulamalar iletiye öncelik atayabilir: Bir program iletiyi kuyruğa yerleştirdiğinde iletiye öncelik atayabilir. Böylece kuyrukta yeni iletinin ekleneceği konum belirlenir. Programlar, iletilerin kuyruktaki sırasına göre kuyruktan iletileri alabileceği belirli bir iletiyi de alabilir. (Bir program, daha önce gönderdiği bir isteğe verilen yanıtı arıyorsa belirli bir iletiyi almak isteyebilir.)
  • Kurtarma desteği: Birçok ileti kuyruğu, hata sırasında kuyruktaki durum ve iletilerin kurtarılmasını sağlayan kalıcılık ve günlük kaydı sunar.
  • Birden çok kuyruk: Bazı sistemler, uygulama geliştiricisi tarafından tanımlanıp yapılandırılabilir birden çok kuyruğa izin verir. Böylece iletilerin bir yayımcı veya abone ilişkisine dayalı olarak gerekli varlıklara yönlendirilmesi sağlanır. Apache Kafka buna bir örnektir.
  • Ölçeklenebilirlik kolaylığı: İleti kuyrukları, iletişim trafiğini ve uç noktaları ölçeklendirmenin ve yönetmenin daha zor olduğu sıkı bir şekilde bağlanmış sistemlerin aksine, ileti yükündeki artışla başa çıkmak için yatay olarak ölçeklendirilebilir.

Bilgilerinizi kontrol edin

1.

Aşağıdakilerden hangisi, ileti kuyruklarının, geleneksel mesajlaşma yaklaşımlarına kıyasla sunduğu bir avantaj değildir?