Senkron — Asenkron Haberleşme ve Message Broker Kavramları

Tolgahan İnan
Arvato Tech
Published in
6 min readSep 24, 2023

Merhaba, bu yazımda senkron — asenkron haberleşme ve message broker kavramlarını gündelik hayattan somut örnekler ile ele alacağım. Eğer siz de bu kavramları en az bir kere duymuş, ancak nasıl ve ne amaçla kullanıldığı konusunda yeterli bilgiye sahip değilseniz bu yazıyı sonuna kadar okumanızı tavsiye ediyorum.

SENKRON HABERLEŞME

Senkron haberleşme iletici ve alıcı arasında kesintisiz bir akışın olduğu haberleşme yöntemidir. Örneklendirecek olursak ;

Bir öğretmen ve bu öğretmenin eğitim verdiği 20 kişilik bir sınıf olduğunu farz edelim. Bir ders esnasında öğretmenin bir öğrenciyi sözlü sınava tabi tuttuğunu varsayalım, bu durumda öğretmen öğrenciye anlık olarak bir soru soracak, sorduğu soruya yanıt vermesini bekleyecek, ve herhangi bir yanıt almadan farklı bir öğrenci ile sözlüye devam etmeyecektir. Bu ve bu gibi durumlar birer Senkron haberleşme örneğidir.

Senkron haberleşme esnasında :

1- ) Sender (Öğretmen) tarafından bir talep yapılır

2-) Receiver (Öğrenci) tarafından talebe cevap verilir

3 -) Talebe cevap dönene kadar farklı bir aksiyon gerçekleştirilemez.

ASENKRON HABERLEŞME

Asenkron haberleşme iletici ve alıcı arasında kesintili bir akışın olduğu haberleşme yöntemidir. Örneklendirecek olursak;

Bir öğretmenin gelecek hafta düzenlenecek bir gezi için katılacak ve katılmayacak öğrencileri belirlemek adına sınıfa ait WhatsApp grubunda bir anket başlattığını ve öğrencilerinden hafta sonuna kadar anket üzerinde “katılıyorum” ya da “katılmıyorum” seçeneğini işaretlemesini talep ettiğini varsayalım.

Bu durumda öğretmenin yaptığı anket bir istek, öğrencilerin tamamının anketi yanıtlaması sonucunda oluşan anket sonucu ise bir cevap olacaktır. Öğretmen isteğine anlık bir cevap beklemeyecek ayrıca tüm öğrenciler anketi yanıtladıktan sonra nihai sonuç oluşacak ve öğretmen sonucu değerlendirecektir. Bu ve bu gibi durumlar ise birer Asenkron haberleşme örneğidir.

Asenkron haberleşme esnasında :

1-) Sender (Öğretmen) tarafından bir talep yapılır.

2-) Yapılan talep tüm Receiver (Öğrenciler) tarafından erişilebilecek bir alana aktarılır.

3-) İlgili Receiver (Öğrenciler) talebi cevapladıktan sonra talep sonucu Sender (Öğretmen) tarafına iletilir.

4-) Sender (Öğretmen) , Receiver (Öğrenciler) talebe yanıt verene kadar farklı işler ile ilgilenebilir. Örneğin öğrencilerin sınav kağıtlarını okuyabilir, sınav soruları hazırlayabilir vb.

Senkron ve Asenkron haberleşme örneklerini bilgisayar bilimlerine yakınsayacak olur isek ;

Senkron ve asenkron olarak çalışan birer adet kod bloğu olduğunu varsayalım. Bu iki kod bloğu da birebir olarak aşağıda bulunan adımları gerçekleştiriyor olsun :

1-) Medium sitesi üzerinde bir üyelik oluşturmak

2-) Medium sitesine oluşturulan üyelik ile giriş yapmak

3-) Medium sitesinde bu yazıyı paylaşmak

Bu işlemler esnasında Medium sitesinin “Üyelik başarıyla oluşturuldu.” , “Giriş başarıyla yapıldı.” , “Gönderi başarı ile paylaşıldı.” cevaplarını vereceğini varsayalım. Ayrıca her bir isteğin yapılmasının 1 saniye, her bir cevabın dönmesinin ise yaklaşık 10 saniyelik bir süre alacağını varsayalım.

Senkron olarak çalışan kod bloğu :

Medium sitesine üyelik oluşturmak için bir istekte bulunacak ve bu isteğe, “Üyelik başarıyla oluşturuldu.” cevabı dönene kadar bekleyecektir. Daha sonrasında oluşan hesap ile giriş siteye giriş yapma isteğinde bulunarak “Giriş başarıyla yapıldı.” cevabı alana kadar bekleyip bu yazıyı site üzerinde paylaşmak için istekte bulanacak ve “Gönderi başarı ile paylaşıldı.” cevabını alana kadar bekleyecektir.

Asenkron olarak çalışan kod bloğu :

Medium sitesine üyelik oluşturmak için istekte bulunacak ve herhangi bir yanıt beklemeden Medium sitesi üzerinde henüz oluşup oluşmadığı meçhul olan bu üyelik ile Medium sitesine giriş yapma talebinde bulunacaktır. Bu süreçte Medium sitesi oluşturulmaya çalışılan kullanıcıyı henüz veri tabanına kaydetmedi ise, kullanıcının giriş yapma isteğine başarısız olarak dönüş yapacak ve akış ilerlemeyecektir.

Bu tür senaryolarda senkron bir akış kurmak akışın güvenliği açısından daha faydalı olacaktır.

