Pub/Sub Nedir? Yayınla-Abone Ol Mesajlaşma Deseni
Sözlük

Pub/Sub Nedir? Yayınla-Abone Ol Mesajlaşma Deseni

Hazırlayan: Mindset Institute EditörlüğüGüncellendi: 3 dk okuma

Pub/sub, mesajı gönderen servisle onu işleyen servisleri birbirinden ayırır. Yayıncı bir olay duyurur; ilgilenen herkes kendi kopyasını alır ve ne yapacağına kendisi karar verir.

Bir bakışta

  1. Yayıncı, abonelerini tanımaz. Mesaj bir konuya gönderilir; kimin dinlediği yayıncıyı ilgilendirmez.
  2. Her abone kendi kopyasını alır. Aynı olaya birden çok servis bağımsız olarak tepki verebilir.
  3. Kuyruktan farkı mesajın kaç kişiye gittiğidir. Kuyrukta her mesajı tek bir işçi alır, pub/sub'da her abone alır.
  4. Gevşek bağlılık, yeni tüketici eklemeyi kolaylaştırır. Yayıncının kodunu değiştirmeden yeni bir abone bağlanabilir.

Pub/sub nedir

Yayınla-abone ol (publish-subscribe, pub/sub), mesaj gönderenle mesaj alanı birbirinden ayıran bir mesajlaşma desenidir. Gönderen taraf mesajı doğrudan alıcıya değil, bir konuya (topic) yayınlar. İlgilenen taraflar o konuya abone olur ve mesajları alır.

Bu yaklaşımın özü eşzamansız olmasıdır. Yayıncı, mesajın nasıl ve ne zaman işleneceğini beklemez; bir uzak servisi çağırıp yanıt bekleyen yapının tersine, mesajı bırakır ve işine devam eder. Böylece yayıncı ve aboneler birbirinden bağımsız çalışır ve sistem daha esnek hâle gelir.

Konu, abonelik ve mesaj yolu

Bir pub/sub sisteminde mesajın izlediği yol şöyledir: yayıncı mesajı konuya yazar, her abonelik o konudan bir kopya alır ve aboneye iletir. Teslim biçimi sisteme göre değişir; bazı sistemler mesajı aboneye iter, bazıları abonenin gelip almasını bekler.

Bir konunun birden çok aboneliği olabilir. Her abonelik bağımsız ilerler: biri yavaşlarsa diğerleri etkilenmez. Aynı abonelik altında birden çok işçi çalıştırarak yükü paylaşmak da mümkündür; bu ayrıntı aracın dokümantasyonuna göre değişir.

Örnek: sipariş oluştu olayı

Bir e-ticaret sisteminde sipariş servisi "sipariş oluştu" olayını bir konuya yayınlar. Stok servisi stoğu düşürür, fatura servisi fatura keser, bildirim servisi müşteriye e-posta gönderir. Hepsi aynı olaydan beslenir, ama birbirini tanımaz.

Yarın bir de analitik servisi eklenecekse, yayıncının kodunda değişiklik gerekmez; yeni servis konuya abone olur. Pub/sub'ın asıl değeri budur: yeni tüketici eklemek, mevcut sistemi yeniden yazmayı gerektirmez.

Kuyruk mu, pub/sub mı

Mesaj kuyruğunda her mesaj yalnızca tek bir tüketici tarafından işlenir; amaç, işi işçiler arasında paylaştırmaktır. Pub/sub'da ise aynı mesaj birden çok bağımsız aboneye gider; amaç, bir olayı ilgili herkese duyurmaktır.

Çoğu araç iki davranışı birleştirmeye de izin verir: her abonelik ayrı bir kuyruk gibi çalışır ve içinde işçi havuzu bulunabilir. Bu yüzden asıl karar, kaç farklı servisin aynı olaya tepki vereceği sorusudur.

Şekil 1

Kaç farklı servis aynı mesajı işleyecek?

Mesajı kimler işleyecek?
  1. Her mesajı yalnız bir işçi işlemeliMesaj kuyruğuİş, işçiler arasında paylaşılır.
  2. Birçok bağımsız servis aynı olaya tepki verecekPub/subHer abone kendi kopyasını alır.
  3. Hem bağımsız servisler hem iş paylaşımı gerekiyorAbonelik başına işçi havuzuHer abonelik kendi içinde yükü dağıtır.
Kaynak: Sayfa içeriğiMindset Institute

Dikkat edilecekler

Pub/sub gevşek bağlılık getirir, ama bedeli vardır. Mesaj sırası, teslim garantisi ve tekrar teslim davranışı araca göre değişir; abone mesajı birden fazla alabilecek durumlara hazırlıklı olmalıdır. Bu nedenle işleme adımları tekrar çalıştırıldığında zararsız olacak şekilde, yani idempotent tasarlanır.

Bir diğer konu, olayın şemasıdır. Abone sayısı arttıkça olay biçimini değiştirmek zorlaşır; bu yüzden olay tasarımı ve şema evrimi baştan düşünülmelidir. Hata alan mesajlar için ayrı bir bekleme alanı planlamak da sık uygulanır.

Mindset programlarında pub/sub

Google Cloud Pub/Sub ile Olay Akış Mimarisi programı konu ve abonelik modellerini, teslim garantilerini ve sıralamayı, hata yönetimini ve entegrasyon senaryolarını işler. Event-Driven Mimari programı ise üretici ve tüketici tasarım desenleri ile mesaj aracısı seçimine odaklanarak bakışı belirli bir üründen bağımsız genişletir.

İlgili Mindset programı

Google Cloud Pub/Sub ile Olay Akış Mimarisi

Sık sorulanlar

Sık sorulan sorular

Pub/sub ile mesaj kuyruğu aynı şey midir?

Değildir. Kuyrukta her mesajı yalnızca bir tüketici alır ve amaç iş paylaşımıdır. Pub/sub'da her abone mesajın kendi kopyasını alır ve amaç olayı duyurmaktır. Pek çok araç iki davranışı birlikte sunar, bu da ayrımı bulanıklaştırır.

Pub/sub, olay güdümlü mimariyle aynı mıdır?

Aynı değildir. Olay güdümlü mimari, sistemin olaylar üzerinden çalıştığı genel bir yaklaşımdır. Pub/sub ise bu yaklaşımı hayata geçirmek için kullanılan mesajlaşma desenlerinden biridir. Olay güdümlü bir sistem kuyruk ya da akış platformuyla da kurulabilir.

Abone mesajı alamazsa ne olur?

Bu davranış araca ve yapılandırmaya bağlıdır. Çoğu sistem teslim edilemeyen mesajı belirli bir süre saklar ve yeniden denemeye izin verir. Garantiler farklı olduğu için, kullanılan aracın teslim ve saklama davranışı mutlaka dokümantasyondan okunmalıdır.

Pub/sub her zaman en iyi seçim midir?

Hayır. Bir isteğin anında yanıtını bekleyen işlemlerde doğrudan servis çağrısı daha basittir. Pub/sub, bir olaya birden çok servisin bağımsız tepki vermesi gerektiğinde ve gevşek bağlılık istendiğinde anlamlıdır.

Yayınla-Abone Ol (Pub/Sub) Modeli Nedir?