7 min read

Mikroservisler nasıl konuşur?

Bu yazıda Mikroservislerde kullanabileceğimiz iletişim yöntemlerine değinerek, son zamanlarda çok popüler olan Message Broker uygulamaları üzerinde duracağız.
Mikroservisler nasıl konuşur?

Mikroservis mimarisi sayesinde tek ve büyük bir uygulama yazmak yerine birlikte çalışan bir çok küçük uygulama yazarak aynı işi yapabiliyoruz.

Mikroservis mimarisinin yumuşak karnı bu uygulamalar arasındaki iletişimin sağlanmasıdır.

Genelde mikroservislerin dezavantajlarından bahsederken yavaşlık, performans kaybı, vs.'den sözedilir. Eğer siz bir işi bir kişiye değil de bir takıma emanet ederseniz, elbette bu takımdaki üyelerin birbiriyle iletişiminin kalitesi sonuca etki edecektir. Ama iletişim yükü olmasın diye de boyunu aşan derinlikteki işleri tek bir kişiye emanet etmek akıllıca olmaz. Doğru yaklaşım, işi bir takıma emanet ederek üyeler arasındaki iletişimin kalitesini maksimize etmek olacaktır. Bu yazıda bu konuya değineceğiz.

Mikroservisler arasında iletişim yöntemleri

Mikroservisler esasında belirli bir işten sorumlu olan, gerisine karışmayan küçük uygulamalardır. Bu uygulamaların bazen iş tanımı gereği diğer mikroservislerle bilgi alışverişinde bulunması icap eder. Bu bilgi alışverişi farklı process'ler arasında olacağından, burada IPC yani Inter-Process Communication yöntemleri kullanmanız gerekir.

Mikroservislerde kullanabileceğimiz iletişim yöntemlerine bakalım:

  • REST API yani HTTP protokolü kullanan bir program yazma
  • RPC ile uzaktan metot çalıştırma
  • Message Broker denilen mesaj iletme uygulamaları kullanma

Bunlardan ilki yani HTTP protokolü, iletişim için bir REST API yazmanızı gerektirir. Yalnız HTTP protokolü request/response şeklinde tanımlı olduğundan, yaptığınız isteğe hemen cevap almanız icap eder. Aksi halde istek yapan program bloklanacaktır (yani beklemeye geçecek, donacaktır).

RPC ise bu sıralar gRPC ile gündemde olan bir yöntem, yine kendi hizmetinizi yazmanız gerektirir.

Sonuncusu yani Message Broker'lar ise genelde çok büyük scale'de çalışan uygulamalarda tercih edilen RabbitMQ, Apacke Kafka, vb. mesajlaşma programlarıdır.

Siz kendi mikroservislerinizde eğer bir API veya RPC çözümü ile gerekenleri karşılıyorsanız, bunları tercih edebilirsiniz. Ama ayrı bir program kullanmayı gerektirecek kadar büyük veya kompleks bir mesajlaşma trafiği söz konusu ise o zaman mesaj iletme programlarını düşünmeniz gerekebilir. Özellikle para trafiği, ödeme işlemleri, e-ticaret işlemleri, şifreli mesaj iletimi gibi işlemleriniz varsa hem güvenilir hem de performanslı bir iletişim altyapısına ihtiyacınız var demektir.

Message Broker nasıl çalışır?

Mesaj iletme programları bir uygulamanın ürettiği mesajları bir queue yani sıraya koyar. Başarıyla iletilen her mesajı sıradan siler. Bu şekilde bütün mesajların alıcılara mutlaka ulaşmasını sağlar.

message queue
Kaynak: https://www.cloudamqp.com/blog/2015-05-18-part1-rabbitmq-for-beginners-what-is-rabbitmq.html

Bütün bu işlemler mikroservislerden bağımsız yapıldığından, onların üzerinden bu yük kalkmış olur. Mikroservis gözünden bakarsak, biz sadece uygulamanın doğru hedefe doğru mesajı üretmesini sağlarız. Gerisini bir nevi kişisel postacımız olan Message Broker halleder.

RabbitMQ işte bu şekilde çalışan bir mesajlaşma uygulamasıdır. Özellikle uzun süren, blocking/bloklayan (yani uygulamayı oyalayıp donmasına sebep olan) tarzda işlemler yaptıracaksanız sizin için uygun olacaktır.

Bir örnek.

Bir örnek üzerinden gidelim. Diyelim ki bir raporlama veya yedekleme işlemi yaptıracaksınız fakat bu uzun süren bir işlem olacak. Bu işlemi bir mesaj olarak uygulamamız yayınlayabilir. RabbitMQ bu mesajı rapor/yedek oluşturan uygulamaya iletir. Mesajı alan uygulama mesajdaki detaylara göre raporunu/yedeğini çıkarmaya başlar. Buradaki uzun süreli işlemi ayrı bir mikroservise yaptırdığımızdan, emri veren uygulamamız hiç etkilenmeden, bloklanmadan çalışmaya devam edecektir.

