CAP teoremi - Kullanılabilirlik ve Bölüm Toleransı


207

SAP'de "Kullanılabilirlik" (A) ve "Bölüm toleransı" (P) anlamaya çalışırken, çeşitli makalelerin açıklamalarını anlamakta zorlandım.

A ve P'nin birlikte gidebileceğine dair bir his alıyorum (bunun böyle olmadığını biliyorum ve bu yüzden anlayamıyorum!).

Basit bir şekilde açıklamak gerekirse, A ve P nedir ve aralarındaki fark nedir?


1
İşte CAP'yi
Tushar Saha

2
hazır cevaplar için gitme. Her bir C, A, P'yi ayrı ayrı okuyun, görselleştirin ve anlayın. Dağıtılmış bir küme mimarisi (belki 3 DB) tasarlayın ve şimdi anlayışınızı uygulayın. Dağıtılmış (DB'ler) arızalar meydana geldiğinde C, A, P'ye ne olduğunu görün. Anladıktan sonra cevapları kontrol edin ve mantığınıza başvurun. Unutmayın - Anlasanız bile, net olmayabilir. bu yüzden anlayışınızı düşünün ve uygulayın. Teşekkürler
Kızlık

1
Her nasılsa yukarıdaki ksat.me bağlantısı 404 url'ye gidiyor çünkü '/' ile bitiyor. ksat.me/a-plain-english-introduction-to-cap-theorem Bu iyi çalışıyor ve 'C', 'A', 'P' nin her biri için çok ayrıntılı bir açıklama
vivek.m

Yanıtlar:


402

Tutarlılık, verilerin kümede aynı olduğu anlamına gelir, böylece herhangi bir düğüme / düğmesinden okuyabilir veya yazabilir ve aynı verileri alabilirsiniz.

Kullanılabilirlik, kümedeki bir düğüm düşse bile kümeye erişebilme anlamına gelir.

Bölüm toleransı, iki düğüm arasında bir "bölüm" (iletişim kopması) olsa bile kümenin çalışmaya devam ettiği anlamına gelir (her iki düğüm de yukarıda, ancak iletişim kuramıyor).

Hem kullanılabilirlik hem de bölüm toleransı elde etmek için tutarlılıktan vazgeçmelisiniz. Bir master-master kurulumunda iki düğümünüz (X ve Y) olup olmadığını düşünün. Şimdi, X ve Y arasındaki ağ iletişimi arasında bir kesinti var, bu yüzden güncellemeleri senkronize edemiyorlar. Bu noktada aşağıdakilerden birini yapabilirsiniz:

A) Düğümlerin senkronizasyondan çıkmasına izin verin (tutarlılıktan vazgeçerek) veya

B) Kümenin "kapalı" olduğunu düşünün (kullanılabilirlikten vazgeçerek)

Mevcut tüm kombinasyonlar:

  • CA - veriler, tüm düğümler çevrimiçi olduğu sürece - tüm düğümler arasında tutarlıdır ve herhangi bir düğümden okuyabilir / yazabilir ve verilerin aynı olduğundan emin olabilirsiniz, ancak düğümler arasında bir bölüm geliştirirseniz, veriler senkronize değil (ve bölüm çözüldükten sonra yeniden senkronize edilmez).
  • CP - veriler tüm düğümler arasında tutarlıdır ve bir düğüm çöktüğünde kullanılamaz duruma gelerek bölüm toleransını (veri zaman uyumunu önler) korur.
  • AP düğümleri birbirleriyle iletişim kuramasalar bile çevrimiçi kalırlar ve bölüm çözüldükten sonra verileri yeniden senkronize ederler, ancak tüm düğümlerin aynı verilere sahip olacağı garanti edilmez (bölüm sırasında veya sonrasında)

CA sistemlerinin pratikte mevcut olmadığını unutmayın (bazı sistemler böyle olduğunu iddia etse bile).


1
AP'de neden tüm düğümlerin aynı verilere sahip olacağını garanti etmiyoruz? Tamam, çünkü "C" yok ama .. bu benim için açık değil ... Bunun neden olduğunu bilmek istiyorum ...
grep

3
@grep Geç cevap verdiğim için üzgünüm. Hem kullanılabilirlik (küme aşağı gitmez) hem de bölüm toleransı (veritabanı iletişim kuramayan düğümlerden kurtulabilir) varsa, tüm düğümlerin her zaman tüm verilere (tutarlılık) sahip olacağını garanti edemezsiniz, çünkü düğümler yazıyorlar ve kabul ediyorlar, ancak bu yazıtları birbirleriyle iletişim kuramıyorlar.
Chris Heald

