Microservice Mimarisinde Servisler Arası İletişim ve Event-Driven Mimari

Microserviceden microservice iletişim
  • Kodumuzda olduğu gibi microserviceler arasında da loosely coupled bir yapı elde etmemiz gerekiyor. Yani bir servisin diğerlerine olan bağımlılığı olabildiğince az olmalıdır.
  • Deployment için diğer servislere ihtiyaç olmamalıdır.
  • Bağımsızca test edilebilir olmalıdır.

Senkron İletişim

Senkron Payment Request
  • Servisler ilk olarak çalıştığında Service Discovery servisine kendilerini kaydeder.
  • Bir ödeme gerçekleştiğinde Payment servisine bu request iletilir.
  • Sonrasında bu bilgilere göre payment işlemi banka ile iletişime geçmek üzere banking servisine gönderilir ve bu gönderim yapılırken sadece servisin ismi bilinerek bu gerçekleştirir. Servis Discovery sayesinde ip ve port bilgileri gibi bilgiler gönderici servisi tarafından bilinmesine gerek kalmaz.
  • Banking servisine gelen bilgiler ile ödeme gerçekleştiğinde banking servisi bir response üretir.
  • Üretilen response’u hali hazırda cevabı bekleyen payment servisi alarak gerekli işlemleri kendi içinde gerçekleştirir ve kullanıcıya cevabını döner.

Asenkron İletişim

Notification ve Request/Non-blocking Response

Notification Örneği

Message-Driven Mimari ile Asenkron İletişim

Event-Driven Mimari ile Asenkron İletişim

Event Driver Architecture örneği
  • Mağaza (Market,Depo) bilgilendirilmeli,
  • Kullanıcıya siparişin oluştuğuna dair e-mail atılmalı,
  • Kurye siparişi teslim edebilmek üzere bilgilenmeli ve bu sırada başka sipariş almamalı,
  • İlgili ürünler mağaza stoğundan düşürülmeli,
  • Order service’inden Order Created event şeklinde Message Bus’a bildirilir.
  • Email servisi aldığı event’ı kendi içerisindeki bilgiler ile birleştirerek ilgili kullanıcıya email göndermektedir.
  • Paralelde ise Courier servisi aracılığıyla kurye atama işlemleri gerçekleştirilir
  • Yine paralelde siparişin oluştuğu bilgisi Shop servisine düşmüştür, oluşan bilgi ile birlikte shop servisi üzerinden işlemler yapılır ve siparişin içeriklerine uygun şekilde sipariş hazırlanmış olur.

TL, DR;

Kaynakça’da bulunan ilk yazıdan esinlenilmiştir.

--

--

--

Software Engineer @Yemeksepeti • #Java • #Spring Boot • #Kotlin • #Spark • #Microservices • https://gokhana.dev

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Gökhan Ayrancıoğlu

Gökhan Ayrancıoğlu

Software Engineer @Yemeksepeti • #Java • #Spring Boot • #Kotlin • #Spark • #Microservices • https://gokhana.dev

More from Medium

AMQP (RabbitMQ) vs Kafka for asynchronous communication

How Ports & Adapters architecture can reduce cloud (and other) vendor lock-in

Saga design pattern and transaction in Microservices architectures

Importance of Logging + Best Practices