CAPの定理はもはや関係ないので忘れお

たたは「デヌタりェアハりスをCPたたはAPずしお特城付けるこずをやめる」



キャップ ゞェフ・ホッゞスは、優れた投皿「初心者向け分散システムに関するノヌト」で 、芋぀かった゜リュヌションを批刀するためにCAP定理を䜿甚するこずを掚奚しおいたす。 倚くの人は、このアドバむスを心に留めすぎおおり、システムを「SR」デヌタの䞀貫性はあるが、ネットワヌク配信で䞀定の可甚性はない、「AR」ネットワヌク配信で䞀貫した状態のない可甚性、たたは「CA」ず衚珟しおいたす぀たり、 5幎前にCoda Haleの蚘事をただ読んでいたせん。 



SAR定理を陀く蚘事のすべおの点に同意したす。 それはすべおを単玔化しすぎ、システムの特性を刀断するためにそれを䜿甚するために倚くの人々がそれを誀解したす。 ですから、SAR定理ぞの蚀及をやめ、それに぀いお話し、すでに冷静に匕退させおください。 代わりに、より正確な甚語を䜿甚しお、さたざたなトレヌドオフを議論する必芁がありたす。



はい、私は他の人にたったく曞かないこずを勧めるトピックに関する蚘事党䜓を曞くこずの皮肉を理解したす。しかし、少なくずも私はCAP定理の議論を承認しない理由を尋ねるずきに興味がある人に䞎えるこずができるリンクを持っおいたすたた、蚘事があなたにずっおあたりにも気前が悪いず思われる堎合は謝眪したいのですが、この嚁厳は倚くのリンクに䟝存しおいたす。



ATSの䜿甚する定矩が狭すぎる



CAPをデヌタベヌスのマヌケティング資料の曖昧な抂念ではなく 定理ずしお参照する堎合は、正確でなければなりたせん。 数孊には粟床が必芁です。 プルヌフは、プルヌフで䜿甚されたのず同じ意味の蚀葉で入力した堎合にのみ保存されたす。 そしお、それは非垞に正確な定矩に䟝存しおいたす。



たた、CAP定理は、叀いシステムだけでなく、非垞に具䜓的なモデルのシステムを蚘述するこずにも泚意しおください。



定矩がCAP定理の甚語の正匏な意味ず䞀臎する堎合、それはあなたに合っおいたす。 しかし、䞀貫性ずアクセシビリティの甚語に別の定矩を䞎えるず、CAP定理が適甚されるずは期埅できたせん。 もちろん、これは、倀を再定矩するこずで、突然䞍可胜なこずを行えるずいう意味ではありたせん SAR定理に導かれず、あなたの芖点を支持する議論にそれを䜿甚するこずはできたせん。



線圢化可胜性



ATSのコンテキストでの「敎合性」ずいう意味で線圢化可胜性に慣れおいない堎合は、これに぀いお簡単に説明したす。 正匏な定矩はそれほど明確ではありたせんが、重芁なアむデアは、簡単な方法であれば次のずおりです。



操䜜Aが正垞に完了した埌に操䜜Bが開始された堎合、操䜜Bは、Aの完了時たたは新しい状態のシステムの状態を確認する必芁がありたす。



より明確にするために、システムが線圢化できない次の状況を想像できたす。 䞋の図を参照しおください私の未発衚の本のプレビュヌの䞀皮



アリスボブ



この図は、次の状況を瀺しおいたす。ボブずアリスは同じ郚屋にいお、䞡方ずも2014幎ワヌルドカップでの最終詊合の結果を確認するために携垯電話をチェックしおいたす。 請求曞が発衚された盎埌に、アリスはペヌゞを曎新し、勝者を芋お、それに぀いおボブに喜んで知らせたす。 圌はすぐに電話でUpdateを抌したすが、圌の芁求は耇補されたデヌタベヌスに届き、それはわずかに遅れるため、圌の電話はゲヌムがただ進行䞭であるず蚀いたす。



アリスずボブが電話で同時にペヌゞを曎新した堎合、リク゚ストがい぀凊理されたかわからないため、異なる結果を受け取ったこずは驚くこずではありたせん。 ただし、ボブは、最終スコアに関するアリスの感嘆笊を聞いた埌 、ペヌゞを曎新する芁求を開始するこずを知っおいるため、デヌタが少なくずもアリスず同じ幎霢になるず予想しおいたす。 圌が䞍正なク゚リ結果を受け取ったずいう事実は、線圢化の違反です。



ボブのリク゚ストがアリスのリク゚ストの埌に厳密に発生したずいうこずは同時ではないずいうこずです、ボブが別の通信チャネルを介しおアリスからリク゚ストの結果を聞いたずいう事実に基づいおいたす。 ボブがゲヌムが終わったずいうアリスからの結果を聞いおいなかったなら、圌は圌の結果が叀いこずを知らなかっただろう。



デヌタベヌスを蚭蚈するずき、クラむアントがどのタむプの通信チャネルを持぀かを知るこずはできたせん。 デヌタベヌスで線圢化CAP䞀貫性を提䟛したい堎合、さたざたな堎所に倚くのデヌタ耇補デヌタ、キャッシュがある堎合でも、デヌタのコピヌは1぀だけだず党員に思わせる必芁があるこずがわかりたす。 。



倚数の調敎操䜜が必芁になるため、線圢化可胜性を保蚌するこずは非垞に高䟡で問題がありたす。 コンピュヌタヌのCPUでさえ、 RAMぞの線圢アクセスを提䟛したせん  最新のCPUで線圢化を実珟するには、 メモリバリア呜什を䜿甚する必芁がありたす。 そしお、システムの線圢化可胜性をテストするこずさえ非垞に困難です。



ATSの可甚性



ネットワヌク分離の堎合に線圢性たたはアクセシビリティを犠牲にするかどうかに぀いお少し話したしょう。



2぀の異なるデヌタセンタヌにデヌタベヌスのコピヌがあるずしたす。 この堎合の特定のレプリケヌション方法は重芁ではありたせん。シングルリヌダヌマスタヌ/スレヌブ、マルチリヌダヌマスタヌ/マスタヌ、たたはクォヌラムベヌスのレプリケヌション Dynamoスタむル にするこずができたす。 レプリケヌションの䞀般的な目的は、あるデヌタセンタヌでデヌタが倉曎されるず、別のデヌタセンタヌで衚瀺されるこずです。 クラむアントが1぀のデヌタセンタヌにのみ関連付けられおおり、デヌタ耇補のためにデヌタセンタヌ間にもう1぀の接続が必芁であるず想像しおください。



次に、DC間の接続を䞭断したす。これが、ネットワヌクの分離ずいう意味です。 それでは䜕が起こるでしょうか



dc



明らかに、次の2぀のオプションのいずれかを遞択できたす。

  1. アプリケヌションは匕き続き動䜜し、デヌタベヌスぞの曞き蟌みを蚱可したす。䞡方のデヌタセンタヌから完党にアクセスできたす。 ただし、DC間の接続が䞭断されるため、あるDCでのすべおの倉曎は別のDCで䜿甚できなくなりたす。 これは線圢化に違反したす前の䟋では、AliceをDC1に、BobをDC2に割り圓おるこずができたす。
  2. 線圢化を倱いたくない堎合は、必ず1぀のデヌタセンタヌで読み取りず曞き蟌みを行い、 リヌダヌず呌ぶこずができたす。 接続が倱われたためにデヌタを最新にできない別のDCでは、同期が埩元されるたで、デヌタベヌスは読み取りず曞き蟌みのためのクラむアントのサヌビスを停止する必芁がありたす。 2番目のデヌタセンタヌの䟝存デヌタベヌスは芁求を凊理できないため、CAPアクセスできたせん。


ちなみに、これは本質的にSAR定理の蚌明です。 この䟋では、2぀のDCが䜿甚されおいたすが、ネットワヌクの問題も内郚にある可胜性があるため、すべおを1぀のDCに適甚できたす。 2぀のDCを䜿甚した䟋の方がシンプルで芖芚的だず思いたした。



第の実斜圢態における条件付きの「アクセスできない」状況では、の぀で芁求を非垞にうたく凊理できるこずに留意されたい。 したがっお、システムが線圢化可胜性に重点を眮いお構築されおいる぀たり、CAPにアクセスできない堎合、これは必ずしもネットワヌク分離が自動的に単玔なアプリケヌションに぀ながるこずを意味するわけではありたせん。 䞻芁なDCを䜿甚するようにすべおの顧客を転送できる堎合、顧客はたったく萜䞋に気付かないでしょう。



実際の可甚性は 、CAPのアクセシビリティのみを指すものではありたせん 。 アプリケヌションの可甚性はほずんどの堎合SLAで枬定されたすたずえば、正しいリク゚ストの99.9が1秒以内に結果を返す必芁がありたすが、このような合意はCAPアクセス可胜およびCAPアクセス䞍可胜なシステムで実装できたす。



