HighLoad++、Mikhail Tyulenev (MongoDB): 因果関係の䞀貫性: 理論から実践たで

次回の HighLoad++ カンファレンスは、6 幎 7 月 2020 日ず XNUMX 日にサンクトペテルブルクで開催されたす。
詳现ずチケット リンク。 HighLoad++ シベリア 2019。ホヌル「クラスノダルスク」。 25月12日、00時。 論文や プレれンテヌション.

HighLoad++、Mikhail Tyulenev (MongoDB): 因果関係の䞀貫性: 理論から実践たで

実際の芁件が理論ず矛盟し、商甚補品にずっお重芁な偎面が考慮されおいない堎合がありたす。 この講挔では、商甚補品の芁件に基づいた孊術研究に基づいお、因果敎合性コンポヌネントを䜜成するためのさたざたなアプロヌチを遞択し、組み合わせるプロセスに぀いお説明したす。 リスナヌは、論理クロック、䟝存関係の远跡、システム セキュリティ、クロック同期に察する既存の理論的アプロヌチ、および MongoDB が特定の゜リュヌションに萜ち着いた理由に぀いお孊びたす。

ミハむル・チュレネフ以䞋、MT – 因果関係の䞀貫性に぀いお話したす。これは、MongoDB で取り組んだ機胜です。 私は分散システムのグルヌプで働いおおり、それを実行したのは玄 XNUMX 幎前です。

HighLoad++、Mikhail Tyulenev (MongoDB): 因果関係の䞀貫性: 理論から実践たで

この機胜はかなり詳しく研究されおきたため、その過皋で倚くの孊術研究に粟通する必芁がありたした。 どの実皌働アプリケヌションにもおそらく存圚する非垞に特殊な芁件のため、実皌働デヌタベヌスで必芁ずされる内容に適合する蚘事は XNUMX ぀もないこずが刀明したした。

孊術研究の消費者ずしお、私たちが孊術研究から䜕かを準備し、䟿利で安党に䜿甚できる既補の料理ずしおナヌザヌに提䟛できる方法に぀いお説明したす。

因果関係の䞀貫性。 抂念を定矩したしょう

たず、因果的䞀貫性ずは䜕かずいうこずを䞀般的な蚀葉で蚀いたいず思いたす。 登堎人物は XNUMX 人です - レナヌドずペニヌ (TV シリヌズ「ビッグバン セオリヌ」):

HighLoad++、Mikhail Tyulenev (MongoDB): 因果関係の䞀貫性: 理論から実践たで

ペニヌがペヌロッパにいお、レナヌドが圌女にサプラむズパヌティヌを開きたいず考えおいるずしたす。 そしお、圌女を友達リストから倖し、すべおの友達にフィヌドで「ペニヌを幞せにしたしょう!」ず最新情報を送信する以䞊に良いこずは思い぀きたせん。 圌女はペヌロッパにいたすが、眠っおいる間、圌女はこのすべおを芋おいたせんし、そこにいないので芋るこずもできたせん。 最終的に、圌女はこの投皿を削陀し、フィヌドから削陀し、アクセスを埩元したため、䜕も気付かれず、スキャンダルもなくなりたした。
これはこれで十分ですが、システムが分散されおおり、少し問題が発生したず仮定しおみたしょう。 たずえば、むベントに因果関係がない堎合、この投皿が公開された埌にペニヌのアクセス制限が発生した可胜性がありたす。 実際、これはビゞネス機胜を実行するために因果関係の䞀貫性が必芁な堎合の䟋です (この堎合)。

実際、これらはデヌタベヌスの非垞に重芁なプロパティであり、サポヌトしおいる人はほずんどいたせん。 モデルの話に移りたしょう。

䞀貫性モデル

デヌタベヌスの敎合性モデルずは正確には䜕ですか? これらは、クラむアントがどのようなデヌタをどのような順序で受信できるかに぀いお、分散システムが提䟛する保蚌の䞀郚です。

原則ずしお、すべおの敎合性モデルは、分散システムが、たずえばラップトップ䞊の XNUMX ぀のノヌドで実行されるシステムずどの皋床䌌おいるかによっお決たりたす。 これは、地理的に分散された䜕千もの「ノヌド」䞊で実行されるシステムがラップトップにどれほど䌌おいるかを瀺しおおり、ラップトップではこれらすべおのプロパティが原則ずしお自動的に実行されたす。

したがっお、敎合性モデルは分散システムにのみ適甚されたす。 以前に存圚し、同じ垂盎スケヌリングで動䜜しおいたすべおのシステムでは、このような問題は発生したせんでした。 バッファ キャッシュが XNUMX ぀あり、すべおが垞にそこから読み取られたした。

モデルストロング

実際、最初のモデルはストロング (たたは、よく呌ばれるラむズ アビリティ ラむン) です。 これは、すべおの倉曎が発生したこずが確認されるず、その倉曎がシステムのすべおのナヌザヌに衚瀺されるようにする䞀貫性モデルです。

これにより、デヌタベヌス内のすべおのむベントのグロヌバルな順序が䜜成されたす。 これは非垞に匷い䞀貫性のプロパティであり、䞀般に非垞に高䟡です。 ただし、サポヌトは非​​垞に充実しおいたす。 非垞に高䟡で遅いだけで、めったに䜿甚されないだけです。 これを立ち䞊がり胜力ずいいたす。

Spanner では、倖郚䞀貫性ず呌ばれる、別の匷力なプロパティがサポヌトされおいたす。 それに぀いおは少し埌で話したす。

因果関係

次は Causal です。これはたさに私が話したものです。 Strong ず Causal の間にはさらにいく぀かのサブレベルがありたすが、これに぀いおは説明したせんが、それらはすべお Causal に芁玄されたす。 これは、すべおのモデルの䞭で最も匷力であり、ネットワヌクたたはパヌティションが存圚する堎合の䞀貫性が最も匷いため、重芁なモデルです。

因果関係ずは、実際には、出来事が因果関係によっお接続されおいる状況です。 非垞に倚くの堎合、それらはクラむアントの芳点から読む暩利があるず認識されたす。 クラむアントがいく぀かの倀を芳察した堎合、過去の倀を芋るこずはできたせん。 圌はすでに接頭蟞の読み方を芋始めおいたす。 結局のずころ、すべお同じこずになりたす。
敎合性モデルずしおの因果関係は、サヌバヌ䞊のむベントの郚分的な順序付けであり、すべおのクラむアントからのむベントが同じ順序で芳察されたす。 この堎合は、レナヌドずペニヌです。

最終的な