Aynı örneği biraz değiştirip akışı aşağıda olduğu gibi günceller isek ;

1-) Medium sitesinde üyelik oluşturmak

2-) Facebook sitesine halihazırda var olan üyelik ile giriş yapmak.

3-) Twitter sitesi üzerinde halihazırda var olan üyelik ile bu yazıyı paylaşmak.

Senkron olarak çalışan kod bloğu :

Medium sitesinde üyelik oluşturma isteğine, “Üyelik başarıyla oluşturuldu.” cevabı alana kadar Facebook sitesine giriş yapmayı denemeyecek, Facebook sitesinden “Giriş başarıyla yapıldı.” cevabı alana kadar ise, Twitter sitesine bu yazıyı paylaşma isteğinde bulunmayacaktır.

Asenkron olarak çalışan kod bloğu :

Medium sitesine üyelik oluşturma isteğinde bulunduktan sonra, Facebook sitesine giriş yapma isteğinde bulunabilir ve Twitter sitesine bu yazıyı paylaşma isteğinde bulunabilir. Kod bloğu Medium sitesinin “Üyelik başarıyla oluşturuldu.” cevabını dönmesini ya da Facebook sitesinin “Giriş başarıyla yapıldı.” cevabını beklemeyerek akışına devam edecek, cevap döndükten sonra cevabı değerlendirmeye alacaktır.

Bu tür senaryolarda asenkron bir akış kurmak sürecin daha hızlı ilerlemesine olanak sağlayacaktır.

Bu kısıma kadar her şey anlaşılır ise artık “Message Broker” kavramına değinebiliriz ;

MESSAGE BROKER

En temel tabir ile asenkron bir biçimde haberleşmenin sağlanması için aracı bir katman olarak düşünülebilir. Ancak talep edilen durumlarda senkron olarak haberleşmek için de kullanılabilir.

Adlarını sıkça duymuş olabileceğiniz “RabbitMQ”, “Kafka” birer message broker örneğidir. Örneklendirecek olursak ;

Öğretmenin sınıfındaki öğrencilerine anket yaptığı örneğimizden bir miktar yardım almamız gerekiyor. Örneği hatırlayacak olur isek, Öğretmenin anketinin talep olduğunu, tüm öğrencilerin katılımı sonucunda oluşan çıktının ise cevap olduğunu söylemiştik. Eğer öğretmen cevabı bekler ve bu süre zarfında farklı bir işlem gerçekleştirmez ise senkron, bekleme sürecinde farklı işler ile ilgilenir ise (sınav kağıtlarını okumak) asenkron bir haberleşme olacaktır.

Peki Message broker nedir ya da bu örneğin tam neresinde dediğinizi duyar gibiyim, bu örnek özelinde öğretmenin anketi yayınladığı, öğrencilerin de ankete erişim sağladığı “Whatsapp” uygulaması teorik olarak message broker işlevi görmektedir.

Örneği biraz genelleyecek olur isek message brokerlar “A” ile “B” arasında iletişim kurmak için aracı olan, “A” nın ilettiği mesajlara “B” nin erişebilmesi sağlayan, “A” ile “B” arasında doğrudan iletişim kurulma gereksinimini kaldıran yapılardır.

Peki neden “A” mesajını doğrudan “B”ye iletmek yerine bu aracı message broker dediğimiz katmana ihtiyaç duymaktadır? Bu sorunun cevabı da yine anket örneğimizde gizli. Öğretmen tüm öğrenciler ile teker teker iletişim kurmak yerine, tüm öğrencilerinin ve kendisinin ortak erişim sağlayabildiği katman olan “Whatsapp” platformunu kullanmayı, dolayısıyla bizler de bu gibi durumlarda “Producer , Sender (öğretmen)” ile “Consumer , Receiver (öğrencilerin)” ortak olarak erişim sağlayabildiği message broker yapılarını kullanmayı tercih ederiz.

Standart bir Message broker’a ait akış şeması temelde yukarıdaki gibidir. Örneğimizle bağdaştıracak olur isek.

1-) Producer , Sender (Öğretmen) : İletmek istediği mesajı yani oluşturduğu anketi message broker’a (Whatsapp) iletir

2-) Queue — Topic (Sınıfa ait Whatsapp grubu) : Message brokerin, iletilen mesajları tutup, talep edildiğinde consumerlar (öğrenciler) tarafından erişilebilir olan, producer ve consumer arasında aracılık görevini üstlenen katmandır.

3-) Consumer (Öğrenciler) : Bağlı olduğu Queue’ları (Whatsapp grubu) dinleyerek, Producer tarafından iletilen mesajlara olumlu, olumsuz gibi yanıtlar dönen katmandır.

Eğer producer ilgili mesajı Queue’ya ilettikten sonra bu mesajların consumerlar tarafından işlenip yanıt dönmesini bekler ve bu süreç boyunca farklı bir işlem gerçekleştirmez ise senkron, mesajı ilettikten sonra işlerine devam edip, consumer yanıt verdiğinde yanıtı değerlendirmeye alır ise asenkron bir haberleşme gerçekleşmiştir diyebiliriz.

Bu yazımda sizlere senkron haberleşme , asenkron haberleşme ve message broker kavramlarından bahsetmeye çalıştım, umarım açıklayıcı olmuştur.
Görüş ve önerileriniz için benimle aşağıdaki Linkedin hesabı üzerinden iletişim kurabilirsiniz.
Tolgahan İnan | LinkedIn

--

--

Tolgahan İnan
Arvato Tech

Software Developer who tends to learn by mistaeks.