müfettiş
Moderatör
- Katılım
- 20 Ocak 2024
- Mesajlar
- 325
- Tepkime puanı
- 1
- Puanları
- 18
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:
- İzolasyon: Her mikroservis kendi Docker konteyneri içinde, kendi kütüphaneleriyle çalışır. Yanındaki servisin ne kullandığı onu ilgilendirmez.
- Taşınabilirlik: Geliştirici "Ödeme Servisi"ni paketler (Image). Bu paket test ortamında da, canlı ortamda da (Production) aynı şekilde çalışır.
- 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.
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:
- 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.
- Self-Healing (İyileştirme): Ödeme servisi çökerse, K8s bunu fark eder ve saniyeler içinde yenisini başlatır.
- 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.
- 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).