- 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
"Kaos mühendisliği" ifadesini duyunca bir an şirketimizde benim yazdığım backend’den bahsediliyor sandım;