XNUMX 番目のモデルは結果敎合性です。 これは絶察にすべおの分散システムがサポヌトするものであり、たったく意味のある最小限のモデルです。 これは次のこずを意味したす。デヌタに䜕らかの倉曎があった堎合、ある時点でそれらの倉曎は䞀貫性を持぀ようになりたす。

そのような瞬間、圌女は䜕も蚀いたせん。そうでなければ、圌女は倖郚の䞀貫性に倉わるでしょう - それは完党に別の話になるでしょう。 それにもかかわらず、これは非垞に人気のある、最も䞀般的なモデルです。 デフォルトでは、分散システムのすべおのナヌザヌが結果敎合性を䜿甚したす。

いく぀かの比范䟋を瀺したいず思いたす。

HighLoad++、Mikhail Tyulenev (MongoDB): 因果関係の䞀貫性: 理論から実践たで

これらの矢印は䜕を意味するのでしょうか?

  • レむテンシヌ。 敎合性の匷床が増加するに぀れお、明癜な理由から敎合性の匷床も倧きくなりたす。より倚くのレコヌドを䜜成し、クラスタヌに参加しおいるすべおのホストずノヌドからデヌタがすでに存圚するずいう確認を取埗する必芁がありたす。 したがっお、結果敎合性が最も早い答えになりたす。原則ずしお、結果敎合性をメモリにコミットするこずもでき、原理的にはこれで十分だからです。
  • 可甚性。 これを、ネットワヌクの切断、分断、たたは䜕らかの障害が発生したずきにシステムが応答する胜力ずしお理解するず、䞀貫性モデルが䜎䞋するに぀れお耐障害性が向䞊したす。これは、XNUMX ぀のホストが同時に皌働しおいれば十分であるためです。時間によっお䜕らかのデヌタが生成されたす。 最終的な敎合性は、デヌタに぀いおはたったく保蚌したせん。デヌタは䜕でも構いたせん。
  • 異垞。 同時に、圓然、異垞の数も増加したす。 匷敎合性では、それらはほずんど存圚しないはずですが、結果的敎合性では䜕でも構いたせん。 異垞が含たれおいる堎合に、なぜ結果敎合性を遞択するのでしょうか?ずいう疑問が生じたす。 答えは、結果敎合性モデルが適甚可胜であり、異垞はたずえば短期間に存圚するずいうこずです。 りィザヌドを䜿甚しお、䞀貫したデヌタを読み取るこずができたす。 倚くの堎合、匷力な敎合性モデルを䜿甚できたす。 実際にはこれは機胜し、倚くの堎合、異垞の数は時間内に制限されたす。

CAP定理

䞀貫性、可甚性ずいう蚀葉を芋たずき、䜕を思い浮かべたすか? そう、CAP定理です 今、私はこの通説を払拭したいず思っおいたす... それは私ではありたせん - 玠晎らしい蚘事ず玠晎らしい本を曞いたマルティン・クレップマンです。

HighLoad++、Mikhail Tyulenev (MongoDB): 因果関係の䞀貫性: 理論から実践たで

CAP 定理は、䞀貫性、可甚性、パヌティションのいずれか 2000 ぀を遞択し、XNUMX ぀を遞択するこずはできないずいう XNUMX 幎代に定匏化された原則です。 それはある原則でした。 それは数幎埌、ギルバヌトずリンチによっお定理ずしお蚌明されたした。 その埌、これがマントラずしお䜿甚され始め、システムは CA、CP、AP などに分割され始めたした。

この定理は実際に次のケヌスで蚌明されたした... たず、可甚性は 0 から数癟たでの連続倀ではないず考えられおいたした (100 - システムは「停止」、XNUMX - すぐに応答したす。私たちはそのように考えるこずに慣れおいたす)。ただし、アルゎリズムのプロパティずしお、すべおの実行でデヌタが返されるこずが保蚌されたす。

応答時間に぀いおはたったく蚀及されおいたせん。 100 幎埌にデヌタを返すアルゎリズムがありたす。これは、CAP 定理の䞀郚であり、利甚可胜な非垞に玠晎らしいアルゎリズムです。
XNUMX 番目: これらの倉曎はサむズ倉曎可胜であるにもかかわらず、同じキヌの倀の倉曎に぀いお定理が蚌明されたした。 これは、モデルが結果敎合性、匷敎合性 (おそらく) 異なるため、実際にはほずんど䜿甚されおいないこずを意味したす。

これは䞀䜓䜕のためにあるのでしょうか さらに、CAP 定理は蚌明されたそのたたの圢では実際には適甚できず、めったに䜿甚されたせん。 理論的な圢では、䜕らかの圢ですべおを制限したす。 盎感的には正しいが、䞀般に蚌明されおいない特定の原理が刀明したした。

因果関係の䞀貫性が最も匷力なモデルである

珟圚起こっおいるこずは、パヌティションを䜿甚するこずで䞀貫性ず可甚性の XNUMX ぀をすべお実珟できるずいうこずです。 特に、因果的敎合性は最も匷力な敎合性モデルであり、パヌティション (ネットワヌクの䞭断) が存圚する堎合でも機胜したす。 それが非垞に興味深い理由であり、それが私たちがそれを取り䞊げた理由です。

HighLoad++、Mikhail Tyulenev (MongoDB): 因果関係の䞀貫性: 理論から実践たで

たず、アプリケヌション開発者の䜜業が簡玠化されたす。 特に、サヌバヌからの優れたサポヌトの存圚により、あるクラむアント内で発生するすべおのレコヌドが別のクラむアントに同じ順序で到着するこずが保蚌されたす。 第二に、パヌティションに耐えるこずができたす。

MongoDB 内郚キッチン

昌食であるこずを思い出し、キッチンに移動したす。 MongoDB ずいうデヌタベヌスを初めお聞く人のために、システムモデル、぀たり MongoDB に぀いお説明したす。

HighLoad++、Mikhail Tyulenev (MongoDB): 因果関係の䞀貫性: 理論から実践たで

HighLoad++、Mikhail Tyulenev (MongoDB): 因果関係の䞀貫性: 理論から実践たで

MongoDB (以䞋、「MongoDB」ず呌びたす) は、氎平スケヌリング、぀たりシャヌディングをサポヌトする分散システムです。 たた、各シャヌド内ではデヌタの冗長性、぀たりレプリケヌションもサポヌトされたす。

MongoDB (リレヌショナル デヌタベヌスではありたせん) のシャヌディングは自動バランシングを実行したす。぀たり、ドキュメントの各コレクション (リレヌショナル デヌタの甚語では「テヌブル」) が断片に分割され、サヌバヌがそれらをシャヌド間で自動的に移動したす。

クラむアントのリク゚ストを分散するク゚リ ルヌタヌは、それが動䜜するクラむアントです。 どのデヌタがどこにあるかをすでに認識しおおり、すべおのリク゚ストを正しいシャヌドに送信したす。

もう XNUMX ぀の重芁な点は、MongoDB は単䞀のマスタヌであるずいうこずです。 プラむマリが XNUMX ぀あり、それに含たれるキヌをサポヌトするレコヌドを取埗できたす。 マルチマスタヌ曞き蟌みはできたせん。

リリヌス 4.2 を䜜成したした - 新しい興味深いものがそこに登堎したした。 特に、Lucene、぀たり怜玢、぀たり実行可胜な Java を Mongo に盎接挿入し、Elastica ず同様に Lucene を介しお怜玢を実行できるようになりたした。

そしお圌らは新しい補品である Charts を䜜成したした。これは Atlas (Mongo 独自のクラりド) でも利甚できたす。 無料利甚枠があるので、詊しおみるこずができたす。 デヌタ芖芚化、非垞に盎感的なチャヌトがずおも気に入りたした。

成分 因果関係

数えおみたら、このトピックに関しおレスリヌ ランパヌトから出版された蚘事が玄 230 件ありたした。 さお、私の蚘憶に基づいお、これらの資料の䞀郚を皆さんにお䌝えしたす。

HighLoad++、Mikhail Tyulenev (MongoDB): 因果関係の䞀貫性: 理論から実践たで

すべおは、1970 幎代に曞かれたレスリヌ ランパヌトの蚘事から始たりたした。 ご芧のずおり、このトピックに関するいく぀かの研究はただ進行䞭です。 珟圚、分散システムの開発に関連しお、因果的䞀貫性が泚目されおいたす。

制限

どのような制限がありたすか? 生産システムが課す制限は孊術論文に存圚する制限ずは倧きく異なるため、これは実際に重芁なポむントの XNUMX ぀です。 倚くの堎合、それらは非垞に人工的です。

HighLoad++、Mikhail Tyulenev (MongoDB): 因果関係の䞀貫性: 理論から実践たで

  • たず、すでに述べたように、「MongoDB」は単䞀マスタヌです (これにより非垞に単玔化されたす)。
  • システムは玄 10 個のシャヌドをサポヌトする必芁があるず考えおいたす。 この倀を明瀺的に制限するようなアヌキテクチャ䞊の決定を行うこずはできたせん。
  • クラりドはありたすが、バむナリをダりンロヌドしおラップトップで実行するず、すべおがうたく動䜜する機䌚がただあるはずだず想定しおいたす。
  • 私たちは、Research がめったに想定しおいないこずを想定しおいたす。それは、倖郚クラむアントがやりたいこずは䜕でもできるずいうこずです。 MongoDB はオヌプン゜ヌスです。 したがっお、クラむアントは非垞に賢くお怒っおいる可胜性があり、すべおを壊したいず思う可胜性がありたす。 私たちは、ビザンチンのフェむロヌルが起源である可胜性があるず掚枬しおいたす。
  • 境界の倖偎にある倖郚クラむアントの堎合、重芁な制限がありたす。この機胜が無効になっおいる堎合、パフォヌマンスの䜎䞋は芳察されたせん。
  • もう XNUMX ぀の点は、䞀般に反孊術的です。぀たり、以前のバヌゞョンず将来のバヌゞョンの互換性です。 叀いドラむバヌは新しい曎新をサポヌトする必芁があり、デヌタベヌスは叀いドラむバヌをサポヌトする必芁がありたす。

䞀般に、これらすべおに制限が課せられたす。

因果的䞀貫性のコンポヌネント

次に、いく぀かのコンポヌネントに぀いお説明したす。 䞀般に因果関係の䞀貫性を考慮するず、ブロックを遞択できたす。 私たちは、特定のブロックに属する䜜品から遞択したした。䟝存関係の远跡、クロックの遞択、これらのクロックをどのように同期させるか、セキュリティをどのように確保するか、これが私が話す内容の倧たかな抂芁です。

HighLoad++、Mikhail Tyulenev (MongoDB): 因果関係の䞀貫性: 理論から実践たで

完党な䟝存関係の远跡

なぜ必芁なのでしょうか? そのため、デヌタがレプリケヌトされるずき、各レコヌド、各デヌタ倉曎には、どの倉曎に䟝存するかに぀いおの情報が含たれたす。 最初の単玔な倉曎は、レコヌドを含む各メッセヌゞに以前のメッセヌゞに関する情報が含たれる堎合です。

HighLoad++、Mikhail Tyulenev (MongoDB): 因果関係の䞀貫性: 理論から実践たで

この䟋では、䞭括匧内の数字がレコヌド番号です。 倀を含むこれらのレコヌド党䜓が転送されるこずもあれば、䞀郚のバヌゞョンが転送されるこずもありたす。 肝心なのは、各倉曎には前の倉曎に関する情報が含たれおいるずいうこずです (明らかに、すべおの倉曎がそれ自䜓の䞭に含たれおいたす)。

なぜこのアプロヌチ (完党な远跡) を䜿甚しないこずにしたのでしょうか? 明らかに、このアプロヌチは非珟実的であるため、゜ヌシャル ネットワヌクぞの倉曎は、その゜ヌシャル ネットワヌクに察する以前のすべおの倉曎に䟝存し、曎新ごずに Facebook や VKontakte が転送されるこずになりたす。 それにもかかわらず、完党な䟝存関係远跡に぀いおは倚くの研究が行われおいたす – これらは゜ヌシャル ネットワヌク以前のものであり、状況によっおは実際に機胜したす。

明瀺的な䟝存関係の远跡

次のものはさらに制限されおいたす。 ここでは情報の転送も考慮されたすが、明らかに䟝存しおいるもののみです。 䜕が決たるかは、原則ずしおアプリケヌションによっお決定される内容に䟝存したす。 デヌタがレプリケヌトされるず、ク゚リは以前の䟝存関係が満たされた堎合、぀たり䟝存関係が瀺された堎合にのみ応答を返したす。 これが、因果関係の䞀貫性が機胜する仕組みの本質です。

HighLoad++、Mikhail Tyulenev (MongoDB): 因果関係の䞀貫性: 理論から実践たで

圌女は、レコヌド 5 がレコヌド 1、2、3、4 に䟝存しおいるこずを確認したした。したがっお、以前のすべおの倉曎がすでにデヌタベヌスを通過しおいるずきに、クラむアントがペニヌのアクセス決定によっお行われた倉曎にアクセスできるようになるたで埅機したす。

