Monolitik bir yaklaşıma alıştığım için hala kafamı mikro hizmet mimarisinin etrafına sarmaya çalışıyorum
Diyelim ki son derece basitleştirilmiş bir Uber rezervasyon sistemi oluşturmaya çalışıyoruz . : Şeyler basitleştirmek için biz en biz 3 hizmetler ve müşteri için bir ağ geçidi API var diyelim Booking
, Drivers
, Notification
ve aşağıdaki iş akışını vardır:
Yeni rezervasyon oluştururken:
- Mevcut kullanıcının zaten bir rezervasyonu olup olmadığını kontrol edin
- Mevcut sürücülerin listesini alın
- Rezervasyonu almak için sürücülere bildirim gönderin
- Sürücü rezervasyonu alıyor
Diyelim ki tüm mesajlar, işleri basitleştirmek için kafka gibi bir mesajlaşma otobüsü yerine bir http çağrısı ile yapılıyor.
Bu durumda, Booking
hizmetin mevcut rezervasyon için kontrol yapabileceğini düşündüm . Ancak, mevcut sürücülerin ve bildirimlerin listesini kim almalıdır? Bunu ağ geçidi düzeyinde yapmayı düşünüyorum ama şimdi mantık bir şekilde iki yere ayrılıyor:
Gateway
- mevcut sürücülerin listesini alın + bildirim gönderinBooking
- mevcut rezervasyonu kontrol et
Ve eminim ağ geçidi bunu yapmak için doğru yer değil ama biz Booking
hizmet yapıyoruz gibi hissediyorum , sıkıca bağlı hale geliyor?
Daha karmaşık hale getirmek için, rezervasyon sistemini yeniden kullanmak isteyen ancak kendi iş mantığıyla başka bir projemiz varsa ne olur? Bu yüzden ağ geçidi düzeyinde yapmayı düşündüm, böylece yeni proje ağ geçidinin kendi iş mantığı mevcut olandan ayrı olabilir.
Bunu yapmanın başka bir yolu, her projeye çekirdek rezervasyon hizmeti ile konuşacak kendi rezervasyon hizmeti var ama burada en iyi yaklaşımın ne olduğundan emin değilim :-)