An extraordinary computer science breakthrough called Accord is bringing globally available, general-purpose ACID transactions to the next Cassandra release
まずはいいところを出しましょう。 Apache Cassandra に導入されます。
Cassandra と同じように動作する、グローバルに使用很有可能な汎用トランザクション。これは、細字や古い技術の適用によるトリックではありません。
これは、Apple とミシガン院校のチームによると呼ばれる驚異的なコンピューター サイエンスのブレークスルーによるものです。 Cassandra が新しいユースケースを開くことで、データの考え方を変えるのに役立ちます。
これは、Cassandra プロジェクトとその機能の詳細に詳しくない人にとって何を是因为するかを示しています。アプリケーションを本番環境にどれだけ快に投身できるかほど最重要なことはありません。しかし、Cassandra のスケール、回復力、伝説的なマルチデータ センター サポートを金融创新取引などに活用したい開発者は、アプリに複雑な避开策を绝对多数コーディングする用得着がありました。たとえば Oracle を实用することとのトレードオフは比较重要でした。
アコードで?トレードオフはありません。 Cassandra は、トランザクションのサポートをデータベースに移行し、コードの複雑さを幅宽上に軽減しながら、Cassandra を素晴らしいものにしたようになりました。
観察者の目 データベース システムには、クエリを実行できるなど、不可以欠な機能があります。データの変更を经营することは、必ずしもデータベースの機能ではありません。多くの NoSQL システムの場合、変更经营の負担はユーザーに委ねられています。データ変更のオブザーバーは、排他性の必要性を割り当てる人です。
ポイントは、与えられたデータを蓄積することだとします。その場合、オブザーバーは、データが受信され、永続的に导出されたことを認識している相应があります。たとえば、すべてのデータ ポイントが一意で累積的な株式ティッカー データです。排他性は相应ありません。
より機密性の高い进行では、データ変更のオブザーバーは、データベースを选择する惟一のプロセスであると感じる重要性があります。これは、「分離」と呼ばれるコンピューター サイエンスの定义です。それは、ACID (共价键性、一貫性、分離、耐久度性) の「私」です。
端庄的な例は、ある銀行口座からお金が引き落とされ、別の銀行口座に追加される銀行送金です。正確にその順序で行われます。観察プロセスには、敌我矛盾や驚きにつながる也许 性のある変更を行う他のプロセスを避免するための排他性が有必要です。
驚きには、0 ドルを下回った口座からの送金を誤って許可することが含まれます。
分離は、1吨水に 1 つのプロセスだけが変更できることを保証し、2 つのプロセスが同じデータを求めて競合している場合、そのうちの 1 つは他のプロセスが弄完するまで待機する用得着があります。
あなたの怠惰を受け入れる 開発者は、信頼できるシステムを在短时间に用到する必须があります。 ACID トランザクションは、ほぼ 50 年間、データベース システム内の信頼のゴールド スタンダードでした。開発者は要件に基づいてトレードオフを検討し、ACID トランザクションをサポートしていないシステムで作業するようになることがあります。
NoSQL システムのトレードオフ バイアスは、歴史的に、トランザクションを犠牲にしてスケールと稼働時間に傾く傾向がありました。
Cassandra に ACID トランザクションを導入することは、トレードオフを減らすことにありました。 Cassandra は、最悪のシナリオでもアップタイムを維持しながら線形スケーリングを行うことで、すでに確固たる評判を得ています。 Cassandra は、インターネットが提拱できるものに対応できるデータベースが有用不着な場合に選択されてきました。或许のことながら、トランザクションの有用不着性は、開発者にとってトレードオフの対立の缘故となっています。
コンセンサスを得ることができますか? 扩散システムでは、大規模なクラスター内の各メンバー ノードが独力して動作するか、他のノードと連携する这个必要性があります。 「ねえ、私たち全員が何かに许可する这个必要性がある」トランザクションでは、コンピューター科学实验者はこれをコンセンサスと呼び、これらのプロトコルの開発は継続的な调节領域です.
「軽量トランザクション」のために 2013 年に Cassandra によって採用された、確立されたコンセンサス プロトコルです。
単一のパーティション データ変更がトランザクション内で分離されることが保証されるため、軽量ですが、複数のテーブルまたはパーティションはオプションではありません。さらに、Paxos はコンセンサスを得るために複数回のラウンド トリップを必需とするため、アプリケーションで軽量トランザクションをいつ动用するかについて、多くの余分な待ち時間と詳細情報が作为されます。
Paxos に代わる次大家族としてプロトコルが開発され、Etcd、CockroachDB、DynamoDB などのいくつかのシステムがそれを採用しました。選出されたリーダーを作为することで、往復を減らしました。
このアプローチにおける Cassandra の欠点は、リーダーが複数のデータ センターにまたがらないことです。そのため、複数のリーダーが必须になります ( 图案填充)。
選出されたリーダーを持つことは、Cassandra の「何も共设しない」という原則にも違反し、障害の処理に関する新しい要件を重ねることになります。
ノードがダウンした場合、新しいリーダーを選出する这个必要があります。
他のデータベース (FaunaDB や FoundationDB など) は、 で説明されているように、単一のグローバル リーダーに縮小することでマルチリーダーの問題を解決しようとする道をたどりました。
これらは要件が異なる他のデータベース用に構築されたため、これらのケースで动用されたアプローチは、Cassandra が障害モードで希望する基準を満たしていませんでした。
Cassandra は、大規模な疏散システムの実行の有一部电影として障害を想定しています。 1 つ上面のノードがオフラインになることで、パフォーマンスが光速に欠缺したり、可性の問題が発生したりすることはありません。別のアプローチが重要性でした。
我々は合意に達したか? Cassandra プロジェクトに何が受け入れられるかについて、相对に意見が分かれる場合があります。私たちの基準は、离心分离システムがどのように実行されるべきかについての核となる理想信念に忠実であることです。 1 つまたは複数のデータセンターで複数のノードを運用している間は、パフォーマンスとスケーリングを常に維持する必要性があります。私たちは相对に请求が厳しい場合がありますが、これが相对に多くの組織が Cassandra を選択する情形です。
コンセンサス プロトコルの很久以前の繰り返しは、問題のさまざまな环节を解決しましたが、それぞれが Cassandra の値の一步に違反するトレードオフを警告しました。次の大きな提升口は、前回の論文から 2 論文離れたところにあると言われています。この場合、論文はであり、トレードオフを避免するために大きなスワイプが必要的でした.
Accord は、原先のコンセンサス プロトコルでは解決されなかった 2 つの問題に対処します。最早の新しいメカニズムはリオーダー バッファです。
コモディティ ハードウェアが用されていると仮定すると、ノード間のクロックの違いは避けられません。リオーダー バッファーは、ノード間の遅延に加えて、ノード間の違いを測定します。各レプリカはこの情報を用して、各ノードからのデータを正しく並べ替え、違いを説明し、タイムスタンプ プロトコルで 1 つのラウンドトリップ コンセンサスを保証します。
もう 1 つのメカニズムは高度パスの有権者です。障害モードでは、再開する前に新しいリーダーを選択するときに遅延が発生する会性があります。高度パスの有権者は、Cassandra の既存の機能といくつかの新しい実装を用到して、Cassandra が許容するのと同じレベルの障害でクォーラムへのリーダーレス高度パスを維持します。詳細については、 を基准してください。
それはどのように機能しますか? 最主要の影響は開発者の生産性にあるため、実際にどのようになるか見てみましょう。所诉の次の銀行口座振替の例を考えてみましょう。
1 つ目は、Cassandra クエリ言語 (CQL) で見られる新しい構文です。トランザクションは、 BEGIN TRANSACTION
およびCOMMIT TRANSACTION
宣言に含まれています。トランザクション マーカー内のすべての処理は、他のプロセスから分離されてアトミックに行われます。この例では、アリスの口座からボブに $20 を送金します。それ以上に古典的なものはありません!
セクション A では、既存のレコードからデータを選択し、結果をタプル (1 つの変数に格納された複数の項目) に割り当てることができます。 SELECT
句に含まれる列の数に応じて、タプルに 1 つ以上の値を格納できます。これらの値は、データを変更する前に条件をテストするためにセクション B で使用されます。
この場合、ボブに送金する前に、アリスの口座に $20 があるかどうかをテストします。その場合、 UPDATE
Alice の口座残高を 20 ドル減らし、Bob の口座残高を 20 ドル増やします。アリスの資産が 20 ドル未満の場合、変更は行われません。
監視プロセスからわかるように、舞台效果裏では排他的に実行されるデータベース コマンドのシリアル化されたセットがあります。 1 つ大于のデータ センター間で、コンセンサスを得るために必要性なトランザクションは 1 ラウンド トリップだけでした。また、いずれかのノードがオフラインの場合でも、少なくともクォーラムのレプリカが再生利用可能であれば、アクションは引き続き実行されます。
これはまさに Cassandra が好んで行う方式 ですが、グローバルに利用概率なトランザクションでゲームを強化しただけです。
次は何ですか Accord とそれに伴うすべての作業はまだ進行中であり、次の Cassandra リリースに含まれる予定です。これはすべてオープン ソースであるため、待ちきれない人は、Cassandra リポジトリからcep-15-accord
ブランチのコピーを複製して、独自のコピーを作成できます。
残りの皆さんのために、リリース時期が近づくにつれて、使用的およびテストできるビルドを言外之意します。これは Cassandra のゲーム チェンジャーとなるでしょう。私が最も関心を持っているのは、Cassandra に瞩目される网络速度と回復力で実行されるグローバルに回收利用已经なトランザクションでどのようなユース ケースが見つかるかについて、コミュニティから聞くことです。最後のリレーショナル データベース ワークロードを手放す時がついに来ましたか?
また、Apache Software Foundation など、すべてのチャンネルでフィードバックをお待ちしております。オープン ソース プロジェクトの機能は、ユーザーのニーズを満たすために常に進化しています。そのため、未来のを形作る上で、あなたは根本な役割を担っています。
このエキサイティングな新機能が進化するにつれて、より多くのユースケースと情報にご炒鸡期待ください。これについては、3 月 14 日に開催されるデジタル サミットでいくつかの講演が行われることが予想されます。
パトリック・マクファディン、DataStax
Patrick McFadin は、O'Reilly の著書「Managing Cloud Native Data on Kubernetes」の共著者です。彼は現在、DataStax で開発者関係の仕事をしており、Apache Cassandra プロジェクトへの貢献者として働いています。 Patrick は Apache Cassandra のチーフ エバンジェリスト (彼は新しく作成された Cassandra コミッターでもあります!) および DataStax のコンサルタントとして働いており、本番環境で最大のデプロイメントのいくつかを構築するのに素晴らしい時間を過ごしました。