情報が倚すぎるため、䜜業が遅くなる可胜性があるため、これも私たちには適しおいたせん。 別のアプロヌチもありたす...

ランポヌトの時蚈

圌らはずおも叀いです。 Lamport Clock は、これらの䟝存関係が Lamport Clock ず呌ばれるスカラヌ関数に折り畳たれるこずを意味したす。

スカラヌ関数は抜象的な数倀です。 それはしばしば論理時間ず呌ばれたす。 むベントが発生するたびに、このカりンタヌは増加したす。 珟圚プロセスに認識されおいるカりンタヌが各メッセヌゞを送信したす。 プロセスが同期しおいない可胜性があり、たったく異なる時間が発生する可胜性があるこずは明らかです。 それにも関わらず、システムは䜕らかの方法でそのようなメッセヌゞの送信によりクロックのバランスをずりたす。 この堎合はどうなるのでしょうか?

明確にするために、その倧きなシャヌドを XNUMX ぀に分割したした。友人は、コレクションの䞀郚を含む XNUMX ぀のノヌドに存圚でき、フィヌドは、このコレクションの䞀郚を含む別のノヌドに存圚できたす。 圌らがどのようにしおラむンから倖れるこずができるかは明らかですか 最初のフィヌドには「耇補されたした」ず衚瀺され、次に「友達」ず衚瀺されたす。 Friends コレクション内の Friends の䟝存関係も配信されるたでフィヌドが衚瀺されないずいう䜕らかの保蚌をシステムが提䟛しない堎合、たさに私が述べた状況が発生したす。

フィヌドのカりンタヌ時間が論理的にどのように増加するかがわかりたす。

HighLoad++、Mikhail Tyulenev (MongoDB): 因果関係の䞀貫性: 理論から実践たで

したがっお、このランポヌト クロックず因果関係の䞀貫性 (ランポヌト クロックで説明) の䞻な特性は次のずおりです。むベント A ず B があり、むベント B がむベント A* に䟝存する堎合、むベント A の LogicalTime は より小さいずいうこずになりたす。むベント B からの LogicalTime。

* 時々圌らは、A は B の前に起こった、぀たり A は B の前に起こったずも蚀いたす。これは、䞀般的に起こった䞀連の出来事党䜓を郚分的に順序付ける特定の関係です。

その逆は正しくありたせん。 これは実際には、Lamport Clock の䞻な欠点の XNUMX ぀です - 䞍完党な順序です。 同時のむベント、぀たり、(A が B の前に起こった) も (A が B の前に起こった) も起こらないむベントに぀いおの抂念がありたす。 䟋ずしおは、レナヌドが同時に他の人を友達ずしお远加するこずが挙げられたすレナヌドではなくシェルドンなど。
これは、Lamport クロックを扱うずきによく䜿甚されるプロパティです。Lamport クロックは特に関数を調べ、そこからおそらくこれらのむベントが䟝存しおいるず結論付けたす。 なぜなら、䞀方向は正しいからです。぀たり、LogicalTime A が LogicalTime B より小さい堎合、B は A より前に発生するこずはできたせん。 それ以䞊であれば、おそらく。

ベクトルクロック

ランポヌト クロックを論理的に発展させたものがベクトル クロックです。 それらは、ここにある各ノヌドが独自の個別のクロックを含み、ベクトルずしお送信されるずいう点で異なりたす。
この堎合、ベクトルの 1 番目のむンデックスがフィヌドを担圓し、ベクトルの最初のむンデックスがフレンド (これらの各ノヌド) を担圓しおいるこずがわかりたす。 そしお今、それらは増加したす: 曞き蟌み時に「フィヌド」のれロむンデックスが増加したす - 2、3、XNUMX:

HighLoad++、Mikhail Tyulenev (MongoDB): 因果関係の䞀貫性: 理論から実践たで

なぜベクトルクロックが優れおいるのでしょうか? なぜなら、どのむベントが同時に発生し、それらが異なるノヌドでい぀発生するかを把握できるからです。 これは、MongoDB のようなシャヌディング システムにずっお非垞に重芁です。 しかし、私たちはこれを遞択したせんでした。それは玠晎らしいこずですし、うたく機胜し、おそらく私たちに合っおいるでしょう...

10 個のシャヌドがある堎合、圧瞮したり別の方法を考え出したりしたずしおも、10 個のコンポヌネントを転送するこずはできたせん。ペむロヌドは䟝然ずしおこのベクトル党䜓の䜓積よりも数倍小さくなりたす。 したがっお、私たちは歯を食いしばっおこのアプロヌチを攟棄し、別のアプロヌチに移りたした。

スパナ TrueTime。 原子時蚈

スパナヌに぀いおの話があるだろうず蚀いたした。 これは XNUMX 䞖玀らしいクヌルなものです。原子時蚈、GPS 同期です。

どういう考えですか 「Spanner」は、最近人々が利甚できるようになった Google システムです (SQL が远加されたした)。 各トランザクションにはタむムスタンプが付いおいたす。 時間が同期*されおいるため、各むベントに特定の時間を割り圓おるこずができたす。原子時蚈には埅機時間があり、その埌、別の時間が「発生」するこずが保蚌されたす。

HighLoad++、Mikhail Tyulenev (MongoDB): 因果関係の䞀貫性: 理論から実践たで

したがっお、単にデヌタベヌスに曞き蟌み、䞀定時間埅機するだけで、むベントのシリアル化可胜性が自動的に保蚌されたす。 圌らは原理的に想像できる最も匷力な䞀貫性モデルを持っおいたす - それは倖郚䞀貫性です。

* これが Lampart クロックの䞻な問題です。分散システムではクロックは決しお同期したせん。 これらは分岐する可胜性があり、NTP を䜿甚しおも、䟝然ずしおうたく機胜したせん。 「Spanner」には原子時蚈が搭茉されおおり、同期はマむクロ秒単䜍だそうです。

なぜ遞ばなかったのでしょうか 圓瀟では、ナヌザヌが原子時蚈を内蔵しおいるこずを想定しおいたせん。 これらが登堎するず、すべおのラップトップに組み蟌たれ、ある皮の非垞にクヌルな GPS 同期が行われるこずになりたす。その堎合はそうです...しかし、今のずころ考えられる最善のものは、アマゟン、ベヌス ステヌションです。マニア向けです...そこで、他の時蚈を䜿甚したした。 。

ハむブリッドクロック

これは実際に、MongoDB で因果関係の䞀貫性を確保する際にチェックされるこずです。 それらはどのようにハむブリッドになっおいるのでしょうか ハむブリッドはスカラヌ倀ですが、次の XNUMX ぀のコンポヌネントがありたす。

HighLoad++、Mikhail Tyulenev (MongoDB): 因果関係の䞀貫性: 理論から実践たで

  • XNUMX ぀目は Unix ゚ポック (「コンピュヌタヌ䞖界の始たり」から䜕秒が経過したか) です。
  • 32 番目は䜕らかの増分で、これも XNUMX ビット unsigned int です。

実はそれだけです。 このアプロヌチがありたす。時間を担圓する郚分は垞に時蚈ず同期しおいたす。 曎新が発生するたびに、この郚分はクロックず同期され、時刻は垞に倚かれ少なかれ正確であるこずがわかり、むンクリメントにより、同じ時点で発生したむベントを区別できるようになりたす。

これが MongoDB にずっお重芁な理由は䜕ですか? それは、特定の時点で䜕らかのバックアップ レストランを䜜成できるためです。぀たり、むベントは時間によっおむンデックス付けされたす。 これは、特定のむベントが必芁な堎合に重芁です。 デヌタベヌスの堎合、むベントは䞀定の時間間隔で発生するデヌタベヌス内の倉曎です。

䞀番倧切な理由をあなただけに教えたす誰にも蚀わないでください これは、敎理されたむンデックス付きデヌタが MongoDB OpLog でどのように芋えるかずいう理由からです。 OpLog は、デヌタベヌス内のすべおの倉曎を完党に含むデヌタ構造です。倉曎はたず OpLog に送られ、レプリケヌトされた日付たたはシャヌドの堎合は次にストレヌゞ自䜓に適甚されたす。

これが䞻な理由でした。 ただし、デヌタベヌスの開発には実際的な芁件もありたす。぀たり、デヌタベヌスはシンプルである必芁がありたす。぀たり、コヌドが少なく、曞き換えやテストが必芁な壊れた郚分ができるだけ少ないこずです。 私たちの oplog がハむブリッド クロックによっおむンデックス付けされおいたずいう事実は非垞に圹立ち、正しい遞択をするこずができたした。 それは本圓に功を奏し、どういうわけか魔法のように最初のプロトタむプが完成したした。 ずおもかっこよかったです

クロック同期

科孊文献にはいく぀かの同期方法が蚘茉されおいたす。 XNUMX ぀の異なるシャヌドがある堎合の同期に぀いお話しおいたす。 レプリカ セットが XNUMX ぀ある堎合は、同期の必芁はありたせん。これは「単䞀マスタヌ」です。 すべおの倉曎がそこに入る OpLog がありたす。この堎合、すべおはすでに「Oplog」自䜓で順番に䞊べられおいたす。 ただし、XNUMX ぀の異なるシャヌドがある堎合は、時間の同期が重芁になりたす。 ここで、ベクトル クロックがさらに圹に立ちたした。 しかし、私たちにはそれらがありたせん。

HighLoad++、Mikhail Tyulenev (MongoDB): 因果関係の䞀貫性: 理論から実践たで

XNUMX ぀目は「Heartbeats」です。 単䜍時間ごずに発生するいく぀かの信号を亀換するこずが可胜です。 しかし、ハヌトビヌトが遅すぎるため、クラむアントにレむテンシヌを提䟛できたせん。

本圓の時間ずいうのは、もちろん玠晎らしいものです。 しかし、繰り返したすが、これはおそらく未来のこずです...Atlas ではすでに実行できたすが、高速な「Amazon」時刻同期装眮がすでに存圚したす。 しかし、誰もが利甚できるわけではありたせん。

うわさ話は、すべおのメッセヌゞに時間が含たれる堎合です。 これは私たちが䜿甚しおいるものずほが同じです。 ノヌド間のすべおのメッセヌゞ、ドラむバヌ、デヌタ ノヌド ルヌタヌなど、MongoDB のすべおはある皮の芁玠、぀たり動䜜するクロックを含むデヌタベヌス コンポヌネントです。 どこにいおもハむブリッドな時間の意味が䌝わっおきたす。 64ビット これにより、これが可胜になりたす。

すべおはどのように連携しお機胜するのでしょうか?

ここでは、少しわかりやすくするために、レプリカ セットを XNUMX ぀取り䞊げたす。 プラむマリずセカンダリがありたす。 セカンダリはレプリケヌションを実行したすが、必ずしもプラむマリず完党に同期しおいるわけではありたせん。

特定の時間倀で「プラむマリ」ぞの挿入が発生したす。 この挿入により、内郚カりントが最倧倀の堎合は 11 ず぀増加したす。 たたは、クロック倀をチェックし、クロック倀が倧きい堎合はクロックに同期したす。 これにより、時間ごずに敎理するこずができたす。

圌が録音を行った埌、重芁な瞬間が起こりたす。 クロックは「MongoDB」にあり、「Oplog」に曞き蟌む堎合にのみむンクリメントされたす。 これはシステムの状態を倉曎するむベントです。 すべおの叀兞的な蚘事では、むベントはメッセヌゞがノヌドに到達したずきずみなされたす。぀たり、メッセヌゞが到着したした。これは、システムの状態が倉化したこずを意味したす。

これは、研究䞭に、このメッセヌゞがどのように解釈されるかが完党には明らかではないずいう事実によるものです。 それが「Oplog」に反映されない堎合、それはいかなる圢でも解釈されず、システムの状態の倉化は「Oplog」の単なる゚ントリにすぎないこずを私たちは確信しおいたす。 これにより、すべおが簡玠化されたす。モデルによっおそれが簡玠化され、XNUMX ぀のレプリカ セット内でそれを敎理できるようになり、その他倚くの䟿利なこずが可胜になりたす。

「Oplog」にすでに曞き蟌たれおいる倀が返されたす。「Oplog」にはすでにこの倀が含たれおおり、その時刻は 12 であるこずがわかりたす。ここで、たずえば、読み取りが別のノヌド (セカンダリ) から開始され、afterClusterTime が送信されたす。メッセヌゞ。 圌はこう蚀いたす。「少なくずも 12 時以降、たたは XNUMX 時の間に起こったこずはすべお必芁です」䞊の写真を参照。

これは、因果的䞀貫性 (CAT) ず呌ばれるものです。 理論的には、これは時間の䞀郚であるずいう抂念があり、それ自䜓は䞀貫しおいたす。 この堎合、これは時間 12 で芳察されたシステムの状態であるず蚀えたす。

ここにはただ䜕もありたせん。これは、セカンダリがプラむマリからデヌタをレプリケヌトする必芁がある堎合の状況をシミュレヌトするためです。 圌は埅ちたす...そしお今、デヌタが到着したした - 圌はこれらの倀を返したす。

HighLoad++、Mikhail Tyulenev (MongoDB): 因果関係の䞀貫性: 理論から実践たで

それがすべおの仕組みです。 ほずんど。

「ほが」ずはどういう意味ですか? これがどのように機胜するかを読んで理解した人がいるず仮定したしょう。 ClusterTime が発生するたびに内郚論理クロックが曎新され、次の゚ントリが 20 ず぀増加するこずがわかりたした。 この関数には 64 行かかりたす。 この人が XNUMX ビットの最倧の数倀から XNUMX を匕いた数倀を送信したずしたす。

なぜ「マむナスXNUMX」なのか 内郚クロックがこの倀に眮き換えられるため (明らかに、これは可胜な最倧倀であり、珟圚時刻よりも倧きくなりたす)、「Oplog」に゚ントリが発生し、クロックは別の単䜍でむンクリメントされたす。最倧倀 (単玔にすべおの単䜍があり、他に行く堎所がない)、unsaint ints) である必芁がありたす。

この埌、システムはたったくアクセスできなくなるこずは明らかです。 荷降ろしず枅掃のみが可胜で、倚くの手䜜業が必芁です。 完党な可甚性:

HighLoad++、Mikhail Tyulenev (MongoDB): 因果関係の䞀貫性: 理論から実践たで

さらに、これが別の堎所にレプリケヌトされるず、クラスタヌ党䜓が単にダりンしたす。 誰でも非垞に迅速か぀簡単に組織できる、絶察に受け入れられない状況です。 したがっお、私たちはこの瞬間が最も重芁な瞬間の䞀぀であるず考えたした。 それを防ぐにはどうすればよいでしょうか

私たちの方法は、clusterTime に眲名するこずです

これは、メッセヌゞ内 (青いテキストの前) で送信される方法です。 ただし、眲名 (青色のテキスト) の生成も開始したした。

HighLoad++、Mikhail Tyulenev (MongoDB): 因果関係の䞀貫性: 理論から実践たで

眲名は、デヌタベヌス内の安党な境界内に保存されおいるキヌによっお生成されたす。 それ自䜓が生成および曎新されたす (ナヌザヌにはそれに぀いお䜕も衚瀺されたせん)。 ハッシュが生成され、各メッセヌゞは䜜成時に眲名され、受信時に怜蚌されたす。
おそらく人々の心の䞭には、「これによっおどれくらい速床が䜎䞋するのでしょうか?」ずいう疑問が生じるでしょう。 特にこの機胜がない堎合には、すぐに機胜するはずだず蚀いたした。

この堎合、因果的䞀貫性を䜿甚するずはどういう意味ですか? これは、afterClusterTime パラメヌタヌを衚瀺するためです。 これがなければ、ずにかく単に倀を枡すこずになりたす。 バヌゞョン 3.6 以降、噂話は垞に機胜したす。

眲名を継続的に生成したたたにしおおくず、機胜がない堎合でもシステムの速床が䜎䞋し、アプロヌチず芁件を満たしおいたせん。 それで、私たちは䜕をしたのでしょうか

早くやれよ

非垞に単玔なこずですが、そのトリックは興味深いものです。おそらく誰かが興味を持っおくれるので、それを共有したす。
眲名されたデヌタを保存するハッシュがありたす。 すべおのデヌタはキャッシュを通過したす。 キャッシュは特定の時刻ではなく、範囲に眲名したす。 䜕らかの倀が到着するず、Range を生成し、最埌の 16 ビットをマスクしお、この倀に眲名したす。

HighLoad++、Mikhail Tyulenev (MongoDB): 因果関係の䞀貫性: 理論から実践たで

このような眲名を受け取るこずで、システムを (盞察的に) 65 倍高速化したす。 これはうたく機胜し、実隓を行ったずころ、逐次曎新を行うず実際に時間が 10 䞇分の XNUMX に短瞮されたした。 䞡者が察立しおいる堎合、これが機胜しないこずは明らかです。 しかし、ほずんどの実際のケヌスでは機胜したす。 Range 眲名ず眲名を組み合わせるこずで、セキュリティの問題が解決されたした。

私たちは䜕を孊びたしたか

このこずから私たちが孊んだ教蚓は次のずおりです。

  • 興味深いものがたくさんあるので、資料、物語、蚘事を読む必芁がありたす。 䜕らかの機胜に取り組むずき (特に今、トランザクションを行ったずきなど)、読んで理解する必芁がありたす。 時間はかかりたすが、自分がどこにいるのかが明確になるので、実際には非垞に䟿利です。 私たちは䜕も新しいこずを思い぀いたようには芋えたせんでした。ただ材料を取り出しただけです。

    䞀般に、孊術䌚議があるずきたずえばシグモン、考え方には䞀定の違いがあり、誰もが新しいアむデアに集䞭したす。 私たちのアルゎリズムの䜕が新しいのでしょうか? ここには特に新しいこずはありたせん。 むしろ目新しさは、既存のアプロヌチを融合した方法にありたす。 したがっお、たずはランパヌトをはじめずする叀兞を読むこずだ。

  • 本番環境では、芁件はたったく異なりたす。 皆さんの倚くは、抜象的な空間にある「球状」デヌタベヌスではなく、可甚性、遅延、フォヌルト トレランスに問題がある通垞の珟実のものに盎面しおいるず思いたす。
  • 最埌に、さたざたなアむデアを怜蚎し、いく぀かのたったく異なる蚘事を XNUMX ぀のアプロヌチに統合する必芁がありたした。 たずえば、眲名に関するアむデアは䞀般に、Paxos プロトコルを考慮した蚘事から来おいたす。Paxos プロトコルは、非ビザンチン フェむルの堎合は認蚌プロトコルの内偎にあり、ビザンチン フェむルの堎合は認蚌プロトコルの倖偎にありたす... 䞀般に、これはたさに私たちが行っおいるものです。結局やっおしたった。

    ここにはたったく新しいものはありたせん しかし、すべおを混ぜ合わせるずすぐに...卵、マペネヌズ、キュりリはすでに発明されおいるため、オリノィ゚サラダのレシピはナンセンスであるず蚀っおいるのず同じです...ほが同じ話です。

HighLoad++、Mikhail Tyulenev (MongoDB): 因果関係の䞀貫性: 理論から実践たで

これで終わりたす。 ありがずう

質問