4
Partiye geç, ancak her kategoride bazı örnekler sergilemeye değer, örn. blog.nahurst.com/visual-guide-to-nosql-systems
bitinn

burada amaçlanan düğüm kümeleri hakkında basit bir örnek / örnek eklemek gerçekten yararlı olacaktır. farklı bir sisteme ya da başka bir şeye yayılmış bir sistem ya da veri tablosu / koleksiyonlar mı?
shrotavre

Pragmatik olarak, düğümler genellikle bazı ağ mekanizmalarıyla bağlanan bireysel sistemlerdir (veya bu sistemlerde çalışan yazılımlardır).
Chris Heald

43

P'yi C ve A ile eşit olarak düşünmek biraz yanlıştır, daha ziyade C, A, P arasında '3'ten 2' fikri yanıltıcıdır. CAP teoremini açıklayacağım kısa yol, "Dağıtılmış bir veri deposunda, ağ bölümü sırasında, Tutarlılık veya Kullanılabilirlik'i seçmeniz gerekir ve her ikisini birden alamazsınız" dır. Geleneksel ACID veritabanları Tutarlılığa daha fazla odaklanırken, yeni NoSQL sistemleri Kullanılabilirliğe odaklanmaya çalışıyor.

Gerçekten CA'yı seçemezsiniz, ağ bölümü herkesin sahip olmak istediği bir şey değildir, sadece dağıtılmış bir sistemin istenmeyen bir gerçekliğidir, ağlar başarısız olabilir. Soru bu olduğunda başvurunuz için hangi takas seçimini yaptığınızdır. Bu terimi ilk kez formüle eden adamın makalesi , bunu çok açık bir şekilde açıklamaktadır.


18

İşte özellikle P ile ilgili olarak CAP'ı bu şekilde tartışıyorum.

CA yalnızca monolitik, tek bir sunucu veritabanı ile tamamsanız mümkündür (çoğaltma ile olabilir, ancak bir "hata bloğu" ndaki tüm veriler - sunucular kısmen başarısız sayılır).

Sorununuz ölçeklendirme, dağıtılmış ve çoklu sunucu --- gerektiriyorsa ağ bölümleri olabilir. P'ye zaten ihtiyacınız var. Yaklaştığım birkaç sorun, tek sunucu-her zaman paradigmalara uygundur (veya Stonebraker'in dediği gibi "dağıtılmış tablo kazıklarıdır"). Bir CA sorunu bulabilirseniz, geleneksel ölçeklendirilmemiş RDBMS gibi çözümler birçok avantaj sağlar.

Benim için nadir: AP ile CP'yi tartışmaya geçiyoruz.

AP ve CP işlemi arasında yalnızca bir bölümünüz olduğunda seçim yapabilirsiniz. Ağ ve donanım düzgün çalışıyorsa, pastanızı alıp da yersiniz.

AP / CP ayrımını tartışalım.

AP - bir ağ bölümü olduğunda, bağımsız parçaların serbestçe çalışmasına izin verin.

CP - bir ağ bölümü olduğunda, düğümleri kapatın veya okuma ve yazma işlemlerine izin vermeyin, böylece belirleyici hatalar olur.

Her ikisini de yapabilen mimarileri seviyorum, çünkü bazı problemler AP, bazıları CP - ve bazı veritabanları her ikisini de yapabilir. CP ve AP çözümleri arasında incelikler de vardır.

Örneğin, bir AP veri kümesinde, hem tutarsız okumalar hem de yazma çakışmaları oluşturma olasılığınız vardır - bunlar iki farklı olası AP modudur. Sisteminiz yüksek okuma süresine sahip AP için yapılandırılabilir, ancak yazma çakışmalarına izin vermez mi? Yoksa AP sisteminiz güçlü ve esnek bir çözünürlük sistemiyle yazma çakışmalarını kabul edebilir mi? Sonunda her ikisine de ihtiyacınız olacak mı, yoksa sadece birini yapan bir sistem seçebilir misiniz?

Bir CP sisteminde, eğer varsa küçük bölümlerle (tek sunucu) ne kadar kullanılamazsınız? Daha fazla çoğaltma, bir CP sisteminde kullanılamazlığı artırabilir, sistem bu dengesizlikleri nasıl ele alır?

Bunlar CP vs AP ile sorulacak sorular.

