Kaos Mühendisliğine Giriş (Chaos Engineering)

Mirac Celikates
Turk Telekom Bulut Teknolojileri
5 min readNov 11, 2023

Herkese merhaba,

Bu yazımda sizlere kaos mühendisliğinin ne olduğu ve ortaya çıkışı konularını aktaracağım.

Kaos Mühendisliği Nedir?

Kaos mühendisliği, bir sistemde oluşabilecek kaotik durumları engellenmesi ve azaltılması için kontrollü kaos çalışmalarının yapılmasıdır. Geliştiriciler tarafından kontrol altında bir kaotik durum oluşturulur ve bu kaotik durumda sistem test edilerek sistemin zayıf noktaları, sistemin geneline olan etkisi, sürdürülebilirliği gibi konularda bilgi sahibi olunur.

Daha akılda kalıcı olması amacıyla size aşı örneğini verebilirim.
İnsan bünyesine, kontrollü ve etkisi az olan hastalık-aşı olunur. Bunu kaos olarak düşünebilirsiniz. İnsan bünyesine geçtikten sonra bağışıklık hastalığın etkilerini anlamaya çalışır. Hangi organlara uzuvlara ne gibi etkileri var? Hangi etkileri gösteriyor? Bende ne gibi hasar bırakıyor?

Ayrıca bağışıklık bu kaosu tanımaya çalışır ve nasıl üstesinden gelebilirim diye kendisini geliştirir.

Bağışıklık başarılı olunca kaosu sonlandırır. Bir daha bu kaotik durumla karşılaştığında ne yapacağını bilir ve kaos büyümeden kolayca üstesinden gelir.

Kaos mühendisliğini de bunun gibi düşünebilirsiniz. Sistemde kontrollü bir kaos meydana gelir. Nereler bundan etkilendi? Hangi sistemler ayakta? Bunun nasıl üstesinden gelebiliriz? Bu gibi soruların cevapları bulunur ve kaotik durumların önüne geçmek hedeflenir.

Kaos Mühendisliğinin Ortaya Çıkışı

Mikroservis mimarisinin avantajları ortaya çıkması ile birlikte birçok firma, yüksek performansa sahip olma ve daha iyi hizmet sunma amacıyla mikroservis mimarisine geçiş sürecine başladı. Bu firmalardan birisi de günümüzün en popüler firmalarından birisi Netflix’ti.

Lakin her yenilik, yeni ihtiyacı beraberinde getirir. Geleneksel yapı olarak da adlandırılan monolitik yapı, düz ve tek bir servis aracılığıyla yürütülmektedir. Mikroservis mimarisinde ise servisleri örümcek ağının kesişim noktaları olarak düşünebilirsiniz. Onlarca servis çalışmakta ve birbirleriyle sürekli iletişim halindeler. Haliyle servislerin anlık durumu ve dayanıklılığını kontrol etmek zahmetli olacaktı.

2010 yılında sistemlerini AWS ortamlarına aktarma çabasında olan Netflix, monolitik yapıdan mikroservis mimarisine geçiş sürecinde ve sonrasında yaşayabileceği problemleri, sistemin dayanıklılığını ve potansiyelini öncesinden öğrenmek istiyordu. Sistemlerin yalnızca birkaç dakika hizmet verememesi durumunda binlerce dolar kaybı olduğunu düşünürsek bu endişede haklılık payları bulunmakta.

Lakin Netflix’in bu ihtiyacını karşılayabilecek bir çalışma yoktu. Bu sebeple Netflix kendi canlı ortamlarının zaafiyetleri tespit etme, sistemin tamamen karşılık veremeyecek seviyelere kadar getirerek sistemin neler yaptığı, ne gibi etkilerinin olduğunu ve çalışanların bunları nasıl düzeltebileceğini bulma amacıyla Chaos Monkey adlı aracı geliştirdiler.

Chaos Monkey

Peki neden böyle bir isim verdiler?

Bu araç geliştirilirken projelerin bulunduğu server-sistem odasına bir maymunun salıverildiği ve tamamen bir veya birden çok sistemi kapatacak hareketler yapacağı düşünülerek böyle bir isim verildi.

Belirli bir hizmeti veya sunucuyu rastgele seçiyordu ve onu devre dışı bırakarak sistemin nasıl tepki verdiğini kontrol etmektedir.

