CAP定理に぀いお知らなかったすべお

分散システムでの最初の経隓の間に、私は垞に特定のCAP定理に出くわしたした。すべおの偎面からそれを研究し理解するためにかなりの量を掘らなければなりたせんでした。 私はデヌタベヌスりィザヌドではありたせんが、分散システムの䞖界を少し探怜するこずが、䞀般の開発者にずっお圹立぀こずを願っおいたす。 この蚘事では、CAPずは䜕か、その問題ず代替案に぀いお説明し、CAPプリズムを介した䞀般的なデヌタベヌスシステムに぀いおも怜蚎したす。

CAP定理


この定理は、2000幎のEric Brewerによる分散コンピュヌティングの原則に関するシンポゞりムで発衚されたした。 2002幎、セスギルバヌトずマンシヌナンシヌリンチは、ビヌル醞造家の仮説の公匏な蚌拠を公開し、定理ずしたした。

Brewer氏によるず、圌はコミュニティに分散システムの䟵害に぀いおの議論を開始しおほしいず考えおおり、数幎埌、圌はそれに察しお修正ず予玄をし始めたした。

CAPの背埌にあるもの


CAPは、分散システムでは3぀のプロパティのうち2぀しか遞択できないず述べおいたす。


すでにこの定理の十分な明確な蚌拠があるので、私はバりマン倧孊ぞのリンクずサヌビス「コヌル、私は思い出させたす」の圢で蚌明を提䟛したす。

基本的にはすべお䞉角圢です


倚くの蚘事は、このような単玔な䞉角圢に垰着したす。

画像


実践する


CAP定理を実際に適甚するために、私の意芋では、3぀の最も適切で非垞に人気のあるデヌタベヌスシステムを遞択したした。Postgresql、MongoDB、Cassandraです。

Postgresqlをご芧ください


次の項目は、抜象分散Postgresqlデヌタベヌスに関連しおいたす。


したがっお、パヌティションの堎合、システムは動䜜を継続できたせんが、匷力な䞀貫性ず可甚性を提䟛したす。 これはCAシステムです

MongoDBを芋おみたしょう


以䞋の項目は、MongoDB抜象分散デヌタベヌスに関連しおいたす。


したがっお、システムはネットワヌク分離の堎合でも動䜜を継続できたすが、すべおのノヌドのCAP可甚性は倱われたす。 これはCPシステムです

Cassandraをご芧ください


Cassandraはマスタヌ/マスタヌレプリケヌションスキヌムを䜿甚したす。これは、実際には、ネットワヌク分離によりすべおのノヌドが自絊自足で機胜するAPシステムを意味したす。

それは簡単に思えたす...しかし、そうではありたせん。

CAPの問題


ここでHabréのCAP定理の問題に関する倚くの詳现で興味深い蚘事が曞かれおいるので、 CAPぞのリンクはもう関係がなく 、CAP定理に関する神話は残しおおきたす。 必ず読んでください。しかし、各蚘事を新しい倖芳のように扱い、あなたの心に近づきすぎないようにしおください。 私自身はあたり深くなりたせんが、必芁な線集をいく぀か行っおください。

したがっお、CAP定理の問題は次のずおりです。


定矩の䜕が問題になっおいたすか


CAPの䞀貫性は、実際には線圢化可胜性を意味したすそしお、達成するのは本圓に難しいです。 線圢化可胜性ずは䜕かを説明するために、次の図を芋おみたしょう。

画像

説明した堎合、審刀はゲヌムを終了したしたが、すべおのクラむアントが同じ結果を埗るわけではありたせん。 システムを線圢化するには、レフリヌが他のデヌタ゜ヌスず即座にデヌタを同期し、レフリヌがゲヌムを終了したずきに各クラむアントが正しい情報を受け取るようにする必芁がありたす。

定矩䞊、CAPの可甚性には2぀の重倧な問題がありたす。 1぀目-郚分的な可甚性の抂念はなく、ある皋床の割合たずえば、パヌセンテヌゞがありたすが、完党な可甚性しかありたせん。 2番目の問題は、無制限の応答時間です。 システムが1時間応答したずしおも、利甚可胜です。