Şu anda bu alanda büyük bir okuma Brewer'ın "12 yıl sonra" gönderisidir. Bunun CAP tartışmasını açık bir şekilde ileri taşıdığına ve bunu şiddetle tavsiye ettiğine inanıyorum.

http://www.infoq.com/articles/cap-twelve-years-later-how-the-rules-have-changed


CA sistemi gerçekten kafa karıştırıcı, monolitik veritabanı CA örneğinizle ilgili bir sorum var. Yalnızca tek bir sunucuysa, "A" nereden geliyor, çünkü bana adı geçen sunucunun başarısız olması, hiçbir hizmetin sunulmamasına neden olacak gibi görünüyor?
chaooder

1
İyi soru. Sunucular bir disk arızasına, hatta DIMM'lerin arızalanmasına veya yüksek kullanılabilirlik için tasarlandıklarında güç kaynaklarının arızalanmasına neden olabilir. Hatta birden fazla güç şebekesinde olduğunuzu hayal edin. Daha yüksek ve daha yüksek kullanılabilirlik elde edersiniz, ancak içinde hiçbir zaman katılmayan bileşenlerle bölümleme ve çalışma yeteneğine sahip bir "ağ" yoktur. Daha ezoterik donanım mevcut olsa da (SQL NON-STOP'a bakın), başarısız ve devam eden bileşenlere sahip RAID dizilerinin örnekleri günümüzde hala yaygındır ve tek bir sunucuda çok yüksek kullanılabilirlik sağlar.
Brian Bulkowski

13

CAP Teoremi

Tutarlılık:

Bir okuma, belirli bir istemci için en son yazmayı (ACID gibi) döndürür . Bu süre içinde herhangi bir istek gelirse , düğüm (ler) boyunca / içinde veri senkronizasyonu tamamlanana kadar beklemek zorundadır .


Kullanılabilirlik:

her düğüm (başarısız değilse) her zaman sorgu yürütür ve her zaman isteklere yanıt vermelidir. En son kopyayı döndürüp döndürmemesi önemli değildir.


Bölme tolerans:

Ağ bölümleri oluştuğunda sistem çalışmaya devam eder.


AP ile ilgili olarak , Kullanılabilirlik (her zaman erişilebilir) ( Cassendra ) ile veya ( RDBMS ) bölüm toleransı olmadan var olabilir

pic kaynağı


2

Bölüm toleransının hiçbir cevapta iyi açıklanmadığını hissediyorum, bu yüzden sadece bazı şeyleri daha ayrıntılı olarak açıklamak CAP teoreminin anlamı:

C : (Doğrusallık veya güçlü tutarlılık) kabaca

A operasyonu başarıyla tamamlandıktan sonra B operasyonu başlatıldıysa, B operasyonu sistemi A operasyonunun tamamlandığı haliyle veya daha yeni bir durumla (ancak eski durumla) aynı şekilde görmelidir.

A :

“Sistemdeki başarısız olmayan bir [veritabanı] düğümü tarafından alınan her istek bir [hatasız] yanıtla sonuçlanmalıdır”. Bazı düğümlerin isteği işleyebilmesi için yeterli değildir: başarısız olmayan herhangi bir düğümün işleyebilmesi gerekir. “Yüksek oranda kullanılabilir” (yani düşük kapalı kalma süresi) sistemleri denilen birçok sistem aslında bu kullanılabilirlik tanımını karşılamamaktadır.

P :

Bölüm Toleransı (korkunç bir şekilde yanlış adlandırılmış) temel olarak, iletileri geciktirebilecek veya düşürebilecek asenkron bir ağ üzerinden iletişim kurduğunuz anlamına gelir. İnternet ve tüm veri merkezlerimiz bu özelliğe sahiptir, bu nedenle bu konuda gerçekten seçeneğiniz yoktur.

Kaynak: Awesome Martin kleppmann'ın çalışması

Sadece bir örnek verelim: Cassandra en fazla AP sistemi olabilir. Ancak, Quorum'a göre okuma veya yazma için yapılandırırsanız, CAP tarafından kullanılabilir (CAP teoreminin tanımına göre kullanılabilir) ve yalnızca P sistemidir.


1

Basit CAP teoreminde, dağıtılmış bir sistemin aynı anda üç garantinin tümünü sağlamanın imkansız olduğunu belirtir:

resim açıklamasını buraya girin

Tutarlılık

Her düğüm aynı anda aynı verileri içerir

Kullanılabilirlik

Her seferinde veri sunmak için en az bir düğüm bulunmalıdır

Bölüm toleransı

