Ana içeriğe geç

Nihai Tutarlılık

İngilizcesi
Eventual Consistency
Okunuşu
ivençuıl kınsistınsi
Güncellendi 2 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/eventual-consistency

Kısaca

Nihai tutarlılık, yeni güncelleme yapılmazsa dağıtık bir sistemdeki bir verinin tüm kopyalarının zamanla özdeş hale geleceğine dair bir garantidir.

Nihai tutarlılık (eventual consistency) nedir?

Nihai tutarlılık, aynı verinin birkaç kopyasını, yani replikasını farklı sunucularda tutan sistemlerin kullandığı bir tutarlılık modelidir. Bir yazmanın hemen ardından bazı replikalar hâlâ eski değeri döndürebilir, ancak güncellemeler durduğunda tüm replikalar aynı değerde birleşir. Model bunun ne kadar süreceğini vaat etmez; pratikte genellikle milisaniyeler ile saniyeler arasındadır.

Nihai tutarlı bir sistemde bir yazma bir ya da birkaç replika tarafından kabul edilir ve hızla onaylanır; değişiklik ise arka planda diğer replikalara yayılır. İki replika aynı anda çakışan yazmalar kabul ederse sistem çakışmayı son yazan kazanır (last writer wins), sürüm vektörleri ya da özel çakışmasız çoğaltılmış veri türleri (CRDT) gibi bir kuralla çözer. Read repair ve anti-entropy senkronizasyonu gibi arka plan süreçleri geride kalan replikaları günceller; bazı veritabanları da her isteğin kaç replikanın yanıt vermesi gerektiğini seçmesine izin vererek hızı daha taze okumalarla takas eder.

Nihai tutarlılık, bir kasabada yayılan haberlere benzer: bir dükkân çalışma saatlerini değiştirdiğinde bazı insanlar hemen öğrenir, bazıları sonra duyar, ama sonunda herkes yeni saatleri bilir. DNS, CDN önbellekleri, sosyal medya beğeni sayaçları, alışveriş sepetleri, birçok NoSQL veritabanı ve ilişkisel veritabanlarının okuma replikaları hep bu şekilde davranır. Sistemler bunu, ağın bazı kısımları arızalansa bile hızlı ve erişilebilir kaldıkları için seçer; bu, CAP teoreminin tarif ettiği bir ödünleşimdir.

Nihai tutarlılık çoğu zaman ACID ile karşılaştırılır, ancak farklı şeyleri tarif ederler. ACID'deki C, bir transaction'ın veriyi veritabanının kurallarına göre geçerli tutması demektir ve ACID yalıtımı, genellikle tek bir veritabanında, eşzamanlı transaction'ların ne gördüğünü denetler. Nihai tutarlılık ise replikaların ne kadar çabuk uzlaştığıyla ilgilidir; karşıtı, her okumanın en son yazmayı döndürdüğü güçlü tutarlılıktır. Nihai tutarlılık ayrıca verinin kaybolduğu veya rastgele olduğu anlamına gelmez; yalnızca okumaların kısa süreliğine bayat olabileceği anlamına gelir.

Önemli noktalar

  • Replikalar kısa süre uyuşmayabilir, ancak güncellemeler durduğunda birleşir.
  • Yazmalar hızla onaylanır ve arka planda diğer replikalara yayılır.
  • Çakışan yazmalar son yazan kazanır ya da CRDT'ler gibi kurallarla çözülür.
  • Erişilebilirliği ve hızı tercih eder; bu, CAP teoreminin açıkladığı bir ödünleşimdir.
  • Her okumanın en son yazmayı gördüğü güçlü tutarlılıktan farklıdır.

Örnek

Bir replikadan bayat okumajavascript
// The write goes to the primary database
await primary.query("UPDATE users SET name = 'Ada' WHERE id = 1");

// A read from a replica a moment later may still return the old name
const maybeStale = await replica.query("SELECT name FROM users WHERE id = 1");

// Read-your-own-writes: after a write, read from the primary
// (or wait until the replica has caught up) when freshness matters
const fresh = await primary.query("SELECT name FROM users WHERE id = 1");

Sık sorulan sorular

Nihai tutarlılık ne kadar sürer?

Tanımda sabit bir sınır yoktur. Sağlıklı sistemlerde replikalar genellikle milisaniyeler veya birkaç saniye içinde uyuşur, ancak ağ sorunları ya da aşırı yüklenmiş sunucular bunu uzatabilir.

Nihai tutarlılık ile güçlü tutarlılık arasındaki fark nedir?

Güçlü tutarlılıkta her okuma, sanki verinin tek bir kopyası varmış gibi, en son yazmayı döndürür. Nihai tutarlılıkta ise bir okuma kısa süre eski bir değer döndürebilir; bu da sistemin daha hızlı ve daha erişilebilir kalmasını sağlar.

Nihai tutarlılık ACID'nin karşıtı mıdır?

Tam olarak değil. ACID transaction'lar için garantileri tarif eder; nihai tutarlılık ise replikaların zaman içinde nasıl uzlaştığını tarif eder. Nihai tutarlı sistemler çoğu zaman daha gevşek BASE modeliyle tanımlanır: basically available, soft state, eventually consistent.

İlgili sayfalar

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar