Sade İngilizcede nihai tutarlılık


130

Sıklıkla NoSQL, veri ızgaraları vb. Hakkında farklı konuşmalarda nihai tutarlılık olduğunu duyuyorum. Görünüşe göre nihai tutarlılığın tanımı birçok kaynakta farklılık gösteriyor (ve hatta belki de somut bir veri depolamasına bağlı).

Herhangi biri, herhangi bir somut veri depolamayla ilgili olmayan, Genel anlamda Nihai Tutarlılığın ne olduğu konusunda basit bir açıklama yapabilir mi?


1
Örneğin Wikipedia yardımcı olmadı mı? en.wikipedia.org/wiki/Eventual_consistency
Oliver Charlesworth

22
@OliCharlesworth: hayır. Belki sadece benim ama iki kez okuduktan sonra bile kesinlikle belirsiz.
Roman

Yanıtlar:


228

Nihai tutarlılık:

  1. Hava raporunu izliyorum ve yarın yağmur yağacağını öğreniyorum.
  2. Size yarın yağmur yağacağını söylüyorum.
  3. Komşunuz karısına yarın hava güneşli olacağını söylüyor.
  4. Komşunuza yarın yağmur yağacağını söyleyin.

Sonunda, tüm sunucular (siz, ben, komşunuz) gerçeği biliyor (yarın yağmur yağacak), ancak bu arada müşteri (karısı) sormasına rağmen hava güneşli olacağını düşünerek oradan ayrıldı. sunuculardan biri veya daha fazlası (siz ve ben) daha güncel bir değere sahip olduktan sonra.

Katı Tutarlılık / ACID uyumluluğunun aksine:

  1. Banka bakiyeniz 50 ABD dolarıdır.
  2. 100 $ yatırırsınız.
  3. Herhangi bir ATM'den sorgulanan banka bakiyeniz 150 $ 'dır.
  4. Kızınız ATM kartınızla 40 $ çekiyor.
  5. Herhangi bir ATM'den sorgulanan banka bakiyeniz 110 $ 'dır.

Bakiyeniz hiçbir zaman hesabınızda o ana kadar yapılan tüm işlemlerin gerçek toplamından başka bir şey yansıtamaz.

Bu kadar çok NoSQL sisteminin nihai tutarlılığa sahip olmasının nedeni, neredeyse hepsinin dağıtılmak üzere tasarlanmış olması ve tam olarak dağıtılmış sistemlerde, katı tutarlılığı sürdürmenin süper doğrusal ek yükünün olmasıdır (yani, yalnızca işler yavaşlamaya başlamadan önce şu ana kadar ölçeklendirebilirsiniz. düşürüldüklerinde, ölçeklendirmeyi sürdürmek için soruna katlanarak daha fazla donanım atmanız gerekir)


Ben anlamıyorum. Büyüme doğrusal mı yoksa üstel mi?
Maciek Kreft

4
Kesinlikle tutarlı N düğümlü bir sistemin iletişim ek yükündeki artış, genellikle süper doğrusal (yani doğrusaldan daha fazla) olarak anlaşılır. Üstel olabilir, kübik olabilir ... İletişim protokolüne vb. Bağlıdır.
Chris Shain

2
İyi cevap. Bazı takip soruları: Bir sunucuya yapılan isteklerin size yanlış / güncel olmayan bilgiler vermesi "kötü" değil mi? İnsanlar bunu kabul ediyor mu yoksa bunun bir çözümü var mı? Ayrıca, veriler sonunda farklı sunucular arasında nasıl kopyalanır? Sunuculardan biri kapandığında ve veriler sunucular arasında çoğaltılıyorsa, bu sunucu tekrar gelirse, verilerini nasıl günceller?
noblerare

5
@noblerare, değişen derecelerde kötülük için "kötü". ATM bakiyemin güncel olmaması çok kötü olur. Günlük veritabanım tam olarak yakalanmamışsa veya Facebook beslemem birkaç saniye gerideyse daha az kötü. Veri kopyalama ve dayanıklılık mekanizmaları çok çeşitlidir ve belirli platforma bağlıdır. Cassandra için (örnek olarak) yazar, belirli bir yazmanın başarılı olabilmesi için düğümlerin bir çoğunluğuna (çoğunluğuna) mı, yoksa tümüne mi işlenmesi gerektiğine karar verebilir. HBase, her veri satırı için belirli bir düğümün "ana" olduğu farklı bir yaklaşım benimser.
Chris Shain

Aslında, çoğu bankacılık sistemi sonunda tutarlıdır.
Chaos

106

Nihai tutarlılık:

  1. Verileriniz birden çok sunucuda kopyalanır
  2. Müşterileriniz verileri almak için sunuculardan herhangi birine erişebilir
  3. Biri sunuculardan birine bir veri parçası yazıyor, ancak henüz geri kalanına kopyalanmamış
  4. Bir istemci, sunucuya verilerle erişir ve en güncel kopyayı alır
  5. Farklı bir istemci (hatta aynı istemci) farklı bir sunucuya (henüz yeni kopyayı almayan) erişir ve eski kopyayı alır

Temel olarak, verileri birden çok sunucuda çoğaltmak zaman aldığından, verileri okuma istekleri yeni bir kopya ile bir sunucuya gidebilir ve ardından eski bir kopya ile bir sunucuya gidebilir. "Nihai" terimi, verinin sonunda tüm sunuculara kopyalanacağı ve dolayısıyla hepsinin güncel kopyaya sahip olacağı anlamına gelir.

Düşük gecikmeli okumalar istiyorsanız, nihai tutarlılık bir zorunluluktur, çünkü yanıt veren sunucunun verilerin kendi kopyasını döndürmesi gerekir ve diğer sunuculara danışmak ve verilerin içeriği üzerinde karşılıklı bir anlaşmaya varmak için zamanı yoktur. Bunu daha detaylı anlatan bir blog yazısı yazdım .


2
Güzel blog yazısı. Nihai tutarlılık fikrine yeni başlayan biri için okunmaya değer. Bu cevap, blog gönderisinde ne olduğunu daha fazla açıklamak için yeniden yazılsaydı daha iyi olurdu.
axiopisty

1
Blogunuzda iyi açıklanmış. Paylaşım için teşekkürler.
Ataur Rahman Munna

12

Bir uygulamanız ve kopyası olduğunu düşünün. Daha sonra uygulamaya yeni veri öğesi eklemeniz gerekir.

görüntü açıklamasını buraya girin

Ardından uygulama, verileri aşağıda gösterilen diğer kopya gösterisiyle senkronize eder

görüntü açıklamasını buraya girin

Bu arada yeni müşteri, henüz güncellenmemiş bir replikadan veri alacak. Bu durumda doğru tarih verilerini alamaz. Çünkü senkronizasyon biraz zaman alır. Bu durumda sonuçta tutarlılık olmaz

Sorun, eninde sonunda nasıl tutarlı olabiliriz? ?

Bunun için verileri güncellemek / oluşturmak / silmek için aracı uygulamasını ve verileri okumak için doğrudan sorgulamayı kullanıyoruz. sonunda tutarlılık sağlamaya yardımcı olan

görüntü açıklamasını buraya girin görüntü açıklamasını buraya girin


3

Bir uygulama bir makinedeki bir veri maddesinde değişiklik yaptığında, bu değişikliğin diğer kopyalara da yayılması gerekir. Değişiklik yayılımı anlık olmadığından, bazı kopyaların en son değişikliğe sahip olacağı, ancak diğerlerinin olmayacağı bir zaman aralığı vardır. Başka bir deyişle, kopyalar karşılıklı olarak tutarsız olacaktır. Bununla birlikte, değişiklik sonunda tüm kopyalara ve dolayısıyla "nihai tutarlılık" terimine yayılacaktır. Nihai tutarlılık terimi, bir makinede yapılan bir değişikliğin diğer tüm kopyalara yayılmasında sınırsız bir gecikme olduğunun basitçe kabul edilmesidir. Yayılmaya gerek olmadığından, merkezi (tek kopya) sistemlerde nihai tutarlılık anlamlı veya alakalı değildir.

kaynak: http://www.oracle.com/technetwork/products/nosqldb/documentation/consistency-explained-1659908.pdf


1

Basit bir İngilizce ile şunu söyleyebiliriz: Sisteminiz tutarsız durumlarda olsa da, amaç her zaman her bir veri parçası için bir noktada tutarlılığa ulaşmaktır.


1

Sonuçta tutarlılık, değişikliklerin yayılmasının zaman alması ve verilerin aynı eylemler veya verilerin dönüştürülmesi için bile her eylemden sonra aynı durumda olmayabileceği anlamına gelir. Bu, insanlar böyle bir sistemle etkileşimde bulunurken ne yaptıklarını bilmediklerinde çok kötü şeylerin olmasına neden olabilir.