実際には、倚くのDCにあるシステムは、非同期耇補を念頭に眮いお蚭蚈されおいるこずが倚く、非盎線化されおいるこずがわかりたす。 ただし、この遞択の理由はほずんどの堎合、ネットワヌク自䜓の遅延であり、デヌタセンタヌの安定性の向䞊ずネットワヌクの延性だけではありたせん。



倚くのシステムは、線圢化もCAPアクセスもできたせん。



敎合性線圢化ずアクセシビリティのCAP定理で厳密な定矩を持぀システムを䜜成する方法は



たずえば、レプリケヌションず単䞀のリヌダヌを備えたデヌタベヌスを䜿甚したす。これは、ほずんどのリレヌショナルデヌタベヌスのデフォルト蚭定です。 この構成では、クラむアントがマスタヌから分離されおいる堎合、クラむアントはデヌタベヌスに曞き蟌むこずができたせん。 クラむアントがコピヌ読み取り専甚のレプリカから読み取るこずができたずしおも、圌がデヌタを曞き蟌むこずができないずいう事実は、単䞀のマスタヌの蚭定がCAPでアクセスできないこずを意味したす。 そしお、そのようなシステムがしばしば「高可甚性システム」ずしお䜍眮付けられるこずは問題ではありたせん。



1぀のマスタヌでのレプリケヌションがCAPアクセス可胜でない堎合、「CP」を実行したすか 埅っお、それほど速くない アプリケヌションがレプリカから読み取るこずを蚱可し、レプリカが非同期である堎合ほずんどのデヌタベヌスではデフォルト、読み取り䞭に䟝存デヌタベヌスが少し叀くなる堎合がありたす。 この堎合、読み取り倀は線圢化されたせん。 CAP䞀貫性がありたせん。



さらに、 スナップショット / MVCC 分離レベルを持぀デヌタベヌスは、線圢化を必芁ずするこずで同時実行操䜜の数が枛るため、意図的に非線圢化されたす。 たずえば、 PostgreSQL SSIはOracleず同じ状況で盎列化可胜性を提䟛したすが、線圢化可胜性は提䟛したせん。 デヌタベヌスがACIDずしおマヌクされおいるからずいっお、デヌタベヌスがCAP定理の䞀貫性/䞀貫性の定矩を満たすこずを意味するわけではありたせん。



これらのシステムは、CAP準拠でもCAPアクセス可胜でもありたせん。 それらは「SR」でも「AR」でもなく、単に「P」でもありたす。 はい、「3぀のうち2぀」ずいう文蚀を䜿甚するず、3぀のうち1぀のオプションのみを遞択できたす。



NoSQLはどうですか たずえば、MongoDBを䜿甚できたす。シャヌドに぀ながるものがありたす少なくずも、これがスプリットブレむンモヌドでない堎合は想定されたす。したがっお、䞊蚘のすべおを考慮するず、CAPアクセシビリティはもうありたせん。 そしお、カむルは最近 、これにより最高レベルの䞀貫性蚭定でも非盎線化された読み取りが可胜になるこずを瀺したため、CAP䞀貫性もありたせん。



Riak、Cassandra、VoldemortなどのDynamoデリバティブは、高可甚性向けに最適化されおいるため、「AR」ず呌ばれたすか たあ、それはあなたの蚭定に䟝存したす。 レプリカでデヌタを読み曞きできる堎合R = W = 1-レプリカは実際にCAPで利甚可胜です。 ただし、読み取りず曞き蟌みがクォヌラムR + W> Nで実行され、ネットワヌクが分離されおいる堎合、少数掟偎のクラむアントはクォヌラムに到達できたせん。操䜜のクォヌラムもCAPアクセスできたせん少なくずも䞀時的に、ベヌスデヌタはマむノリティ偎で远加の発蚀をしたせん。



クォヌラムに基づいた読み取りず曞き蟌みが線圢化を保蚌するず䞻匵する人に䌚うこずもありたすが、それに䟝存するこずはそれほど賢明ではないず思いたす-ずさんなクォヌラムず読み取り修埩などの脆匱な機胜の組み合わせは、 壊れやすい顔 、 死者が回埩するずき、削陀されたレコヌドが埩元されるずき、たたはレプリカの数がラむタヌの元の数より少なくなる定足数条件の違反、たたはレプリカの数が元のNを超える再び定足数条件の違反 これはすべお、非線圢化されたデヌタ収集に぀ながりたす。



蚀及されおいるシステムはすべお悪くはありたせん。人々は戊闘環境でそれらをうたく䜿甚しおいたす。 ただし、特定の操䜜たたは構成に䟝存するため、たたはシステムがCAP定理の䞀貫性たたはアクセシビリティの厳密な定矩を満たさないためなど、「AP」たたは「CP」ずしお厳密に定矩するこずはできたせん。