Bu, beklenmeyen hata senaryolarına karşı sistem güvenilirliğini artırmak için yapılır. Eğer sistem bir hizmet kaybına dayanıklıysa, gerçek dünyada meydana gelebilecek sorunlara karşı daha hazırlıklı olacaktır.

Hatta Netflix bu çalışmaları öyle bir düzene getirdi ki mesai saatlerinde çalışmalar yapılırken bile otomatikleştirilmiş döngü şeklinde çalışmaları yapabiliyordu.

Chaos Monkey, yıllar sonra oluşacak Kaos Mühendisliği uzmanlığının temellerini oluşturacaktı.

2012 yılında Netflix, Chaos Monkey’in kaynak kodlarını Github üzerinden paylaştı.
Meraklısına linki : https://github.com/Netflix/chaosmonkey

Simian Army

Tarih 2011'ü gösterdiğinde Netflix, Chaos Monkey’in daha gelişmiş ve daha kaotik durumları oluşturabilen Simian Army adlı aracını geliştirdi. Simian Army, Chaos Monkey gibi farklı kaos araçları içermekteydi. Örneğin:

Chaos Gorilla:

Chaos Gorilla, bir bölgedeki tam bir altyapı bölümünü devre dışı bırakarak büyük bir ölçekli hata durumunu simüle eder. Örneğin, bir AWS bölgesinin tamamen kaybını taklit edebilir. Böylece büyük çaplı hata senaryolarını ele alarak, sistemin genel dayanıklılığını değerlendirir ve felaket durumlarına karşı nasıl tepki vereceğini test eder.

Chaos Kong:

Netflix’in ölçeklenebilirliği ve hata toleransını test etmek amacıyla kullanılır. Belirli bir bölgedeki kaynak kullanımını artırarak sistemi maksimum kapasiteye zorlar. Böylece gerçek dünyada aniden artan taleplere karşı sistemlerin nasıl tepki vereceğini görmek için yapılan bu tür testler, Netflix’in yüksek talep anlarında hizmet kalitesini korumasına yardımcı olmaktadır.

Simian Army şu şekilde düşünülebilir:

  • Projelerin bulunduğu server-sistem odasına maymunu saldık. Elektrik kablosunu kemirmeye başladı. Evet maymunumuz hafif hasarla kurtuldu lakin sisteminiz kurtulabilecek mi?
    X servisinde sistem kesintisi ve Y — Z servislerindeki sonuçları
  • Ayağı internet kablosuna çarptı ve Y servisine çok düşük erişim bulunmakta.
    Y servisindeki kayıptan dolayı hangi servisler ne kadar veri kaybına uğramakta, diğer servisler bu görevi üstlenebiliyor mu?

Kaos Mühendisliği Teriminin Ortaya Çıkışı ve Kullanımı

Tüm bu çalışmalar sonrasında Netflix, bu tür kontrollü kaos testleri uygulama pratiğiyle birlikte ve genel olarak, büyük ölçekli ve karmaşık sistemlerin dayanıklılığını artırmak amacıyla bir mühendislik yaklaşımını ifade etmek için Kaos Mühendisliği terimini ilk defa kullanmaya başlanmıştır.

Kaos Mühendisliğinde es geçilmemesi gereken ayrı bir nokta ise, kaos araçları ilk olarak mikroservis mimarisinde, oluşan bir sıkıntının ne kaynaklı olduğunu bulmak ve bu servis yapısının getirdiği yönetim sıkıntılarını gidermek amacıyla yapıldı. Günümüzde ise monolitik yapılarda da (Örneğin bankacılık sistemleri) kaos mühendisliği yapılmaktadır. Bu kaos mühendisliğinin amacını aşmış başarısını ve sistemlerin bu alanda duyduğu ihtiyaçlarını göstermektedir.

Sonuç

Kaos mühendisliği sistemin daha stabil çalışması, sistemin tüm potansiyelinin görülebilmesi ve kaos durumlarıyla başa çıkılmasını için kritik öneme sahiptir. Büyük kriz anlarının öngörülerek buna göre yol planı çıkarılması ve bu durumlarda sisteme yapılması gerekenleri deneyim edilerek maddi ve zaman kaybını önlemede büyük faydası bulunur.

Bu yazımda kaos mühendisliğinin temellerine değindik. Bir sonraki yazımda Bulut Bilişim sektöründe ne tür uygulamalar olduğu ve mantığına değinmeyi planlıyorum. Zaman ayırdığınız için çok teşekkürler!

--

--