- Amaç: Dış dünyadan gelen tüm istekler API Gateway üzerinden geçer. Bu, bir giriş noktası sağlar ve tüm mikroservislerin direkt olarak internete açılmasına gerek kalmaz.
- Kullanım: Gelen istekleri alır, doğru mikroservise yönlendirir. Örneğin,
/customers
isteği Customer servisine,/products
isteği Product servisine,/orders
isteği Order servisine yönlendirilir.
- Amaç: Müşteri bilgilerini yönetir.
- Kullanım: Müşteri verilerini bir MongoDB veritabanında saklar. Müşteri kaydı oluşturma, güncelleme gibi işlemler bu servis üzerinden gerçekleştirilir.
- Amaç: Ürün bilgilerini yönetir.
- Kullanım: Ürün verilerini bir MongoDB veritabanında saklar. Ürün ekleme, güncelleme ve listeleme gibi işlemler bu servis aracılığıyla yapılır.
- Amaç: Sipariş işlemlerini yönetir.
- Kullanım: Sipariş oluşturma ve sipariş bilgilerini saklama işlevini yerine getirir. Bir sipariş oluşturulduğunda, ürün bilgilerini Product servisinden, müşteri bilgilerini ise Customer servisinden alır.
- Amaç: Ödeme işlemlerini yönetir.
- Kullanım: Bir sipariş oluşturulduğunda, ödeme işlemini gerçekleştirir ve ödemeyi onaylar. Ödeme onay bilgilerini Kafka aracılığıyla Notification servisine gönderir.
- Amaç: Bildirim göndermek.
- Kullanım: Payment ve Order servislerinden gelen asenkron mesajları dinler ve müşteriye sipariş durumu hakkında e-posta gibi bildirimler gönderir.
- Amaç: Mikroservisler arasındaki asenkron iletişimi sağlamak.
- Kullanım: Payment ve Order servislerinden gelen onay mesajlarını Notification servisine iletir. Bu sayede servisler birbirinden bağımsız çalışabilir ve aralarında sıkı bir bağ olmaz.
- Amaç: Dağıtık izleme ve performans takibi.
- Kullanım: Servisler arasındaki isteklerin izlenmesi ve performans ölçümlerinin yapılmasını sağlar. Hangi servislerin ne kadar sürede yanıt verdiğini analiz etmek için kullanılır.
- Amaç: Servis keşfi ve yönetimi.
- Kullanım: Mikroservislerin nerede ve hangi IP adresinde çalıştığını bulmak için kullanılır. Her mikroservis bu sunucuya kendisini kaydeder ve diğer servisler bu sunucu üzerinden birbirlerine ulaşabilir.
- Amaç: Merkezi yapılandırma yönetimi.
- Kullanım: Tüm mikroservislerin yapılandırma dosyalarını merkezi bir yerden yönetmek için kullanılır. Örneğin, bir veritabanı bağlantı adresi değiştiğinde, tüm servislerde bu değişikliğin tek bir yerden yapılması sağlanır.
- Amaç: Veritabanı olarak hizmet etmek.
- Kullanım: Customer, Product, Order ve Notification servislerinin veri saklamak için kullandığı NoSQL veritabanıdır.
- Amaç: Uygulamaların konteynerize edilmesi.
- Kullanım: Mikroservislerin farklı ortamlarda aynı şekilde çalışmasını sağlamak için kullanılır. Örneğin, her servis Docker konteynerleri içinde çalıştırılabilir.
Senaryo: Joe adında bir kullanıcı e-ticaret sitesine üye olmaya karar verir.
- Joe, adını, soyadını ve e-posta adresini girerek siteye kaydolur.
- Veritabanında
Customer
tablosuna yeni bir kayıt eklenir. Joe’in kullanıcı bilgileri (ad, soyad, e-posta) bu tabloya kaydedilir. - Joe, aynı zamanda adres bilgilerini de sisteme girer (örneğin:
street: "Atatürk Cad."
,houseNumber: "10"
,zipCode: "34560"
). - Bu adres bilgisi
Address
tablosunda saklanır veCustomer
tablosuyla ilişkilendirilir.
Senaryo: Joe, sitede gezerek ilgilendiği ürünleri arar ve sepete ekler.
- Joe, çeşitli kategorilere göz atar. Örneğin,
Category
tablosundan “Elektronik” kategorisini seçer. - Bu kategoriye ait ürünler
Product
tablosundan getirilir (örneğin: “Laptop”, “Cep Telefonu”). - Joe, bir laptopu sepetine ekler. Bu ürünün adı, açıklaması, fiyatı ve mevcut miktarı
Product
tablosunda bulunur.
Senaryo: Joe, sepetindeki ürünleri satın almaya karar verir ve siparişini tamamlar.
- Joe, ödeme adımına geçer. Sipariş oluşturulur ve bu siparişin detayları
Order
tablosunda saklanır (örneğin:orderDate
,reference
). - Sipariş içerisindeki her ürün için
OrderLine
tablosuna bir kayıt eklenir (örneğin:id: 1
,quantity: 1
). - Bu siparişin
OrderLine
tabloları ile olan ilişkisi, Joe’in hangi üründen kaç adet sipariş verdiğini gösterir.
Senaryo: Joe, siparişinin ödemesini yapmak için kredi kartı bilgilerini girer.
- Joe, kredi kartı bilgilerini girip ödemeyi tamamladığında, ödeme bilgileri
Payment
tablosunda saklanır (örneğin:reference
,amount
,status
). - Bu
Payment
kaydı, ilgiliOrder
kaydıyla ilişkilendirilir. Bu, Joe’in siparişine ait ödeme bilgilerini gösterir.
Senaryo: Joe’in siparişi başarıyla tamamlanır ve ona bir bildirim gönderilir.
- Sipariş tamamlandığında, sistem otomatik olarak Joe’in e-posta adresine bir bildirim gönderir.
- Bu bildirim,
Notification
tablosunda saklanır. Bildirimin içeriği (content
), gönderen (sender
), alıcı (recipient
) ve tarih (date
) bilgileri bu tabloda yer alır. - Bu bildirim, ilgili sipariş (
Order
) ile ilişkilendirilir.
Senaryo: Joe’in siparişi kargoya verilir ve belirtilen adrese teslim edilir.
- Siparişin durumu güncellenir ve kargo bilgileri eklenir.
- Ürünlerin stok miktarları güncellenir (
availableQuantity
azalır). - Joe’e siparişinin teslim edildiğine dair bir bildirim gönderilir ve
Notification
tablosında kayıt altına alınır.