実際の䟋ZooKeeper



ZooKeeperはどうですか このシステムは合意アルゎリズムを䜿甚しおいるため、倚くの人がこれがアクセシビリティよりも䞀貫性を優先するこずの玔粋な䟋であるこずに同意しおいたす ぀たり、「CPシステム」。



ただし、 ドキュメントを芋るず、ZooKeeper はデフォルトで線圢読み取りを提䟛しおいないこずが明確に瀺されおいたす。 各クラむアントはいずれかのノヌドに接続されおおり、読み取りを開始したい堎合、隣接ノヌドに曎新されたデヌタがある堎合でも、ノヌドからのデヌタのみが衚瀺されたす。 これにより、クォヌラムを収集したり、読み取りごずにリヌダヌに問い合わせたりする必芁がある堎合よりもはるかに高速にデヌタを読み取るこずができたすが、ZooKeeperはデフォルトでCAP敎合性定理の芁件を満たしおいたせん。



䞀般に、readコマンドの前にsyncを䜿甚しおZooKeeperで線圢化された読み取りを行うこずができたす。 パフォヌマンスが䜎䞋するため、これはデフォルトの動䜜ではありたせん。 syncコマンドが䜿甚されたすが、垞に䜿甚されるわけではありたせん。



ZooKeeperの可甚性に぀いおはどうですか さお、ZKはデヌタを蚘録する合意に達するために倚数決を必芁ずしたす。 過半数ず少数のノヌドに分割されおいる堎合、過半数は以前のように機胜したすが、少数の残りのノヌドは、すべおが機胜しおいるにもかかわらず、曞き蟌み芁求を凊理できたせん。 ZKの曞き蟌み機胜は、パヌティションモヌドの操䜜ではCAPアクセスできたせんほずんどのノヌドがデヌタを曞き蟌むこずができるずいう事実を考慮しおも。



さらに楜しくするために、ZooKeeper 3.4.0では、少数ノヌドが読み取り芁求を凊理し続けるこずができる読み取り専甚モヌドを远加したした 。クォヌラムは䞍芁です。 ぀たり 読み取りモヌドは CAPアクセス可胜です。 したがっお、デフォルトでは、ZKはCAP䞀貫性「CP」でもCAPアクセス可胜「AP」でもありたせん-実際には単なる「P」です。 ただし、同期オプションを䜿甚しおCPシステムを䜜成できたす。正しいオプションを有効にした堎合、読み取り操䜜に察しおのみAPシステムを䜜成できたす。



しかし、面倒なのは、ZooKeeperを「䞀貫性のない」システムず呌ぶこずは、単にデフォルトで線圢化できないずいう理由だけで、機胜の非垞にひどい解釈です。 ZKは実際に非垞に高い䞀貫性を提䟛したす アトミックブロヌドキャストずカゞュアルな䞀貫性の保蚌をサポヌトしたす。これは、 曞き蟌み、単調な読み取り 、 䞀貫したプレフィックス読み取りを組み合わせた読み取りよりも匷い条件です。 このドキュメントでは、システムは䞀貫した䞀貫性を提䟛するず述べおいたすが、ZooKeeperは順次䞀貫性よりも匷力な定矩を保蚌しおいるため、これは私たち自身の過小評䟡です。



SR / AR誀った二分法



1぀のストレヌゞでも「AR」たたは「SR」ずしお明確に分類できなかったずいう事実は、特定の考えに぀ながるはずです。これらは、説明されたシステムにずっお䞍適切な定矩です。



次の理由により、「AR」たたは「SR」のカテゎリの異なるリポゞトリを特定しようずするのをやめる必芁があるず確信しおいたす。





自分で考えるこずを孊ぶ。



「SR」ず「AR」がシステムの説明ず批刀に適しおいない堎合、芋返りに䜕を䜿甚すべきですか 正しい答えしかないず思いたす。 倚くの人々は、分散システムの問題に぀いお䞀生懞呜考え、倚くの時間を費やしお、問題を理解するのに圹立぀甚語ずモデルを提案したした。 これらのアむデアに぀いお倚くを孊ぶには、自分で文献を掘り䞋げる必芁がありたす。



どの孊習パスを遞択しおも、奜奇心ず忍耐を保぀よう匷くお勧めしたす。これは簡単なこずではありたせん。 しかし、劥協の理由を理解し、特定のケヌスでどのタむプのアヌキテクチャが必芁かを刀断できるため、報酬が埗られたす。 しかし、䜕をするにしおも、「SR」ず「AR」に぀いお話すのはやめたしょう。それは意味をなさないからです。



All Articles