Mikroservisler & Design Patterns
Dağıtmadan önce bedelini bil
Monolit mi mikroservis mi, Saga, circuit breaker, DDD ve GoF kalıpları. Mimari kararların gerçek maliyetleri.
22 ders 206 dk toplam süre Sertifikan
Bu konunun dersleri şu çalışma yollarında: Adım Adım Backend (13) , Derin Sular (7) , Üretimde Ayakta Kalmak (5)
Başlangıç
Orta
- 1/3 yıldız2/3 yıldız3/3 yıldız Servis Sınırları — Bounded Context ve Database-per-Service Servisleri tablolara göre bölersen (müşteri, ürün, sipariş) her iş bütün servisleri dolaşır. Yeteneğe göre bölüp her servise kendi verisini verirsen, bir iş çoğunlukla tek serviste başlar ve biter. 10 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Servisler Arası İletişim Desenleri Bir istek dört servise uğruyorsa bekleme süreleri toplanır, çalışma ihtimalleri ise çarpılır. Çağrıları aynı anda yapmak beklemeyi kısaltır ama çalışma ihtimalini hiç değiştirmez; onun için başka bir çözüm gerekir. 10 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Mikroservis Katmanları — İstek Nereden Geçiyor Mimari çizimlerdeki her kutu ayrı bir soruya cevap verir: gateway ortak kapıdır, BFF bir ekranı tanır, servis kuralı tutar. Bir kutuyu atlarsan onun işi başka bir yere sızar. 10 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız BFF — Backend for Frontend BFF, tek bir ekrana (mobil, web) özel bir arka uçtur ve onu BFF yapan şey teknoloji değil, sahibidir: o ekranın ekibi. Herkesin ortak kullandığı bir BFF, adı değişmiş sıradan bir API'dir. 10 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Feign Client — Kolaylığın Gizlediği Şeyler Feign, başka bir servise yapılan HTTP çağrısını sıradan bir metot çağrısı gibi gösterir. Kolaylık gerçek, ama görünmeyen üç şey var: gecikme, yarım kalan hatalar ve çoğu zaman yanlış gelen varsayılan ayarlar. 10 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız API Gateway ve Service Discovery — İstek Doğru Kapıyı Nasıl Bulur Gateway, bütün isteklerin geçtiği tek kapıdır: yönlendirir, kimliği kontrol eder, aşırı isteği durdurur. Arkadaki servislerin adresleri ise sürekli değişir; discovery onları çalışırken bulur ama hep biraz geriden gelir. 9 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Dağıtık Tracing — Bir İsteği Beş Servis Boyunca İzlemek Bir istek birçok servisten geçer. Hepsine aynı traceId taşınırsa istek tek bir ağaç olarak görünür ve bütün log'larda tek aramayla bulunur. Bağlamı taşımayan tek bir geçiş, ağacı orada ikiye böler. 10 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Strangler Fig ve API Sürümleme — Monoliti Kimseyi Kırmadan Taşımak Monoliti bir gecede yeniden yazmak yerine önüne bir yönlendirici koyup yetenekleri tek tek taşırsın. Model değişirken eski istemciler eski şekli almaya devam eder: alan eklenir, sürüm açılır, eskisi duyurulup kapatılır. 10 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız gRPC ve REST — Aynı Havale, İki Dil ✦ yeni REST çoğu zaman JSON taşır: okunur, her yerden çağrılır ama alan adlarını her mesajda tekrar eder. gRPC protobuf taşır: küçük ve şemalıdır, alanları numarayla eşler. Ad mı numara mı sözleşmedir, onu bilmek kırılmaları önler. 9 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız RabbitMQ — Mesaj Hangi Kuyruğa Gider? ✦ yeni RabbitMQ'da mesaj doğrudan kuyruğa değil, bir exchange'e gönderilir. Exchange türü ve bağlantılar mesajın hangi kuyruklara kopyalanacağını seçer. Hiçbir bağlantıya uymayan mesaj hata vermeden kaybolur. 9 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Bulkhead — Tek Yavaş Servis Neden Herkesi Düşürür? ✦ yeni Bütün dış çağrılar aynı thread havuzunu paylaşırsa, yavaşlayan tek bir bağımlılık thread'leri tutar ve sağlam servislere giden istekler de reddedilir. Her bağımlılığa ayrı bir havuz vermek hasarı o bölmede tutar. 9 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Webhook Almak — Ödeme Tamamlandı Diyen Gerçekten Sağlayıcı mı? ✦ yeni Ödeme sağlayıcısı bir olayı webhook ile haber verir. Adresi bulan herkes de aynı adrese istek atabilir, sağlayıcı da aynı olayı ikinci kez gönderebilir. Önce HMAC imzasını doğrula, sonra olay kimliğine bak. 8 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Olay Şemasının Evrimi — Alanın Adını Değiştirdin, Kim Kırıldı? ✦ yeni Kafka'daki bir olayı, aynı gün güncellenmeyen birçok servis okur. Varsayılanı olan alan eklemek güvenlidir; ad ya da tür değiştirmek eski tüketicileri sessizce bozar ya da durdurur. Schema registry, uyumsuz şemayı yayından önce durdurur. 8 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Servisler Arası Kimlik — İç Ağdan Gelen Her İstek Güvenilir mi? ✦ yeni İç ağa güvenmek, hatalı bir servise ya da ele geçirilmiş bir pod'a her kapıyı açar. Ortak anahtar kimin çağırdığını söylemez. Servis başına sertifika (mTLS) ve en az yetki kuralı, yalnızca izinli servisin işi yapmasını sağlar. 8 dk
İleri
- 1/3 yıldız2/3 yıldız3/3 yıldız Circuit Breaker Circuit breaker, evdeki sigorta gibidir: bozuk servisi değil, çağıranı korur. Yavaşça ölen bir servis senin bütün thread'lerini bekletip seni de düşürmesin diye, bir süre ona hiç gitmeden hemen hata döner. 10 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Saga Pattern Servisler ayrılınca 'hepsi ya da hiçbiri' garantisi kaybolur. Saga işi adım adım yapar; bir adım patlarsa öncekiler silinmez, iptal eden yeni adımlarla telafi edilir, tıpkı tatil rezervasyonunu iptal etmek gibi. 10 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Outbox ve Idempotent Consumer — Olay Kaybolmasın, İki Kez de İşlenmesin Veritabanına ve mesaj kuyruğuna aynı anda yazamazsın: biri başarılı olup öbürü olmayabilir. Çözüm, mesajı siparişle birlikte veritabanındaki bir 'giden kutusuna' yazmak. Mesaj yine de iki kez gidebilir; alan taraf tekrarı tanımalı. 9 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız BFF'de Güvenlik ve Alternatifler — Token Handler, GraphQL, Gateway Tarayıcıda bir script'in okuyabildiği her anahtarı (token) sayfaya sızan kötü bir script de okur. Token handler BFF anahtarı sunucuda tutar, tarayıcıya yalnızca script'in dokunamadığı bir cookie verir. 9 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Dağıtık Transaction — 2PC Neden Nadiren, Saga Neden Sık Bir @Transactional yalnızca kendi veritabanını geri alır. Two-phase commit iki veritabanını tek karara bağlar, ama koordinatör düşerse herkes kilitli bekler. Mikroservisler bu yüzden çoğu zaman saga ve outbox'ı seçer. 10 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız CQRS ve Event Sourcing — Olanı Yaz, Okumayı Ayır Hesabın son hâlini değil, başına gelen her şeyi sırayla yazabilirsin; bakiye bu satırların toplamıdır (event sourcing). Okumayı da ekrana göre şekillenmiş ayrı bir kopyadan yapabilirsin (CQRS). İkisi ayrı kararlar ve ikisinin de bedeli var. 10 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız IBM MQ ve Sıralı Teslim — Gerçekleşme, Emirden Önce Nasıl İşlendi? ✦ yeni Kuyruk mesajları sırayla verir, ama birden çok tüketici aynı anda alınca işlenme sırası bozulur. Tek tüketici sırayı korur ama her şeyi tek sıraya sokar. Sıra gereken mesajları bir anahtara göre bölmek ikisini birden sağlar. 9 dk