䌚堎からの質問以䞋B – ミハむルさん、レポヌトありがずうございたす 時間に関する話題は興味深いです。 あなたはゎシップを䜿甚しおいたす。 圌らは、誰もが自分の時間を持っおおり、誰もが自分の珟地時間を知っおいるず蚀いたした。 私の理解では、ドラむバヌが存圚したす。ドラむバヌ、ク゚リ プランナヌ、シャヌドを備えた倚くのクラむアントが存圚する可胜性がありたす... そしお、突然䞍䞀臎が発生した堎合、システムはどうなるでしょうか。誰かがそれが問題であるず刀断したのです。 XNUMX分前、XNUMX分遅れの人はいたすか 私たちはどこに行き着くのでしょうか

MT: – 実に玠晎らしい質問です。 シャヌドに぀いお話したかっただけです。 質問を正しく理解しおいれば、次のような状況になりたす。シャヌド 1 ずシャヌド 2 があり、これら XNUMX ぀のシャヌドから読み取りが行われたす。これらのシャヌドには䞍䞀臎があり、認識しおいる時間が異なるため、盞互䜜甚したせん。特に oplogs に存圚する時間。
シャヌド 1 が 2 䞇件のレコヌドを䜜成し、シャヌド 2 はたったく䜕もせず、リク゚ストが XNUMX ぀のシャヌドに届いたずしたす。 最初のものの afterClusterTime は XNUMX 䞇を超えおいたす。 このような状況では、先ほど説明したように、シャヌド XNUMX はたったく応答したせん。

で – どのように同期しお XNUMX ぀の論理時間を遞択するのか知りたかったのですが?

MT: - 同期が非垞に簡単です。 シャヌドは、ClusterTime の埌に圌がやっお来お、「Oplog」に時間が芋぀からなかったずき、承認されずに開始したす。 ぀たり、圌は自分の手で時間をこの倀たで䞊げたす。 これは、このリク゚ストに䞀臎するむベントがないこずを意味したす。 圌はこの出来事を人為的に䜜り出し、したがっお因果関係が䞀臎したす。

で – この埌、ネットワヌクのどこかに倱われた別のむベントが圌の元にやっお来たらどうしたすか?

MT: – シャヌドは単䞀のマスタヌであるため、二床ず来ないように蚭蚈されおいたす。 圌がすでにサむンアップしおいる堎合、圌らは来たせんが、埌で来たす。 䜕かがどこかで行き詰たっお、その埌圌が䜕も曞かず、その埌にこれらのむベントが到着するずいうこずは起こり埗たせん - そしお因果関係の䞀貫性が壊れたす。 圌が䜕も曞かないずきは、党員が次に来るはずです (圌は圌らを埅ちたす)。

HighLoad++、Mikhail Tyulenev (MongoDB): 因果関係の䞀貫性: 理論から実践たで

で – キュヌに関しおいく぀か質問がありたす。 因果的䞀貫性は、実行する必芁があるアクションの特定のキュヌがあるこずを前提ずしおいたす。 パッケヌゞの 10 ぀がなくなったらどうなりたすか? 11番目、12番目が来たす...XNUMX番目は消えたした、そしお他の誰もがそれが実珟するのを埅っおいたす。 そしお突然車が死んでしたったので、私たちは䜕もできたせん。 実行前に蓄積されるキュヌの最倧長はありたすか? どれか XNUMX ぀の状態が倱われるず、どのような臎呜的な障害が発生したすか? しかも、以前の状態があるず曞いたら、そこから䜕ずか始めればいいんじゃないでしょうか しかし、圌らは圌を突き攟したせんでした

MT: – これも玠晎らしい質問ですね 私たちは䜕をしおいるのでしょうか MongoDB には、クォヌラム曞き蟌み、クォヌラム読み取りの抂念がありたす。 どのような堎合にメッセヌゞが倱われる可胜性がありたすか? 曞き蟌みがクォヌラムではない堎合、たたは読み取りがクォヌラムではない堎合 (䜕らかのゎミが付着しおいる可胜性もありたす)。
因果的䞀貫性に関しおは、倧芏暡な実隓テストが行​​われ、その結果、曞き蟌みず読み取りがクォヌラム以倖の堎合に、因果的䞀貫性の違反が発生するこずが刀明したした。 たさにあなたの蚀う通りです

私たちのアドバむス: 因果的䞀貫性を䜿甚する堎合は、少なくずもクォヌラム読み取りを䜿甚しおください。 この堎合、クォヌラム レコヌドが倱われたずしおも、䜕も倱われるこずはありたせん。これは盎亀する状況です。ナヌザヌがデヌタを倱いたくない堎合は、クォヌラム レコヌドを䜿甚する必芁がありたす。 因果関係の䞀貫性は耐久性を保蚌したせん。 耐久性は、レプリケヌションずレプリケヌションに関連する機構によっお保蚌されたす。

で – シャヌディングを実行するむンスタンス (それぞれマスタヌではなくスレヌブ) を䜜成する堎合、そのむンスタンスはそれ自身のマシンの Unix 時間たたは「マスタヌ」の時間に䟝存したす。 同期は初めおですか、それずも定期的にですか?

MT: – 今からはっきりさせおおきたす。 シャヌド (぀たり、氎平パヌティション) – そこには垞にプラむマリが存圚したす。 たた、シャヌドには「マスタヌ」が存圚する堎合もあれば、レプリカが存圚する堎合もありたす。 ただし、シャヌドは䜕らかのドメむン (シャヌドにはプラむマリがある) をサポヌトする必芁があるため、垞に蚘録をサポヌトしたす。

で ――すべおは“垫匠”次第ずいうこずですね マスタヌタむムは垞に䜿甚されたすか?

MT: - はい。 比喩的に蚀うず、「マスタヌ」、぀たり「Oplog」ぞの゚ントリヌが発生するず、時蚈が時を刻んでいるずいうこずです。

で – 接続しおいるクラむアントがいたすが、時間に぀いお䜕も知る必芁はありたせんか?

MT: – 䜕も知らなくおも倧䞈倫 それがクラむアント䞊でどのように機胜するかに぀いお話すず、クラむアントが因果的䞀貫性を䜿甚したい堎合、セッションを開く必芁がありたす。 これで、セッション内のトランザクション、暩利の取埗など、すべおが完了したした。セッションずは、クラむアントで発生する論理むベントの順序です。

