Hata Toleransı
- İngilizcesi
- Fault Tolerance
- Türkçe karşılığı
- hataya dayanıklılık
- Okunuşu
- folt tolırıns
Günlük kullanımda iki ad da yaygın.
Kısaca
Hata 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.
Hata toleransı (fault tolerance) nedir?
Hata toleransı, bir sistemin parçaları bozulduğunda bile çalışmaya devam etmesini sağlayan özelliktir. Diskler bozulur, sunucular çöker, ağlar paket kaybeder ve bağımlılıklar zaman aşımına uğrar; hata toleranslı bir sistem bu hataları önceden bekler ve kullanıcıların fark edeceği arızalara dönüşmeyecek şekilde tasarlanır. Mühendisler, tek bir bileşendeki kusur ya da bozulma olan hata (fault) ile sistemin bir bütün olarak hizmetini sunmayı bırakması olan arızayı (failure) birbirinden ayırır.
Temel yedekliliktir: biri bozulduğunda bir diğerinin devralabilmesi için donanımın, verinin ya da servislerin fazladan kopyaları; RAID disk dizilerinde, çoğaltılmış veritabanlarında ya da veri üzerinde anlaşmak için çoğunluk oyu (quorum) kullanan kümelerde olduğu gibi. Yazılım ise zaman aşımları, üstel geri çekilmeli (exponential backoff) yeniden denemeler, arızalı bir bağımlılığı çağırmayı bırakan circuit breaker'lar, bir arızanın her şeyi tüketmemesi için kaynakları yalıtan bulkhead'ler ve tekrarlanması güvenli idempotent işlemler gibi teknikler ekler. Bir şey kurtarılamadığında zarif bozulma (graceful degradation), örneğin hata sayfası yerine önbellekteki önerileri göstererek çekirdek işlevi çalışır tutar.
Çift motorlu uçak klasik örnektir: tek motorla güvenle uçup inecek şekilde tasarlanmıştır, bu yüzden birini kaybetmek kazaya yol açmaz. Hata toleransı havacılıkta, tıbbi cihazlarda, veritabanlarında, ödeme işlemede ve ekiplerin çoğu zaman kaos mühendisliği (chaos engineering) ile, yani sistemin bunlardan sağ çıktığını doğrulamak için hataları kontrollü şekilde enjekte ederek bilerek test ettiği büyük dağıtık sistemlerde şarttır.
Hata toleransı sıklıkla yüksek erişilebilirlikle karıştırılır. Yüksek erişilebilirlik kesintiyi en aza indirmeyi hedefler ve trafik bir yedeğe geçerken kısa bir kesintiyi kabul edebilir; hata toleransı ise hiç kesinti olmamasını hedefler ve bu genellikle paralel çalışan tamamen yedekli bileşenler gerektirir ve daha pahalıdır. Hata toleransı ayrıca tek bir fonksiyondaki hata yönetiminden daha geniştir: bir istisnayı yakalamak yerel bir çözümdür, hata toleransı ise bütün sistemin tasarımının bir özelliğidir.
Önemli noktalar
- Hata toleransı, bileşenler arızalandığında bir sistemi doğru çalışır tutar.
- Hata (fault), bir bileşendeki sorundur; arıza (failure) ise tüm hizmetin durmasıdır.
- Temeli yedekliliktir; zaman aşımları, yeniden denemeler ve circuit breaker'lar bunu destekler.
- Zarif bozulma, diğerleri kurtarılamadığında çekirdek özellikleri çalışır tutar.
- Hata toleransı hiç kesinti hedefler; yüksek erişilebilirlik kısa bir kesintiyi kabul eder.
Örnek
// Try each replica in turn so one failed node doesn't fail the request
async function readWithFailover(replicas: string[], key: string) {
for (const url of replicas) {
try {
const res = await fetch(`${url}/items/${key}`, { signal: AbortSignal.timeout(2000) });
if (res.ok) return await res.json();
} catch {
// Timeout or network error: move on to the next replica
}
}
// Graceful degradation: every replica failed, so return a safe default
return { key, value: null, stale: true };
}Sık sorulan sorular
Hata toleransı ile yüksek erişilebilirlik arasındaki fark nedir?
Hata toleransı, bir bileşen arızalandığında genellikle paralel çalışan yedekli bileşenlerle kesintisiz çalışmaya devam eden bir sistemi hedefler. Yüksek erişilebilirlik ise en az kesinti süresini hedefler ve bir yedek devralırken kısa bir kesintiye izin verebilir.
Hata (fault) ile arıza (failure) arasındaki fark nedir?
Hata, çöken bir sunucu ya da bozulmuş bir disk gibi sistemin bir parçasındaki bir sorundur. Arıza ise sistemin bir bütün olarak hizmet vermeyi bırakmasıdır ve hata toleransı, hataların arızaya dönüşmesini engellemeye çalışır.
Hata toleransı nasıl test edilir?
Ekipler kaos mühendisliği ve hata enjeksiyonu testleri kullanır; sunucuları bilerek kapatır, ağ gecikmesi ekler ya da bağımlılıkları kontrollü biçimde engeller. Ardından sistemin kullanıcılara hizmet vermeye devam edip tasarlandığı gibi toparlandığını kontrol ederler.
İlgili sayfalar
- 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.
- Circuit Breaker DeseniYazılım Mimarisi, s. 4Circuit breaker deseni, arızalı bir bağımlılığa yapılan çağrıları bir süre durdurarak ve zaman aşımlarını beklemek yerine hızlıca hata vererek sistemi korur.
- Veritabanı ReplikasyonuVeritabanları, s. 41Veritabanı replikasyonu, verinin bir sunucudan diğerlerine sürekli kopyalanmasıdır; böylece birkaç sunucu güvenilirlik ve ölçek için aynı veriyi tutar.
- Chaos EngineeringDevOps ve Bulut, s. 8Chaos 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.
- Exponential BackoffBackend ve API'ler, s. 14Exponential backoff, her başarısız denemeden sonra 1, 2, 4, 8 saniye gibi giderek daha uzun bekleyen yeniden deneme stratejisidir; zorlanan servis toparlanır.
- IdempotencyBackend ve API'ler, s. 23Idempotency, bir işlemin bir kez de çalışsa çok kez de çalışsa aynı sonucu üretmesi özelliğidir; böylece bir isteğin yanlışlıkla tekrarlanması güvenli olur.
- Dağıtık SistemYazılım Mimarisi, s. 8Dağıtık sistem, bir ağ üzerinden birlikte çalışan ve kullanıcılarına tek bir sistem gibi görünen bilgisayarlar kümesidir.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin