Chaos Engineering
- Türkçe karşılığı
- kaos mühendisliği
- Okunuşu
- keyos encinıring
Günlük kullanımda çoğunlukla İngilizcesi tercih edilir.
Kısaca
Chaos engineering, bir sisteme sunucu çökertmek gibi kasıtlı arızalar enjekte ederek sistemin beklendiği gibi çalışmaya devam ettiğini doğrulama pratiğidir.
Chaos engineering nedir?
Chaos engineering, gerçek kesintilere yol açmadan önce zayıflıkları bulmak için sistemin parçalarını bilerek bozan kontrollü deneyler yürütme disiplinidir. Tipik deneyler bir sunucuyu kapatır, konteynerleri öldürür, ağ gecikmesi ekler, bir diski doldurur ya da bir bağımlılığın hata döndürmesini sağlar. Uygulama, 2010'ların başında Netflix'in kendi canlı sunucularını rastgele sonlandırmaya başlayarak akış hizmetinin bu kayıptan sağ çıkabildiğinden emin olmasıyla tanınır hale geldi.
Her deney bilimsel yöntemi izler. Önce kararlı durumu, yani ödeme başarı oranı gibi ölçülebilir normal davranışı tanımlarsınız; sonra bir hipotez kurarsınız, örneğin bir veritabanı replikası arızalanırsa sitenin SLO'su içinde kalacağı; ardından arızayı enjekte eder ve sonuçları karşılaştırırsınız. Deneyler küçük başlar, bir test ortamında ya da sınırlı bir etki alanıyla (blast radius) yapılır ve kullanıcılar etkilenirse deneyi anında durduran bir iptal anahtarı bulunur.
Bir yangın tatbikatı gibidir: bir çıkışın tıkalı olduğunu keşfetmek için gerçek bir yangını beklemek yerine kontrollü koşullarda pratik yapar ve ters giden şeyi düzeltirsiniz. Chaos engineering, arızaların sürekli yaşandığı ve etkileşimlerin tamamen akıl yürütülemeyecek kadar karmaşık olduğu, Kubernetes üzerindeki mikroservisler gibi dağıtık sistemlerde en yararlıdır. Birçok ekip ayrıca, mühendislerin birlikte arıza enjekte ettiği ve olay müdahalelerini pratik ettiği planlı oturumlar olan game day'ler düzenler.
Chaos engineering sıklıkla yük testi ve stres testiyle karıştırılır. Yük testi bir sistemin beklenen trafik altında nasıl performans gösterdiğini kontrol eder, stres testi sistemi sınırlarının ötesine iter; chaos engineering ise trafiği normal tutarak dayanıklılığı, yani hata toleransını, failover'ı, yeniden denemeleri, zaman aşımlarını ve uyarıları test etmek için bileşenleri bozar. Amaç kaos için kaos değil, sistemin arızayı zarifçe ele aldığına dair güvendir.
Önemli noktalar
- Chaos engineering, gizli zayıflıkları ortaya çıkarmak için bilerek gerçek arızalar enjekte eder.
- Her deney ölçülebilir bir kararlı durumdan ve net bir hipotezden başlar.
- Deneyler etki alanını küçük tutar ve istenen her an iptal edilebilir.
- Failover, yeniden denemeler, zaman aşımları ve uyarılar gibi dayanıklılık özelliklerini test eder.
- Yük testi trafik ekler; chaos engineering normal trafik altında bileşenleri bozar.
Örnek
# Hypothesis: the web service stays healthy if one of its pods dies
kubectl get pods -l app=web
# Inject the failure: delete one pod at random
kubectl delete "$(kubectl get pods -l app=web -o name | shuf -n 1)"
# Add 200 ms of network latency on a test server (Linux)
sudo tc qdisc add dev eth0 root netem delay 200ms
# Watch error rates and latency, then remove the injected delay
sudo tc qdisc del dev eth0 root netemSık sorulan sorular
Chaos engineering canlı ortamda yapılır mı?
Olgun ekipler deneyleri canlı ortamda çalıştırır, çünkü gerçek trafik ve gerçek yapılandırmalar yalnızca orada vardır. Test ortamlarında başlarlar, etki alanını kullanıcıların ya da sunucuların küçük bir bölümüyle sınırlarlar ve temel metrikler bozulursa otomatik olarak dururlar.
Chaos engineering ile test arasındaki fark nedir?
Bir test bilinen bir durumu kontrol eder ve ya geçer ya da başarısız olur. Chaos engineering ise karmaşık bir sistemin bir şey bozulduğunda nasıl davrandığını araştıran bir deneydir ve çoğu zaman kimsenin test yazmayı düşünmediği sorunları ortaya çıkarır.
Game day nedir?
Game day, bir ekibin, örneğin tüm bir availability zone'u kapatmak gibi arızalara bilerek yol açtığı ve bunları algılayıp onlardan kurtulmayı pratik ettiği planlı bir oturumdur. Hem sistemi hem de ekibin olay müdahalesini test eder.
İlgili sayfalar
- Hata ToleransıYazılım Mimarisi, s. 17Hata toleransı, bir sistemin bazı donanım ya da yazılım bileşenleri arızalandığında, belki azalmış kapasiteyle de olsa doğru çalışmayı sürdürebilmesidir.
- Site Reliability EngineeringDevOps ve Bulut, s. 48Site reliability engineering, operasyona yazılım mühendisliğini uygulayan ve hizmetleri otomasyon ile ölçülebilir hedeflerle güvenilir tutan bir disiplindir.
- Stres TestiTest ve Kalite, s. 27Stres testi, kırılma noktasını bulmak ve düzgün biçimde başarısız olup toparlandığını doğrulamak için bir sistemi bilerek beklenen iş yükünün ötesine iter.
- Yük TestiTest ve Kalite, s. 36Yük testi, bir sistemin beklenen trafik altında nasıl davrandığını ölçmek için aynı anda çok sayıda kullanıcıyı ya da isteği simüle eden performans testidir.
- MikroservislerYazılım Mimarisi, s. 24Mikroservisler, bir uygulamanın ağ üzerinden iletişim kuran, küçük ve bağımsız olarak dağıtılabilen servislere bölündüğü bir mimari tarzdır.
- Yüksek ErişilebilirlikYazılım Mimarisi, s. 48Yüksek erişilebilirlik, bir sistemin, çoğunlukla yedeklilikle tek hata noktalarını ortadan kaldırarak neredeyse her zaman çalışır durumda kalabilmesidir.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin