Güvenilirlik bir aşama değil, bir özelliktir
Sessizce çöken yazılım bitmiş değildir. Güvenilirliği sona bırakılan bir umut değil, tasarımın parçası yapan beş alışkanlık.
en Read this article in EnglishEkipler güvenilmez yazılım inşa etmeye nadiren karar verir. “Önce çalışsın” ve “sonra sağlamlaştırırız” derler. O “sonra”, bir olay olarak gelir.
Güvenilirlik, bir projenin sonundaki bir aşama değildir. Tasarımın bir özelliğidir ve en ucuz olduğu gün ilk gündür. Vazgeçilmez kabul ettiğimiz beş alışkanlık:
1. Mutlu senaryoyu yazmadan önce hata senaryolarını adlandırın
Her dış çağrı için üç soru sorun: yavaş kalırsa, başarısız olursa ve iki kez başarılı olursa ne olur? Cevapları yazmak, belirsiz riski somut tasarıma dönüştürür: zaman aşımları, geri çekilmeli yeniden denemeler ve bağımlılık çöktüğünde kullanıcının ne göreceğine dair bir karar.
2. İşlemleri idempotent yapın
Ağlar yeniden dener. Kullanıcılar çift tıklar. İşçi süreçler bir işin ortasında yeniden başlar. Bir işlemi iki kez çalıştırmak müşteriden iki kez ücret alabiliyor ya da kopya kayıt oluşturabiliyorsa, hata zaten vardır — sadece henüz yaşanmamıştır. İdempotentlik anahtarları ve veritabanındaki tekillik kısıtları sıkıcı ama güvenilir çözümdür.
3. Asla yanlış olmaması gerekeni veritabanına zorlatın
Uygulama kodunun birçok yolu vardır; bir kısıtın tek bir yolu. Bir kural mutlaka geçerli olmalıysa — bir tutar asla negatif olmaz, bir e-posta tekildir, bir durum yalnızca ileri gider — onu bir CHECK, bir UNIQUE indeks ya da bir trigger’a koyun. Uygulama yine doğrulama yapmalı; ama veritabanı atlanamayan son çizgidir.
4. Gece üçte bilmek isteyeceğiniz şeyi gözlemleyin
Kimsenin okumadığı loglar gözlemlenebilirlik değildir. Sistemin sağlıklı olduğunu söyleyen birkaç sinyale karar verin — hata oranı, gecikme, kuyruk derinliği, işlenmemiş en eski işin yaşı — ve bunlar bozulduğunda bir insanın alarmı gördüğünden emin olun. Sonra gürültüyü temizleyin; çünkü her gün çalan bir alarm, görmezden gelinen bir alarmdır.
5. Kahramanlıkla değil, tasarımla toparlanın
Bir süreç çöktüğünde geride hangi durumu bırakır? İyi bir sistem herhangi bir anda yeniden başlatılabilir ve tahmin yürütmeden doğru duruma yakınsar. Bu genellikle harekete geçmeden önce niyeti kaydetmek ve toparlanırken eylemi tekrarlamak yerine gerçeği kontrol etmek demektir.
Maliyet hesabı
Bu alışkanlıkların her biri tasarım aşamasında saatlere mal olur. Atlandığında ise her biri bir olay sırasında günlere — ve geri kazanılması en zor şey olan güvene — mal olur. Güvenilirliğe bir özellik dememizin nedeni bu: kullanıcıların fark etmeseler bile deneyimledikleri bir şeydir.
Benzer bir problem üzerinde mi düşünüyorsunuz?
Duymak isteriz.