Hata toleranslı bir mimari, IT sistemlerinin bireysel bileşenlerin arızalanması durumunda bile kesintisiz çalışmasını sağlamak için gereklidir. Temel ilke, yedekleme (redundancy), yük dengelemesi (load balancing) ve otomatik geri yükleme (failover) yoluyla tek bir arıza noktasının ortadan kaldırılmasıdır.
Klasik bir hata toleranslı sistem şeması, sunucu kümeleri, çoğaltılmış veritabanları, yük dengeleyicileri ve izleme sistemlerini içerir. Büyük sistemler için coğrafi dağıtım uygulanır - replikaların farklı veri merkezlerinde yer alması.
Birden fazla upstream ile nginx yapılandırma örneği:
upstream backend { server backend1.example.com; server backend2.example.com; server backend3.example.com; least_conn; } server { listen 80; server_name example.com; location / { proxy_pass http://backend; } }
Anahtar özellikler:
Eğer veritabanı çoğaltılmışsa, replikalar arasında veri tutarlılığını her zaman garanti edebilir miyiz?
Hayır, tutarlılık, seçilen çoğaltma modeline (strong/ eventual consistency) bağlıdır. Örneğin, eventual consistency için senkronizasyon gecikmeleri bazı replikalarda "eski" verilerin görünmesine neden olabilir.
Yük dengeleyici, backend’in erişilemezlik sorununu kendisi düzeltebilir mi?
Hayır, yük dengeleyici sadece çalışmayan sunucuyu havuzdan çıkarabilir, ama onaramaz. Otomatik geri yükleme için ek hizmetler kullanılır (örneğin, Kubernetes türü bir orkestra sistemi).
Basitçe bir sunucu kümesi ayarlamak, hata toleransı için yeterli midir?
Hayır, ağ altyapısının, depolamanın ve diğer bileşenlerin hata toleransını da izlemek önemlidir. Herhangi bir kısmın planlamasındaki hatalar, tüm sistemi tehlikeye atabilir.