Mikroservisler Arası İletişim: Senkron vs Asenkron

Mikroservisler mimarisinde iki servis birbirleriyle konuşmak zorunda. Ama nasıl konuşacakları, sistemin hızını ve güvenilirliğini doğrudan etkiliyor.

Bir servisten diğerine istek gönderiyorsun ve cevap gelene kadar bekliyorsun. REST API'ler buna örnek. Müşteri servisi, ödeme servisiyle senkron konuşursa: "Ödemeyi işle, ben burada bekliyorum."

Avantaj: Basit, anlaşılması kolay. Hata yönetimi net.

Riskleri: Ödeme servisi yavaşsa, müşteri servisi de donup kalır. Zincir halinde servisler bağlanırsa, bir tanesi çöktüğünde tüm sistem etkilenir.

Müşteri servisi, ödeme servisiyle doğrudan konuşmaz. Bunun yerine bir kuyruğa (message queue) mesaj bırakır ve hemen devam eder. Ödeme servisi kendi hızında mesajı alıp işler.

Avantaj: Servisler bağımsız çalışır. Ödeme servisi geçici olarak offline olsa bile, mesajlar bekler.

Riskleri: Daha karmaşık. Mesajın işlenip işlenmediğini takip etmek gerekir.

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası

Müşteri servisi, ödeme servisiyle doğrudan iletişim kuruyor:

1// customer-service.js
2const axios = require('axios');
3
4async function createOrder(customerId, amount) {
5try {
6// Senkron: Cevap gelene kadar bekle
7const paymentResponse = await axios.post(
8'http://payment-service/pay',
9{ customerId, amount }
10);
11
12if (paymentResponse.data.success) {
13console.log('Ödeme başarılı, sipariş oluşturuluyor...');
14return { orderId: 123, status: 'confirmed' };
15}
16} catch (error) {
17console.log('Ödeme servisi yanıt vermiyor!');
18return { orderId: null, status: 'failed' };
19}
20}
21
22createOrder(1, 100);

Çıktı: Ödeme servisi 5 saniye yanıt verirse, müşteri servisi 5 saniye bekler.

Müşteri servisi mesajı kuyruğa bırakıp devam ediyor:

1// customer-service.js (asenkron)
2const amqp = require('amqplib');
3
4async function createOrder(customerId, amount) {
5const connection = await amqp.connect('amqp://localhost');
6const channel = await connection.createChannel();
7
8// Kuyruğu oluştur
9await channel.assertQueue('payment_queue');
10
11// Mesajı gönder ve hemen dön
12channel.sendToQueue('payment_queue',
13Buffer.from(JSON.stringify({ customerId, amount }))
14);
15
16console.log('Mesaj kuyruğa eklendi, sipariş oluşturuluyor...');
17return { orderId: 123, status: 'pending' };
18}
19
20createOrder(1, 100);

Çıktı: Mesaj hemen kuyruğa eklenir, müşteri servisi beklemez.

Hızlı yanıt gerekiyorsa (ödeme doğrulama, hesap kontrol) Senkron.

Zaman alabilecek işler için (e-posta gönderme, raporlama, ağır işlemler) Asenkron.

Çoğu modern sistem ikisini de kullanır. Ödeme senkron, e-posta bildirimi asenkron.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz