Sam Newman, dağıtık sistemlerde mutlaka anlaşılması gereken 3 temel kavram olarak Timeouts (zaman aşımı), Retries (yeniden deneme) ve Idempotency (idempotency) kavramlarını vurguladı.
Paxos, Raft gibi karmaşık dağıtık algoritmalardan önce bu temel kavramların doğru şekilde ele alınmasının önemli olduğunu söyledi.
Dağıtık sistemlerin üç temel varsayımı
- Bilgi anında iletilmez.
- Karşı sistem yanıt vermeyebilir.
- Kaynaklar sonludur.
Bu üçü, dağıtık sistemlerdeki tüm karmaşıklığın temel nedenidir.
Timeouts (zaman aşımı)
Bir istek belirli bir süre içinde tamamlanmazsa durdurulmalıdır.
Kaynakların uzun süre meşgul edilmesi sistem aşırı yüküne ve kullanıcı açısından rahatsızlığa yol açabilir.
Newman bunu, “zaman aşımının tek bir isteğin başarısından çok sistemin genel sağlığını önceliklendirmesi” olarak açıkladı.
Önemli noktalar
- Ortalama çalışma süresi ve kullanıcı beklentileri anlaşılmalı
- Ayar değerleri, kod değişikliği olmadan esnek biçimde değiştirilebilmeli
Retries (yeniden deneme)
Aşırı yeniden deneme, sistem için kendi kendine DoS saldırısı haline gelebilir.
Yeniden deneme gerekli olsa da, istemci ve sunucu tarafındaki sınırlamalar ile ağ jitter'ı birlikte dikkate alınmalıdır.
Newman, jitter eklemenin faydalı olduğunu ancak exponential backoff'un tersine sistem üzerinde yük oluşturabileceğini söyledi.
Idempotency (idempotency)
Bir istek birden çok kez gönderilse bile sonucun aynı olması gerekir.
Bu çoğunlukla sunucu tarafının sorumluluğudur ve yeniden denemenin güvenli olabilmesi için ön koşuldur.
Gerçek senaryo
- İstek sunucuya hiç ulaşmadıysa: hiçbir şey olmaz
- Sunucu isteği işledi ama yanıt bağlantısı koptuysa: değişiklik gerçekleşmiştir ancak istemci bunu bilmez → idempotency gerekir
Uygulama yöntemleri
- İstek ID'si kullanımı: istemci, bunun tekrarlanan bir istek olduğunu anlayabilmek için bir tanımlayıcı verir
- Fingerprint yöntemi: isteğin gövdesinin hash değeri gibi verilere bakarak tekrar olup olmadığı belirlenir (zaman bilgisi kullanımı önerilmez)
Sonuç
“Aynı davranışı tekrarlayıp farklı sonuç beklemek deliliktir” sözünü alıntılayarak başladı,
ancak Newman, dağıtık sistemlerde yeniden denemenin aksine rasyonel olabileceğini söyledi.
Yine de yeniden denemelerin mutlaka güvenli şekilde yapılması ve bunun için zaman aşımı ile idempotency'nin birlikte tasarlanması gerektiğini vurguladı.
1 yorum
Devre kesici~