Bir bilişim sisteminden genellikle güvenilir, hızlı ve kesintisiz olması beklenir. Sunucular susmasın, veritabanı tökezlemesin, kullanıcılar hata ekranıyla karşılaşmasın isteriz. Fakat gerçek dünya steril bir laboratuvar değildir: diskler bozulur, ağlar yavaşlar, trafik aniden yükselir, insanlar yanlış düğmeye basar. Bu nedenle asıl soru, sistemin stresten kaçıp kaçamayacağı değil, stresle karşılaştığında neye dönüşeceğidir. Kırılgan sistem darbe alınca bozulur; dayanıklı sistem darbeye rağmen aynı kalır; antikırılgan sistem ise darbe sayesinde öğrenir ve güçlenir.
Dayanıklılıktan fazlası
Antikırılganlık, her arızadan mucizevi biçimde kazanç çıkarmak değildir. Daha teknik bir ifadeyle sistemin hata sinyallerini bilgiye, bilgiyi de yapısal iyileştirmeye dönüştürebilmesidir. Bir servis çöktüğünde yalnızca yeniden başlatılıyorsa dayanıklılıktan söz ederiz. Çöküşün nedeni otomatik olarak saptanıyor, benzer yükler kontrollü biçimde yeniden üretiliyor ve mimari aynı hatanın etkisini küçültecek şekilde değiştiriliyorsa antikırılganlığa yaklaşırız. Arıza artık yalnızca düşman değil, pahalı fakat dürüst bir test uzmanıdır.
Buradaki temel yöntem, büyük felaketleri beklemek yerine sisteme küçük ve denetlenebilir stresler uygulamaktır. Kaos mühendisliği bunun en bilinen örneğidir. Rastgele bir sunucuyu kapatmak, ağ gecikmesi oluşturmak veya bağımlı bir servisi geçici olarak erişilemez kılmak ilk bakışta dijital sabotaj gibi görünebilir. Ancak güvenli sınırlar, geri dönüş planları ve açık hipotezlerle uygulandığında bu deneyler görünmeyen bağımlılıkları ortaya çıkarır. Kontrollü küçük yangınlar, kontrolsüz büyük yangınların yakıtını azaltır.
Antikırılgan mimarinin anatomisi
Bu yaklaşımın ilk şartı modülerliktir. Tek bir parçadaki hata bütün sistemi sürüklememelidir. Mikroservis kullanmak tek başına çözüm değildir; kötü tasarlanmış yüz mikroservis, kötü tasarlanmış bir monolitten daha kırılgan olabilir. Önemli olan hata alanlarını ayırmak, servisler arasında zaman aşımı ve devre kesici kullanmak, kuyruklarla ani yükleri emmek ve işlemleri tekrar çalıştırılabilir tasarlamaktır. Yedeklilik de gereksiz masraf değil, belirsizlik karşısında satın alınmış hareket alanıdır.
İkinci şart gözlemlenebilirliktir. Ölçemediğiniz stres sizi eğitemez. Günlükler, metrikler ve dağıtık izler yalnızca gösterge panolarını süslemek için değil, sistemin davranışını açıklamak için birlikte kullanılmalıdır. Ortalama yanıt süresi iyi görünürken kullanıcıların küçük bir bölümü felaket yaşıyor olabilir. Bu yüzden yüzdelik dilimler, hata bütçeleri ve hizmet seviyesi hedefleri daha anlamlıdır. Antikırılgan sistem, sadece nabzını ölçmez; hangi koşulda neden ateşlendiğini de hatırlar.
İnsan faktörü: Suçlama mı, öğrenme mi?
Teknik mimari kadar ekip kültürü de belirleyicidir. Her olaydan sonra bir suçlu aranıyorsa çalışanlar hataları saklamayı öğrenir. Suçlamasız olay incelemeleri ise kişinin dikkatsizliğinden önce, o dikkatsizliği felakete dönüştüren koşulları sorgular. Neden tek bir komut üretim ortamını silebildi? Neden geri alma işlemi denenmemişti? Neden uyarı anlaşılmazdı? İyi inceleme bir mahkeme tutanağı değil, gelecekteki sistemin tasarım belgesidir. Hafızaya dönüşmeyen acı, yalnızca tekrarlanan masraftır.
Yine de antikırılganlık adına her şeyi kaosa bırakmak tehlikelidir. Müşteri verisini riske atmak, plansız deney yapmak veya sürekli kriz hâlini romantikleştirmek öğrenme değil ihmaldir. Amaç sistemi dövmek değil, dozlanmış stresle kapasitesini keşfetmektir. Kanarya dağıtımları, özellik bayrakları, otomatik geri dönüşler, yük testleri ve düzenli felaket tatbikatları bu dozajı yönetir. En güçlü sistem hiç düşmeyen sistem değildir; düşüşlerini sınırlayan, nedenlerini anlayan ve her seferinde aynı çukura daha az yaklaşan sistemdir.