Lütfen bu kavramı iyi anlayana kadar iş açısından kritik belge veri depolarını uygulamayın. Bir belge veri deposu uygulamasını mahvetmek, ilişkisel bir modelden çok daha zordur, çünkü batırılacak temel şeyler, onu düzeltmek için gereken şeyler ekosistemde mevcut olmadığından, basitçe düzeltilemez. Bir uçak içi deponun verilerini yeniden düzenlemek, bir RDBMS'nin basit ETL dönüşümlerinden çok daha zordur.

Tüm belge depoları eşit oluşturulmamıştır. Bugünlerde (MongoDB) bazı işlemler bir çeşit işlemleri destekliyor, ancak veri depolarının taşınması muhtemelen yeniden uygulama masrafıyla karşılaştırılabilir.

UYARI: Bir belge veri deposunun teknolojisini bilmeyen veya anlamayan ve işlerini kaybetme korkusuyla RDBMS konusunda klasik eğitim almış ve yalnızca ACID sistemlerini bilen geliştiriciler ve hatta mimarlar (ne kadar farklı olabilir) ?) ve teknolojiyi bilmeyen veya öğrenmek için zaman ayırmayanlar, bir belge veri deposu tasarlamayı özleyecektir. Ayrıca bunu bir RDBMS olarak veya önbelleğe alma gibi şeyler için deneyebilir ve kullanabilir. Çoğaltma ve gecikmenin şeyler olduğunu unutarak, ya da daha da kötüsü, üçüncü parti sistemleri bir “işlem” e sürükleyerek, bütün bir belge üzerinde çalışması gereken atomik işlemleri “ilişkisel” parçalara ayıracaklar. Bunu, RDBMS'nin çalışıp çalışmayacağına bakılmaksızın ve test yapmadan veri göllerini yansıtabilmesi için yapacaklar, çünkü ne yaptıklarını biliyorlar. Daha sonra, "siparişler" gibi ayrı belgelerde depolanan karmaşık nesneler beklenenden daha az "sipariş kalemine" sahip olduğunda veya belki hiç olmadığında şaşıracaklar. Ancak bu sık sık ya da yeterince sık olmayacak, böylece ileriye doğru yürüyecekler. Geliştirme aşamasındaki problemi bile çözmeyebilirler. Daha sonra, işleri yeniden tasarlamak yerine, işe yaramayacak, ancak faydası olmayan ek karmaşıklık ekleyecek olan ilişkisel bir veri modelini taklit etmek için "gecikmeler", "yeniden denemeler" ve "kontroller" atacaklar. Ama artık çok geç - şey konuşlandırıldı ve şimdi iş onun üzerinde çalışıyor. Sonunda, tüm sistem atılacak ve departman taşeron olacak ve bir başkası onu koruyacak. Yine de düzgün çalışmaz, ancak mevcut başarısızlıktan daha ucuza başarısız olabilirler.


0

Nihai tutarlılık daha çok bir spektrum gibidir. Bir tarafta güçlü bir tutarlılığa, diğer yandan nihai tutarlılığa sahip olursunuz. Arada Snapshot, yazılarımı oku, sınırlı bayatlık gibi seviyeler var. Doug Terry'nin makalesinde beyzbol yoluyla nihai tutarlılık üzerine güzel bir açıklaması var .

Bana göre nihai tutarlılık, temelde, bir veri deposundan her okuduğunuzda rastgele sırayla rastgele verilere tolerans göstermektir. Bundan daha iyisi, daha güçlü bir tutarlılık modelidir. Örneğin, bir anlık görüntünün eski verileri vardır, ancak yeniden okunduğunda tahmin edilebilir olması için aynı verileri döndürür. Bazen uygulama, belirli bir süre için eskimiş verilere tahammül edebilir ve bunun ötesinde tutarlı veri talep edebilir.

Tutarlılığın anlamına bakarsanız, bu daha çok tekdüzelik veya sapma eksikliği ile ilgilidir. Dolayısıyla, bilgisayar sistemi olmayan terimlerle beklenmedik değişikliklere tolerans anlamına gelebilir. ATM aracılığıyla çok iyi açıklanabilir. Bir ATM çevrimdışı olabilir, bu nedenle çekirdek sistemlerden hesap bakiyesinden farklı olabilir. Bununla birlikte, belirli bir zaman aralığı için farklı dengeleri göstermek için bir tolerans vardır. ATM çevrimiçi olduğunda, çekirdek sistemlerle senkronize olabilir ve aynı dengeyi yansıtabilir. Yani bir ATM'nin nihayetinde tutarlı olduğu söylenebilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.