17 puan yazan GN⁺ 2025-05-23 | 1 yorum | WhatsApp'ta paylaş
  • Mikroservis ve bulut ortamlarında arızalar kaçınılmaz olduğu için, Chaos Engineering ile sistem dayanıklılığı önceden güçlendirilmelidir
  • Chaos Toolkit ve Chaos Monkey, sırasıyla genel amaçlı kullanım ve Java(Spring Boot) odaklı ortamlarda güçlü arıza testi araçları olarak kullanılır
  • Kubernetes ve Istio tabanlı deneyler ile ağ gecikmesi, servis kesintisi, bölge arızası gibi çeşitli gerçekçi arıza senaryoları simüle edilebilir
  • Chaos Engineering, CI/CD hattına entegre edilerek production öncesinde arıza dayanıklılığını otomatik olarak doğrulayabilir
  • Temel amaç 'yıkım' değil, 'güven inşa etmek'tir; küçük başlayıp kaos seviyesini kademeli olarak artırma stratejisi önerilir

Mikroservisler için Chaos Engineering

Chaos Engineering nedir?

  • Chaos Engineering, gerçek arızaları simüle ederek sistemin zayıf noktalarını önceden keşfetmek ve iyileştirmek için kullanılan bir metodolojidir
  • Başlıca simülasyon örnekleri:
    • Bölge veya veri merkezi arızası
    • Servisler arası ağ gecikmesi
    • CPU aşırı yükü ve I/O arızası
    • Bağımlı servisin kullanılamaz hale gelmesi
    • Dosya sistemi hataları
  • Amaç: arıza oluşmadan önce toparlanma süresini kısaltmak, erişilebilirliği artırmak ve kullanıcı üzerindeki etkiyi en aza indirmek

Chaos Engineering deney yaşam döngüsü

  • Yapılandırılmış deney süreciyle planlama → yürütme → gözlem → iyileştirme şeklinde döngüsel bir süreç uygulanır
  • Sistematik olarak güvenilirliği artırmak için sürekli deney temelli işletim

Chaos Toolkit vs. Chaos Monkey

  • Kullanım amacı

    • Chaos Toolkit : çeşitli platform ve ortamlarda kullanılabilen genel amaçlı Chaos deney çerçevesi
    • Chaos Monkey (yalnızca Spring Boot) : Java Spring Boot uygulamalarına özel arıza simülasyonu aracı
  • Yapılandırma yöntemi

    • Chaos Toolkit : deneyleri tanımlamak için JSON/YAML tabanlı bildirimsel yapılandırma kullanır
    • Chaos Monkey : application.yml yapılandırma dosyası ve Spring Boot Actuator entegrasyonu üzerinden yapılandırılır
  • Desteklenen diller ve ortamlar

    • Chaos Toolkit : çok dilli ve çok platformlu ortamları destekler (Node.js, Java, Kubernetes vb.)
    • Chaos Monkey : Java(Spring Boot) tabanlı uygulamalara özeldir
  • Desteklenen arıza türleri

    • Chaos Toolkit : ağ arızaları, Pod sonlandırma, CPU/bellek stresi, özel tanımlı başarısızlıklar gibi geniş kapsamlı arıza deneylerini destekler
    • Chaos Monkey : gecikme(Latency), istisnalar(Exceptions), servisi durdurma(KillApp) gibi uygulama katmanı odaklı arıza enjeksiyonu sağlar
  • Entegre olabildiği sistemler

    • Chaos Toolkit : Kubernetes, Istio, Azure, Prometheus vb. ile entegre olabilir
    • Chaos Monkey : Spring Boot Actuator API ile doğrudan entegre olarak Spring iç bileşenlerini hedefler

Hangi durumlarda tercih edilmeli

  • Chaos Toolkit
    • Kubernetes tabanlı dağıtım ortamları
    • Çoklu bulut veya çok dilli servisler
    • Karmaşık arıza senaryoları oluşturulurken
  • Chaos Monkey
    • Java tabanlı Spring Boot uygulamaları
    • Metot seviyesinde istisna/gecikme testleri
    • Basit ve gömülü bir yaklaşım tercih edildiğinde

Chaos Toolkit uygulama örnekleri (Java/Node.js/Kubernetes)

