ポイント: CAP定理は、分散データベースの限界を説明し、ネットワーク障害時に一貫性、可用性、パーティション耐性の3つのプロパティのうち2つしか同時に達成できないことを述べています。これは、アプリケーションの要件に基づいてデータベースを選択するのに役立ちます。
- CAP定理の構成要素:一貫性、可用性、パーティション耐性。
- 可用性を優先するデータベースにはCassandraやDynamoDBが含まれます。
- 一貫性のあるデータベースは、銀行など正確な情報が必要なアプリケーションに不可欠です。
CAP定理は、分散データストアに関する理論コンピュータサイエンスの信念で、分散データベースにおいてネットワーク障害が発生した場合、一貫性または可用性のいずれかを提供することが可能であるが、両方は提供できないと主張しています。
CAP定理とは何ですか?
CAP定理は、分散データストアに関連する3つの構成要素(その名の由来)で構成されています:
- 一貫性:すべての読み取りが最新の書き込みまたはエラーを受け取ります。
- 可用性:すべての読み取りがデータを含みますが、最新ではない可能性があります。
- パーティション耐性:ネットワーク障害(つまり、パーティションのドロップ、遅いネットワーク接続、またはノード間の利用できないネットワーク接続)にもかかわらず、システムは動作し続けます。
データベースにおけるCAP定理とパーティション耐性
通常の操作では、データストアは3つの機能すべてを提供します。しかし、CAP定理は、分散データベースがネットワーク障害を経験した場合、一貫性または可用性のいずれかを提供できると主張します。これはトレードオフです。他のすべての時点では、3つすべてを提供できます。しかし、ネットワーク障害が発生した場合、選択をしなければなりません。定理では、パーティション耐性が必須です。システムは分散データストアで動作するため、システムは本質的にネットワークパーティションで動作します。ネットワーク障害は発生するので、何らかの信頼できるサービスを提供するためには、パーティション耐性が必要です—CAPのPです。それは、他の2つCとAの間の決定を残します。ネットワーク障害が発生した場合、一貫性または可用性を保証することを選択できます:
CAP定理とACID(原子性、一貫性、分離性、耐久性)の違い
CAPにおける一貫性は、ACIDのそれとは異なります。CAPにおける一貫性は、最新の情報を持つことを意味します。(ACIDは異なるデータベースイベントを指します。ACIDでは、一貫性はデータベースへの新しいトランザクションがデータベースを破損しないことを意味します。)
CAP定理の例:一貫性のあるクエリか可用性のあるクエリか?
問題の瞬間はユーザークエリです。ユーザーがデータベースにクエリを送信し、ネットワーク化されたデータベースが値を返すことを想定します。データベースから返される値は、一貫性または可用性を提供するという選択に依存します。この選択がどのように展開されるかは次の通りです:
- クエリに対して、サーバー上の現在の値をユーザーに返すことで、高可用性サービスを提供できます。これを行うと、値がデータベースに送信された最新の値であることは保証されません。最近の書き込みがどこかで送信中に留まっている可能性があります。
- 高い一貫性を保証したい場合は、新しい書き込みを待つか、クエリにエラーを返す必要があります。したがって、クエリによって返されるデータが一貫していることを保証するために可用性を犠牲にします。
あなたのニーズに最適なCAP定理のシステム設計を決定する
一部の人々にとって、一貫性と可用性の選択は、実際に行われることはほとんどない哲学的な議論の問題です。これらの分散システムの信頼性はかなり良好です。それを踏まえて、問題は発生します。AWS 大規模な障害を経験しました。理論では、3つの構成要素のうち2つのみを持つことができるとされていますが、専門家はそうではないと主張します。CAP定理を最初に提案したコンピュータ科学者のエリック・ブリューワは、定理に関する混乱を解消し、システムのニーズに応じて、厳密な選択肢ではなく、一般化しました。彼は次のように言いました:
「現代のCAPの目標は、特定のアプリケーションに対して意味のある一貫性と可用性の組み合わせを最大化することです。そのようなアプローチは、パーティション中の運用計画とその後の回復計画を組み込むため、設計者がCAPを歴史的に認識された限界を超えて考えるのに役立ちます。」
一貫性と可用性を選択することは、どのデータベースタイプを選ぶかを決定する際に行われます。たとえば、SQLとNoSQL。NoSQLデータベースは、高可用性または高一貫性をサポートするかどうかに基づいて分類できます。
CAP定理のシステム設計とNoSQLデータベース
NoSQLデータベースは、従来のリレーショナルデータベースに対して利点があります。NoSQL JSONデータベースは、スキーマなしで設計することができます。相互に関連するテーブルを強制することなく、非構造化データを含む大規模データセットを処理できます。データはJSONドキュメントに保存され、これは人間が容易に読み理解できる完全なエンティティです。このアプローチは、要件が進化しているアジャイル開発に適しています。NoSQL JSONデータベースの利点には次のものがあります:
- 使いやすさ:多様なデータ型をサポートするためのデータモデリングの柔軟性があります。
- スケーラブルなパフォーマンス:分散アーキテクチャのクラスターにサーバーを追加することで、より多くのデータと高トラフィックを処理できます。
- 強いレジリエンス:NoSQLデータベースは分散クラウド環境で動作するため、単一障害点が少なく、複数のノード間でデータを簡単に複製できます。
- 広範な可用性:NoSQLデータベースは主流であり、ほとんどのクラウドプロバイダーが、管理サービスまたはスタンドアロンオプションとしてそのようなソリューションを提供しています。
NoSQLデータベースの例には次のものがあります:
- Cloud Firestore
- Firebase Real-time DB
- MongoDB
- MarkLogic
- Couchbase
- CloudDB
- Amazon DynamoDB
CAP定理を使用してデータベースの一貫性を優先する
一貫性のあるデータベースは、返される情報の値が正確である必要がある場合に使用すべきです。
金融データは良い例です。ユーザーが銀行機関にログインするとき、データが返されないというエラーや、実際よりも高いまたは低い値を見たくはありません。銀行アプリはユーザーの口座情報の正確な値を返すべきです。この場合、銀行は一貫性のあるデータベースに依存します。 一貫性のあるデータベースの例には次のものがあります:
- 銀行口座の残高
- テキストメッセージ
- 在庫
- 航空券予約システム
- 給与
- 学生記録
- 健康記録
- エネルギー管理システム
CAP定理の一貫性コンポーネントを優先するためのデータベースオプション:
- MongoDB
- Redis
- HBase
CAP定理を使用してデータベースの可用性を優先する
可用性のあるデータベースは、情報よりもサービスが重要な場合に使用すべきです。
高可用性データベースの例は、eコマースビジネスに見られます。オンラインストアは、ショッピングカートの機能を24時間365日利用できるようにしたいと考えています。これにより、買い物客は必要なときに正確に購入できます。CAP定理の可用性コンポーネントを優先するためのデータベースオプション:
- Cassandra
- DynamoDB
- Cosmos DB
CosmosやCassandraのような一部のデータベースオプションでは、どの保証を好むかを選択することができます—一貫性または可用性。
ユーザーエクスペリエンスを最適化するためにCAP定理を適用する
CAP定理の課題は、理想的には3つの目標を同時に達成したいが、2つだけを選択できることです。正しい選択をすることが重要です。一貫性、可用性、そしてバランスを適切に取ることは、アプリケーションとユーザーが何を重視するかに依存します。間違った選択をすると、悪影響を及ぼし、信頼を損なったり、フラストレーションを引き起こす可能性があります。ユーザーが何を容認し、期待しているかを知ることで、最適なバランスを調整するのに役立ちます。
これらの投稿は私自身の見解であり、BMCの立場や戦略、意見を必ずしも代表するものではありません。