圌がこのセッションを開いお、そこで因果関係の䞀貫性が必芁だず蚀うず (セッションがデフォルトで因果関係の䞀貫性をサポヌトしおいる堎合)、すべおが自動的に機胜したす。 ドラむバヌはこの時間を蚘憶しおおり、新しいメッセヌゞを受信するず時間を増やしたす。 デヌタを返したサヌバヌから前回の応答がどのような応答を返したかを蚘憶したす。 次のリク゚ストには、afterCluster("これより倧きい時間") が含たれたす。

クラむアントは䜕も知る必芁はありたせん。 これは圌にずっおたったく䞍透明だ。 これらの機胜を䜿甚するず、䜕ができるでしょうか? たず、セカンダリを安党に読み取るこずができたす。プラむマリに曞き蟌み、地理的にレプリケヌトされたセカンダリから読み取るこずができ、それが動䜜するこずを確認できたす。 同時に、プラむマリで蚘録されたセッションをセカンダリに転送するこずもできたす。぀たり、XNUMX ぀のセッションではなく、耇数のセッションを䜿甚できたす。

で – コンピュヌティング サむ゚ンスの新しい局である CRDT (Conflict-free Replicated Data Types) デヌタ型は、結果敎合性のトピックず匷く関連しおいたす。 このようなタむプのデヌタをデヌタベヌスに統合するこずを怜蚎したこずがありたすか? それに぀いお䜕が蚀えたすか?

MT: - 良い質問 CRDT は曞き蟌み競合に意味がありたす。MongoDB では単䞀マスタヌです。

で – Devops から質問がありたす。 珟実の䞖界では、ビザンチン障害が発生し、保護された境界内の邪悪な人々がプロトコルに䟵入し始め、特別な方法で工芞品パッケヌゞを送信し始めたずきに、そのようなむ゚ズス䌚の状況が発生したすか

HighLoad++、Mikhail Tyulenev (MongoDB): 因果関係の䞀貫性: 理論から実践たで

MT: – 境界内の邪悪な人々はトロむの朚銬のようなものです! 境界内の邪悪な人々は倚くの悪いこずをする可胜性がありたす。

で – 倧たかに蚀えば、サヌバヌに穎を開けたたたにするず、そこから象の動物園を入れおクラスタヌ党䜓を氞久に厩壊させるこずができるこずは明らかです...手動での回埩には時間がかかりたす...これは、控えめに蚀っおも、間違っおいる。 䞀方で、これは興味深いこずです。珟実の生掻や実務では、圓然ながら同様の内郚攻撃が発生する状況がありたす。

MT: – 実生掻でセキュリティ䟵害に遭遇するこずはめったにないので、実際にセキュリティ䟵害が発生するかどうかはわかりたせん。 しかし、開発哲孊に぀いお話すず、私たちは次のように考えたす。セキュリティを担圓する人々を提䟛する境界線がありたす。これは城であり、壁です。 そしお境界線の内偎では、やりたいこずが䜕でもできたす。 ディレクトリを衚瀺するだけの暩限を持぀ナヌザヌず、ディレクトリを消去する暩限を持぀ナヌザヌがいるこずは明らかです。

暩利に応じお、ナヌザヌが及がす損害はネズミの堎合もあればゟりの堎合もありたす。 完党な暩限を持぀ナヌザヌは䜕でもできるこずは明らかです。 暩限が制限されたナヌザヌは、害を倧幅に軜枛できたす。 特に、システムを砎壊するこずはできたせん。

で – 保護された境界内で、誰かがサヌバヌを完党に砎壊するために、サヌバヌ甚の予期しないプロトコルを䜜成しようずしたした。運が良ければクラスタヌ党䜓を砎壊しようずしたした...これほど「良い」状態になるこずはありたすか?

MT: 「そのようなこずは聞いたこずがありたせん。」 この方法でサヌバヌをクラッシュできるずいう事実は呚知の事実です。 内郚で倱敗するこず、プロトコルからのものであるこず、メッセヌゞにこのような内容を曞き蟌むこずができる蚱可されたナヌザヌであるこず...実際には、ただ怜蚌されるため、それは䞍可胜です。 この認蚌を垌望しないナヌザヌに察しおは、この認蚌を無効にするこずができたす。その堎合は、それがナヌザヌの問題です。 倧たかに蚀えば、圌らは自分たちで壁を砎壊したので、そこに象を抌し蟌むず螏みにじるこずができたす...しかし䞀般的には、修理工の栌奜をしお、来おそれを匕き抜くこずができたす

で – ご報告ありがずうございたす。 セルゲむダンデックス。 Mong には、レプリカ セット内の投祚メンバヌの数を制限する定数があり、この定数は 7 (セブン) です。 なぜこれが定数なのでしょうか? なぜこれは䜕らかのパラメヌタではないのでしょうか?

MT: – 40 ノヌドのレプリカ セットがありたす。 垞に倚数掟が存圚したす。 どのバヌゞョンか分かりたせん...

で – レプリカ セットでは非投祚メンバヌを実行できたすが、投祚メンバヌは最倧 7 人です。この堎合、レプリカ セットが 3 ぀のデヌタ センタヌに分散しおいる堎合、シャットダりンをどうやっお乗り切るこずができたすか? XNUMX ぀のデヌタセンタヌの電源が簡単にオフになり、別のマシンが停止する可胜性がありたす。

MT: – これはすでにレポヌトの範囲を少し超えおいたす。 これは䞀般的な質問です。 もしかしたらそれに぀いおは埌でお話しできるかもしれたせん。

HighLoad++、Mikhail Tyulenev (MongoDB): 因果関係の䞀貫性: 理論から実践たで

いく぀かの広告 🙂

い぀もご宿泊いただきありがずうございたす。 私たちの蚘事が気に入っおいたすか? もっず興味深いコンテンツを芋たいですか? 泚文したり、友人に勧めたりしお私たちをサポヌトしおください。 開発者向けのクラりド VPS は 4.99 ドルから, 圓瀟があなたのために発明した、゚ントリヌレベルのサヌバヌのナニヌクな類䌌物です。 VPS (KVM) E5-2697 v3 (6 コア) 10GB DDR4 480GB SSD 1Gbps 19 ドルからの真実、たたはサヌバヌを共有する方法? (RAID1 および RAID10、最倧 24 コア、最倧 40GB DDR4 で利甚可胜)。

アムステルダムの゚クむニクス Tier IV デヌタセンタヌでは Dell R730xd が 2 倍安い? ここだけ 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV 199 ドルから オランダで Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - 99 ドルから! に぀いお読む むンフラストラクチャヌ䌁業を構築する方法730 ペニヌで 5 ナヌロの䟡倀がある Dell R2650xd E4-9000 vXNUMX サヌバヌを䜿甚したクラスですか?

出所 habr.com

コメントを远加したす