Microservices Mimarisinde Docker ve Kubernetes’in Rolü

müfettiş

Moderatör
Katılım
20 Ocak 2024
Mesajlar
325
Tepkime puanı
1
Puanları
18

images (4).png

Microservices Mimarisinde Docker ve Kubernetes’in Rolü​


Giriş: Tek Parça Devden, Küçük Ordulara​

Yazılım dünyasında uzun yıllar Monolitik (Monolith) mimari hakimiyet sürdü. Tüm uygulama (Veritabanı bağlantısı, ön yüz, arka yüz, ödeme sistemi) tek bir devasa kod bloğu halindeydi. Bu yapıyı güncellemek zordu; küçük bir değişiklik için tüm sistemi yeniden başlatmak gerekirdi. Ayrıca ödeme sistemi yoğunsa, sadece orayı değil, tüm uygulamayı çoğaltmak (scale) zorundaydınız.

Microservices (Mikroservis) mimarisi bu devi parçalara ayırdı. Uygulama; "Ödeme Servisi", "Kullanıcı Servisi", "Ürün Servisi" gibi birbirinden bağımsız, kendi veritabanı olabilen küçük parçalara bölündü. Peki bu yüzlerce küçük parçayı nasıl paketleyecek ve yöneteceğiz? İşte Docker ve Kubernetes burada sahneye çıkar.

Docker'ın Rolü: Standart Paketleme (Tuğla)​

Mikroservislerin en büyük zorluğu "Bağımlılık Cehennemi"dir (Dependency Hell). Ödeme servisi Java 8 isterken, Kullanıcı servisi Java 17 isteyebilir. Aynı sunucuda bunları çalıştırmak kaostur.

Docker bu sorunu çözer:
  1. İzolasyon: Her mikroservis kendi Docker konteyneri içinde, kendi kütüphaneleriyle çalışır. Yanındaki servisin ne kullandığı onu ilgilendirmez.
  2. Taşınabilirlik: Geliştirici "Ödeme Servisi"ni paketler (Image). Bu paket test ortamında da, canlı ortamda da (Production) aynı şekilde çalışır.
  3. Dil Bağımsızlığı (Polyglot): Bir servisi Python ile, diğerini Go ile, ötekini Node.js ile yazıp hepsini Docker konteynerine koyabilirsiniz. Dışarıdan bakıldığında hepsi sadece birer "Konteyner"dir.
  4. Monolithic vs Microservices architecture diagram resmi

Kubernetes'in Rolü: Yönetim ve Orkestrasyon (İnşaat Şefi)​

Elinizde 50 tane mikroservis ve her birinden 10'ar kopya (toplam 500 konteyner) varsa, bunları docker run komutuyla yönetemezsiniz. Hangi sunucuda ne kadar yer var? Biri çökerse kim kaldıracak? Trafik artarsa kim yeni kopya açacak?

Kubernetes (K8s) bu karmaşayı yöneten orkestra şefidir:
  1. Service Discovery (Keşif): "Ödeme Servisi", "Kullanıcı Servisi"ne veri göndermek istediğinde IP adresini bilmek zorunda değildir. K8s'e "Beni Kullanıcı Servisi'ne götür" der. K8s, DNS üzerinden trafiği doğru yere yönlendirir.
  2. Self-Healing (İyileştirme): Ödeme servisi çökerse, K8s bunu fark eder ve saniyeler içinde yenisini başlatır.
  3. Auto-Scaling (Otomatik Ölçekleme): Black Friday günü alışveriş trafiği arttığında, K8s CPU kullanımına bakar ve "Ödeme Servisi" konteyner sayısını otomatik olarak 5'ten 50'ye çıkarır. Trafik bitince tekrar 5'e düşürür.
  4. Rolling Updates (Kesintisiz Güncelleme): Servisi güncellerken sistemi kapatmaz. 10 kopyadan önce 1'ini günceller, sorun yoksa 2.'yi günceller. Sorun çıkarsa otomatik geri alır (Rollback).

Docker ve Kubernetes İşbirliği​

Bu ikili, modern yazılım fabrikasının temelidir:
  • Docker: Uygulamanın "nasıl paketleneceğini" ve "tekil olarak nasıl çalışacağını" tanımlar. (Lojistik kutusu).
  • Kubernetes: Bu kutuların "nerede", "kaç adet" ve "birbiriyle nasıl iletişim kurarak" çalışacağını yönetir. (Lojistik operasyon merkezi).

Sonuç​

Mikroservis mimarisi, teknik bir karar olduğu kadar organizasyonel bir karardır. Docker ve Kubernetes olmadan mikroservis yapmak, trafik ışıkları olmayan bir kavşakta 100 arabayı yönetmeye benzer. Bu teknolojiler, karmaşıklığı "yönetilebilir" hale getirerek, şirketlerin (Netflix, Uber, Amazon gibi) devasa boyutlara ulaşmasını sağlayan gizli kahramanlardır.
 
Geri
Üst