Sistemin arızalanması çok nadirdir

Çoğunlukla her sistem CA, AP veya CP olmak üzere en az iki özelliği garanti eder .


0

Tutarlılık - Okuma isteğini gönderirken, sonuç döndürüyorsa, istemci isteği tarafından verilen en son yazıyı döndürmelidir. Kullanılabilirlik - Okuma / yazma talebiniz her zaman başarılı olmalıdır. Bölüm toleransı - Ağ bölümü olduğunda (bazı makinelerin birbirleriyle konuşma sorunu) oluşursa, sistem yine de çalışmalıdır.

Dağıtılmış bir sistemde ağ bölümünün oluşma olasılığı vardır ve CAP “P” den kaçınamayız. Bu yüzden “Tutarlılık” ve “Kullanılabilirlik” arasında seçim yapıyoruz.

http://bigdatadose.com/understanding-cap-theorem/


0

CAP teoremini anlamanın basit yolu:

Ağ bölümü olması durumunda, mükemmel kullanılabilirlik ve mükemmel tutarlılık arasında seçim yapmak gerekir.

Tutarlılık seçmek , sistem en son yazmayı döndürmeyi garanti edemediğinden bir istemcinin sorgusunu yanıtlayamama anlamına gelir. Bu, kullanılabilirliği feda eder.

Kullanılabilirliği seçmek , müşterinin isteğine yanıt verebilmek anlamına gelir, ancak sistem tutarlılığı, yani en son yazılan değeri garanti edemez. Mevcut sistemler, verilen koşullar altında mümkün olan en iyi cevabı verir.

Bu açıklama bu mükemmel makaleden alınmıştır . Umarım yardımcı olur.


0

Birçok bağlantıdan geçtim, ama hiçbiri bana tatmin edici cevap veremedi, biri hariç.

Bu yüzden CAP'ı çok basit ifadelerle tanımlıyorum.

  • Tutarlılık : Hangi düğümden geldiğine bakılmaksızın aynı Verileri döndürmelidir .

  • Kullanılabilirlik : Düğüm yanıt vermelidir (kullanılabilir olmalıdır).

  • Bölüm Toleransı : Düğümler arasında bir bölüm (yani ağ hatası) olsa bile, küme yanıt vermelidir (kullanılabilir olmalıdır).

(Daha fazla kafa karıştırmanın temel nedenlerinden biri kötü adlandırma kuralıdır. Haklı olsaydım, bunun yerine DNC teoremini vermiş olabilirim : Veri Tutarlılığı , Düğüm Kullanılabilirliği , Küme Kullanılabilirliği , her biri sırasıyla Tutarlılık , Kullanılabilirlik ve Bölüm Toleransına karşılık gelir)

CP veritabanı: CP veritabanı kullanılabilirlik pahasına tutarlılık ve bölüm toleransı sağlar. Herhangi bir iki düğüm arasında bir bölüm oluştuğunda, sistemin bölüm çözülünceye kadar tutarlı olmayan düğümü kapatması (yani kullanılamaz hale getirmesi) gerekir.

AP veritabanı: AP veritabanı, tutarlılık pahasına kullanılabilirlik ve bölüm toleransı sunar. Bir bölüm oluştuğunda, tüm düğümler kullanılabilir kalır, ancak bölümün yanlış ucundaki olanlar diğerlerine göre daha eski bir veri sürümü döndürebilir. (Bölüm çözüldüğünde, AP veritabanları sistemdeki tüm tutarsızlıkları onarmak için genellikle düğümleri yeniden eşitler.)

CA veritabanı: Bir CA veritabanı tüm düğümlerde tutarlılık ve kullanılabilirlik sağlar. Ancak sistemdeki iki düğüm arasında bir bölüm varsa bunu yapamaz ve bu nedenle hataya dayanıklılık sağlayamaz. Dağıtılmış bir sistemde, bölümlerden kaçınılamaz. Dolayısıyla, bir CA dağıtılmış veritabanını teorik olarak tartışabilirken, tüm pratik amaçlar için, bir CA dağıtılmış veritabanı var olabilir, ancak olmamalıdır.

Bu nedenle, dağıtılmış uygulamanız için bir CA veritabanına ihtiyacınız olmadığı anlamına gelmez. PostgreSQL gibi birçok ilişkisel veritabanı tutarlılık ve kullanılabilirlik sağlar ve çoğaltma kullanılarak birden çok düğüme dağıtılabilir.

Kaynak: https://www.ibm.com/cloud/learn/cap-theorem

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.