Eğer mesajı alması gereken uygulama hata alıp kapanmışsa, veya gelen mesajların hızına yetişemiyorsa, uygulama yeniden gelen mesajları almaya başlayana kadar mesajlar sırada tutulur. Teslim edildiğinden emin olunduğunda sıradan silinirler.

Mesaj yönlendirme: exchange

RabbitMQ gelen mesajları hemen sıraya almaz, önce exchange dediğimiz bir yönlendirme noktasına alır. Burada her mesaj ilgili sıraya veya sıralara gider. Bu şekilde bir değil bir çok sıra işlenebilir. Mesajlar alıcıya teslim edilene kadar sırada bekletilir. Alındığı anda sıradan çıkarılır.

RabbitMQ Topic Exchange
Kaynak: https://www.cloudamqp.com/blog/2015-05-18-part1-rabbitmq-for-beginners-what-is-rabbitmq.html

Exhange ile mesajların yönlendiğini söyledik. Bu yönlendirme tek bir şekilde yapılmıyor.

  1. Direct: direk yönlendiriyoruz, yani routing key dediğimiz adres anahtarı onunla eşleşen bir sıraya işaret ediyor. Örneğin rapor adlı bir sıra varsa, "rapor" anahtarıyla etiketlediğiniz bütün mesajlar o sıraya gidecektir.
  2. Topic: wildcard (*) uyumu ile eşleştiriyoruz. Örneğin anahtar rapor.* kalıbına uyuyorsa "rapor.*" adlı sıraya yönlendiriliyor.
  3. Fanout: gelen mesaj ona bağlı olan bütün sıralara iletiliyor.

Kaynaklar:

Redis, Kafka or RabbitMQ: Which MicroServices Message Broker To Choose?
Redis, Kafka or RabbitMQ: Which MicroServices Message Broker To Choose? When using asynchronous communication for Microservices, it is common to use a message broker. A broker ensures communication between different microservices is reliable and stable, that the messages are managed and monitored w…
Introduction to Message Brokers. Part 1: Apache Kafka vs. RabbitMQ - DZone Big Data
A software developer takes a look at two popular and open source message broker solutions, Apache Kafka and RabbitMQ, giving a high-level overview of each.
What are Benefits of Message Queues? – AWS
Understand the benefits of message queues, including better performance, increased reliability, granular scalability, and simplified decoupling.
RabbitMQ tutorial - “Hello World!” — RabbitMQ
How to work with RabbitMQ in C#
Take advantage of RabbitMQ, an open source, fast message broker to store and retrieve messages in your applications
10 Microservices Best Practices for the Optimal Architecture Design | Capital One
Follow these 10 microservices best practices to achieve an efficient, independent microservices architecture that’s distributed and optimized for success.
Amazon SQS | Mesaj Kuyruklama Hizmeti | AWS
Amazon SQS tümüyle yönetilen ileti kuyruklarının mikro hizmetleri, dağıtılmış sistemleri ve sunucusuz uygulamaları birbirinden ayırıp ölçeklendirmeyi nasıl kolaylaştırdığını öğrenin.
What is message queuing? - CloudAMQP
This blog article explains what message queuing is, how it can be used and benefits achieved when using message queues.
Learning RabbitMQ
We are on the process on converting our software architecture to Microservices and one way to communicate on each of these microservices is by using a message broker. So, a few weeks ago, we did an…
RabbitMQ Nedir
Selamlar, https://youtu.be/32SDs1Usy6o Bugün RabbitMQ hakkında, hem Windows10 üzerine olan kurulumunu hem de .Net ortamında nasıl çalıştığı konusunu, örnekler ile derinlemesine inceleyeceğiz. RabbitMQ bir mesaj kuyruğu sistemidir. Benzerleri Apache Kafka, Msmq, Microsoft Azure Service Bus,
RabbitMQ ile Mesaj Yönetimi | Devnot
RabbitMQ Üzerine (Part -1)
Basit bir tanımda anlatacak olursak,RabbitMQ bir kuyruk sistemidir.Nasıl ki eskiden maçlara giderken bilet almak için kuyrukta bekliyorsak,bu sistemde aynı mantık da çalışmaktadır.Sıraya ilk gelen…
What are Message Brokers?
A message broker enables applications, systems, and services to communicate and exchange information, by translating messages in different messaging protocols.
RabbitMQ Nedir? Docker Üzerinde Çalışan RabbitMQ ile .NET Core Nasıl Haberleşilir?
Hiç sırf sıra var diye merak edip sıranın bir ucuna geçtiğiniz oldu mu? Ben bir kaç kişi tanıyorum :) Nedendir bilinmez galiba Türk insanı olarak sıraya girmeyi çok seviyoruz. Aslında şöyle bir…
Microservices Design Patterns | Microservices Patterns | Edureka
This article on Microservices Design Patterns talks about the top design patterns you must follow to build a successful microservices architecture.