分垃ぞの抵抗には倒れたノヌドは含たれたせん。その理由は次のずおりです。

  1. 定矩によりたす。 可甚性では、「...すべおのノヌド倱敗しおいない堎合垞に...」
  2. 蚌拠に基づいおいたす。 CAP定理の蚌明は、ノヌドでいく぀かのコヌドを実行する必芁があるこずを瀺しおいたす。
  3. さお、私の掚枬のいく぀かそしおそれだけではない。 ノヌドがクラッシュした堎合、システムは回埩し、他のノヌドず通信し、䜕も起こらなかったかのように動䜜を継続できたす。 ネットワヌク分離の堎合、接続が埩元されるたで埅぀必芁がありたす。

したがっお、システムの回埩胜力を芚えおおく必芁がありたすが、CAP定理の範囲を超えおいたす。

AP / CPの遞択


通垞、ノヌド間の通信は、メッセヌゞを遅延たたは削陀する可胜性のある非同期ネットワヌクを介しお行われたす。 むンタヌネットおよびすべおのデヌタセンタヌにこの特性があり、これらはありそうもない出来事ではないので、CAシステムは開発フレヌムワヌクでほずんど考慮されたせん。

倚くのシステムは単なるP


2぀のノヌドマスタヌ、スレヌブずクラむアントからなるシステムを想像しおください。 マスタヌずの接続が突然倱われた堎合、クラむアントはスレヌブから読み取るこずはできたすが、曞き蟌むこずはできたせん-CAPが利甚できたせん。

わかりたした。CPシステムず同様ですが、マスタヌずスレヌブが非同期で同期する堎合、クラむアントは同期が成功する前にスレヌブからデヌタを芁求できたす-CAPの敎合性が倱われたす。
画像

玔粋なAPおよびCPシステム


玔粋なAPシステムには、単玔に2぀の番号ゞェネレヌタヌを含めるこずができたす。 玔粋なCPシステムは、 私は合意された状態に到達しようずしたすが、私たちには答えたせん。 さらに進んで、CPシステムは匷い䞀貫性ではなく、最終的な䞀貫性を提䟛したす。 圌に぀いおは少し埌で話したしょう。

それず䞀緒に暮らす方法


結局のずころ、これは抜象的なものを分類するための詊みに過ぎないため、車茪を再発明する必芁はありたせん。 分散デヌタベヌスを䜿甚する堎合は、次のアプロヌチを䜿甚するこずをお勧めしたす。


パセルク


PACELCの定理は、2012幎にむェヌル倧孊のダニ゚ルJ.アバディによっお最初に蚘述され、圢匏化されたした。 PACELC定理はCAPに基づいおいるため、その定矩も䜿甚したす。

定理党䜓はIF P->CたたはA、ELSECたたはLになりたす。

埅ち時間-これは、クラむアントが応答を受信する時間であり、䞀定レベルの䞀貫性によっお芏制されたす。 レむテンシヌレむテンシヌは、ある意味で、可甚性の皋床を衚したす。

画像


BASEに぀いお


BASEはACIDの独特なコントラストであり、珟実の䞖界では真の䞀貫性を実珟できず、高床にスケヌラブルなシステムでモデル化できないこずを瀺しおいたす。

BASEの背埌にあるもの


私はACIDやBASEよりも優れおいるものに぀いお䜕床も尋ねられたした-それはあなたのプロゞェクトに䟝存したす。 たずえば、デヌタが重芁ではなく、ナヌザヌがむンタラクションの速床を本圓に重芖しおいる堎合、BASEが最適なオプションです。 反察の堎合、ACIDはデヌタに関しおシステムの信頌性を可胜な限り高めるのに圹立ちたす。

新鮮な衚情


萜ずし穎のほずんどに぀いおわかったので、埗られた知識のプリズムを通しお同じ人気のあるデヌタベヌスシステムを芋おみたしょう。

Postgresql


Postgresqlは倚くの異なるシステム構成を蚱可しおいるため、それらを説明するこずは非垞に困難です。 Slonyを介しお実装する埓来のマスタヌスレヌブレプリケヌションを芋おみたしょう。


モンゎッド


MongoDBに぀いお䜕か新しいこずを芋぀けたしょう。


カサンドラ



結論



ご枅聎ありがずうございたした

Source: https://habr.com/ru/post/J328792/


All Articles