Kubernetes ortamında deneyler

  • Pod sonlandırma deneyi: pod-kill ile dayanıklılığın doğrulanması
  • Bölgesel gecikme deneyi: Istio sanal servislerine ağ gecikmesi enjekte etme
  • Kaynak tükenmesi deneyi: CPU/belleği zorla tükettirme
  • DB kesintisi simülasyonu: bağımlı servis arızalarına tepki testleri
  • Ağ bölünmesi: servisler arası iletişimin kesilmesi deneyi
  • Zamana bağlı arızalar: trafik yoğunluğunun yüksek olduğu saatlerde arıza enjeksiyonu

Istio tabanlı gecikme enjeksiyonu

  • Servis mesh katmanında ağ gecikmesi enjekte etme
  • Istio ayarları üzerinden gecikme/hata oranını kontrol etme

Rapor oluşturma ve analiz

  • chaos report komutuyla deney sonuçlarının özeti
  • Sonuçların yorumlanması:
    • Normal durum korunuyor → dayanıklılık sağlanmış
    • Anomali tespit edildi → log ve izleme analizine ihtiyaç var
    • Zincirleme arızalar oluşuyor → circuit breaker kullanımı ve refactoring değerlendirilmeli

Spring Boot içinde Chaos Monkey

  • İzlenen hedefler: @Controller, @Service, @Repository, @RestController
  • Enjekte edilebilen arızalar:
    • Latency Assault: yapay gecikme
    • Exception Assault: istisna oluşturma
    • KillApp Assault: tüm uygulamayı durdurma

Çalıştırma yöntemi

  • application.yml içinde chaos-monkey profilini etkinleştirme
  • Spring Boot Actuator API üzerinden dinamik kontrol

Node.js içinde Chaos Engineering

Node.js için Chaos Monkey kullanımı

  • Üçüncü taraf Chaos Monkey kütüphanesinin kurulumu
  • Özellikler:
    • Gecikme enjeksiyonu
    • İstisna oluşturma
    • Ağ arızası simülasyonu

Chaos Toolkit kullanım örneği

  • Deneyi JSON formatında yapılandırma
  • Örnek: belirli bir Node.js API'sine 200ms gecikme enjekte etme

CI/CD hattına Chaos entegrasyonu

Entegrasyonun amacı

  • Dağıtımdan önce dayanıklılığı otomatik doğrulama
  • Performans darboğazlarını belirleme
  • MTTR(Mean Time to Recovery) iyileştirme
  • Manuel müdahale olmadan rollback otomasyonu

GitHub Actions entegrasyon örneği

  • Koda commit atıldığında deneylerin otomatik çalıştırılması
  • Chaos Toolkit kurulduktan sonra deneylerin yürütülmesi
  • Health check başarısız olursa dağıtımı durdurma

Chaos Engineering deneylerinde best practice'ler

  • 1. Normal durum hipotezi oluşturma: sistemin normal çalışma ölçütlerini net biçimde tanımlama
  • 2. Düşük yoğunluklu deneylerle başlama: 100ms gecikme → kademeli güçlendirme
  • 3. İzleme entegrasyonu zorunlu: Prometheus, Grafana vb. ile gerçek zamanlı gözlem
  • 4. Otomatik rollback ayarlama: başarısızlık durumunda hızlı toparlanma mekanizması kurma
  • 5. Kapsamı aşamalı genişletme: servis düzeyinden küme düzeyine deneyleri büyütme

Sonuç

  • Chaos Engineering, sistemi bozmak için değil, güven oluşturmak için kullanılan bir stratejidir
  • Java, Node.js, Kubernetes, Istio fark etmeksizin küçük deneylerle başlayıp kademeli olarak genişletilebilir
  • Chaos Toolkit, Chaos Monkey gibi araçlar kullanılarak gerçek arıza durumları güvenli biçimde simüle edilebilir
  • Deneyler CI/CD'ye entegre edilip otomatikleştirilerek istikrarlı bir işletim yapısı önceden güvence altına alınabilir

Referanslar

1 yorum

 
aer0700 2025-05-24

"Kaos mühendisliği" ifadesini duyunca bir an şirketimizde benim yazdığım backend’den bahsediliyor sandım;