Kaos Mühendisliği 101
Konuya hızlıca bir giriş yapmak istersek; Kaos mühendisliği, distributed (dağıtılmış) bilgi işletim sisteminin, beklenmedik kesintilere dayanabilmesini sağlamak için test etme sürecidir. Rastgele ve beklenilmeyen davranış ve tutumlara odaklanan kaos teorisindeki kavramlara dayanır. Yani, kaos mühendisliğinin amacı, kontrollü deneyler yaparak random ve öngörülemeyen davranışları ortaya çıkarak bir sistemdeki zayıflığı tespit etmektir.
Kaos mühendisliğinin en büyük faydası, işletmelerin bu zayıflıkları bir hacker tespit etmeden veya sistem arızasından önce güvenlik açıklarını belirlemek için kullanabilmesidir. Testler sonucunda yapılan değişiklikler, işletmenin sistemlerine olan güveni artırır.
Bazı IT grupları, ekiplerin sistemleri kırmaya veya ihlal etmeye çalıştığı kaos mühendisliği oyun günleri düzenler. Bu oyun günlerinde başarısızlık modunu ve etkili analizler taktikleri yoluyla veya farklı farklı taktiklerle muhtemel başarısızlık noktaları hakkında fikir edinirler.
Kaos mühendisliği;
- Sistemin esnekliğini arttıracak bilgileri toplayabilmek için bir sistemi kasıtlı olarak yıkar.
- Yazılım testi ve kalite güvencesine yönelik yaklaşımdır.
- Özellikle modern distributed sistemler, ortamları ve süreçleri için uygundur.
Distributed bilgi işletim sistemi, bir ağ üzerinden birbirine bağlanan ve kaynakları paylaşan bir grup bilgisayarın bütünüdür. Ancak beklenmedik bir olay yaşandığında bu sistemler bozulabilir. Büyük dağıtılmış sistemlerde, bileşenler genellikle karmaşık olur ve beklenmedik bağımlılıkları bulunur ve bundan dolayı hataları düzeltmek veya hatanın ne zaman nasıl ortaya çıkacağını tahmin etmek oldukça zordur.
Distributed bilgi işletim sistemlerinin başarısız olmasının birden fazla yolu vardır. Örneğin; sistem ne kadar büyük ve karmaşıksa, davranışı o kadar öngörülemez ve kaotik görünür.
Kaos mühendisliği deneyleri, sistemi test etmek ve zayıflıkları bulmak için distributed bir sistemde kasıtlı olarak zorlu koşullar oluşturur. Deneyden çıkabilecek sorun örnekleri;
- Kör noktalar: İzleme yazılımının yeterli veri toplayamadığı noktalar.
- Gizli hatalar: Yazılımın arızalanmasına neden olabilecek aksaklıklar veya diğer sorunlardır.
- Performans çıkmazları: Verimlilik ve performansın iyileştirilebileceği durumlardır.
Kaos mühendisliği nasıl çalışır?
Kaos mühendisliği, sistem veya ağ sorunlarını tanımlamayı ve düzeltmeyi amaçlamasıyla stres testine benzer. Ancak stres testinden farklı olarak, kaos mühendisliği tek seferde bir bileşeni test etmez ve düzeltmez.
Kaos mühendisliği, sınırsız sayıda olası nedeni olan sorunları inceler. Sistem hakkında yeni bilgiler alabilmek amacıyla, ortadaki bariz sorunların da ötesine bakar ve distributed sistemleri, olma ihtimali daha düşük sorunlara veya sorun gruplarına karşı test eder.
Adımlar
- Temel çizginin ayarlanması: Önce bir temel oluşturun. Test uzmanları tarafından, sistemin en yüksek koşullarda nasıl çalışması gerektiğini belirlemeli ve normal çalışma durumunu neyin oluşturduğu belirtilmelidir.
- Hipotez oluşturma: Potansiyel zayıflıkları göz önünde bulundurun ve bu zayıflıkların etkileri hakkında bir hipotez oluşturun.
- Test: Büyük bir artışın sonuçlarını ölçmek için deneyler yapın. Testler, kritik süreçte oluşan bir hatayı veya beklenmedik bir neden-sonuç ilişkisini ortaya çıkarabilir. Örneğin, bir trafik artışı simülasyonu, bir depolama performansı sorununu ortaya çıkarabilir.
- Değerlendirme: Hipotezi ölçün ve değerlendirin. Sonuca göre hangi sorunların düzeltileceğini belirleyin.
Kaos mühendisliği ekiplerinin deneylerinde test ettikleri noktalar;
- Hem bildikleri hem anladıkları noktalar.
- Bildikleri halde tam olarak anlamadıkları noktalar.
- Anladıkları halde farkında olmadıkları noktalar.
- Tam olarak bilmedikleri ve anlamadıkları noktalar.
Sistemin performans sonucunu ve bütünlüğünü değerlendirmek için hataları ve arızaları ortaya çıkarabilecek ''eğer öyleyse'' sorularını sorma yöntemini kullanırlar.
Kaos mühendisliğinin temel ilkeleri
Kaos mühendisliği uygulanırken, Bilgisayar bilimcisi L. Peter Deutsch ve Sun Microsystems'deki meslektaşları tarafından geliştirilmiş olan, distributed hesaplamanın 8 yanılgısından oluşan bir liste hazırladılar. Bir probleme kaos mühendisliği uygularken yanlış varsayımlardan oluşan bu liste iyi bir başlangıç noktası sağlar. Sekiz yanılgı şunları içerir:
- Ağ güvenilirdir.
- Gecikme yoktur. (zero latency)
- Bant genişliği sınırsızdır.
- Ağ güvenlidir.
- Topoloji asla değişmez.
- Bir tane admin vardır.
- Taşıma maliyeti sıfırdır.
- Ağ eşit dağılmıştır.
Yukarıda verilen yanlış varsayımları, distributed bilgi işlem ortamlarında yapmak diğerlerine kıyasla daha kolaydır ve karmaşıklardan kaynaklanan rastgele görünen sorunların temelini oluşturur.
Kaos mühendisliğinde öneriler
Karmaşıklıkları önleyebilmek ve yanılgılardan kurtulmak için aşağıdaki uygulamaları uygulayabilirsiniz.
- Sistemin normalde nasıl davranışlara sahip olduğunu anlayın.
- Gerçekçi senaryoları simüle edin.
- Gerçek dünya şartlarını kullanarak test yapın. Test yaparak en doğru sonuçları alabilirsiniz.
- Patlama yarıçapını en az seviyeye çekin. Üretim ortamlarında yapılan testler genelde boş zamanlarda yapılır ve normalde ideal olan, sistemi kullananlar kaos deneyi yaptıklarını söylemez. Deneylerin sorunlara neden olması durumunda hizmetlerin kullanılabilir durumda kalmasını sağlamak için fazladan ürün kalmalıdır.
- Kaos mühendisliği testi, işlem sınırına ulaşıldığında yazılımın nasıl tepki vereceğini belirlemekte kullanılabilir. Örneğin performans kalitesi düşer mi? sistem çöker mi? vb.
- Kaos mühendisliği, kaynak sıkıntısı veya tek bir arıza noktası olduğunda distributed sistemin ne şekilde tepkiler oluşturacağını test etmek için kullanılabilir. Sistem başarısız olursa, geliştiriciler değişiklikler yapabilir ve daha sonra istenilen sonuçların elde edilip edilmediğini öğrenmek için test tekrarlanır.
Kaos mühendisliği örnekleri
- 2015 yılında Amazon'un DynamoDB'si kullanılan bölgelerden birinde kullanılabilirlik sorunu yaşadı. Yaşadığı bu gecikme sorunu, DynamoDB'ye bağlı 20'den fazla Amazon Web Hizmetinin o bölgede başarısız olmasına neden oldu.
- Netflix de dahil bu hizmetleri kullanan siteler birkaç saatliğine kapandı. Ancak Netflix, böyle bir durumun gelişebilme ihtimaline karşı, Chaos Kong adlı bir kaos mühendisliği aracı oluşturarak diğer sitelere göre durumu daha az kayıpla kurtardı.
Kaos mühendislik araçları
Netflix, kaos mühendisliğinin kullanımında önemli bir öncülerden birisidir ve prodüksiyon sistemlerinde bu mühendisliği ilk kullananlardan biridir. Netflix açık kaynaklı kaos testi otomasyon platformlarını tasarladı ve bunu topluca Simian Army olarak adlandırdı.
Simian Army paketinde bulunan araçlardan bazıları;
- Kaos Kong: AWS kullanılabilirlik bölgelerinin tamamını devre dışı bırakır.
- Kaos Monkey: Bir sistem arızası yaratmak için üretim ortamı örneklerini rastgele devre dışı bırakır ve bunu yaparken müşterilerin aktivitelerine hiçbir şekilde etkisi olmaz. , ancak müşteri etkinliği üzerinde hiçbir etkisi olmayacak şekilde tasarlanmıştır.
- Kaos Gorilla: Chaos Monkey'in daha büyük ve etkili hali denebilir.
- Latency: Ağ kesintilerini ve bozulmasını simüle etmek için gecikme sağlar.
- Simorg: Açık kaynaklı bir arıza oluşturan program.
- Maymun Operasyonları: Rastgele bileşenleri ve distribute yapılandırmalarını test etmek ve sonlandırmak için oluşturulan açık kaynaklı araç.
- Gremlin: Perakende ve finans sektörlerine odaklanır
- AWS Hata Enjeksiyon Simülatörü: AWS'nin üretim bulut sunucularına ekleyebileceği hata şablonlarını içerir.
Bu yazımızda kaos mühendisliğinin ne olduğunu, önemini, amacını ve kaos mühendisliği araçlarını anlattık. Umarım yazımız işinize yarayacaktır.