マイクロサービス アーキテクチャの創始者である Martin Fowler のアドバイスによると、マイクロサービス アーキテクチャでは分散トランザクションは可能な限り避けるべきです。しかし、一部の領域では、敵対的な敵のように、分散トランザクションは避けられません。 エンジニアリング分野では、分散トランザクションに関する議論は主に、強い一貫性と結果的一貫性のソリューションに焦点が当てられています。 一般的なソリューションは次のとおりです。
一貫性理論 分散トランザクションの目的は、サブデータベース データの一貫性を確保することですが、データベース間のトランザクションでは、個々のノードの壊滅的な障害など、さまざまな制御不能な問題が発生する可能性があります。単一マシンのトランザクションと同じ ACID を期待することは不可能です。 さらに、業界で有名な CAP 理論によれば、分散システムでは、データの一貫性、システムの可用性、およびパーティション耐性を規模に応じて同時に考慮する必要があるとも言われています。 2 フェーズ コミット プロトコル (2PC) は、分散トランザクションを実装するための従来のソリューションですが、2PC はスケーラビリティが低く、分散アーキテクチャで使用するにはコストがかかります。 eBay の設計者 Dan Pritchett は、大規模分散システムにおけるデータ一貫性の問題を解決するために BASE 理論を提案しました。 BASE 理論によれば、システムの強い一貫性を常に放棄することで、システムのスケーラビリティを獲得できるとされています。 01.CAP理論 分散システムでは、一貫性、可用性、パーティション耐性の 3 つの要素のうち、2 つだけを同時に満たすことができますが、両方を満たすことはできません。その中で、パーティション耐性は不可欠です。
たとえば、Cassandra、Dynamo などでは、デフォルトでは C よりも AP が優先されます。 HBase、MongoDB などでは、デフォルトでは A よりも CP が優先されます。 02.BASE理論 中心的なアイデア:
一貫性モデル データ一貫性モデルは、次の 3 つのカテゴリに分類できます。
分散システム データの強い一貫性、弱い一貫性、および最終的な一貫性は、Quorum NRW アルゴリズムを通じて分析できます。 分散トランザクションソリューション 01.2PCソリューション——強力な一貫性 2PC の基本原則は、段階的に送信してログを保持することにより、トランザクション送信の段階的なステータスを記録することです。コンポーネントがクラッシュして再起動すると、トランザクション送信のステージ ステータスをログを通じて復元し、この状態ノードで再試行できます。 たとえば、コーディネーターを再起動した後、ログを使用して、送信が「準備」状態か「すべて準備」状態のどちらであるかを判断できます。前者の場合、一部のノードが正常に準備されていないか、すべてのノードが正常に準備されているがまだコミットを発行していないことを意味します。状態が復元された後、すべてのノードに対してRollBackが発行されます。 「すべて準備」状態の場合、コミットをすべてのノードに送信する必要があり、データベース ノードはコミットの冪等性を確保する必要があります。 2PC ソリューションには 3 つの問題があります。
アップグレードされた 3PC ソリューションは、主に次の 2 つの改善によりこれらの問題を解決することを目指しています。
ただし、3 フェーズ コミットにもいくつかの欠陥があります。プロトコル レベルからデータの不整合を完全に回避するには、Paxos または Raft アルゴリズムを使用できます。 02.eBay イベント キュー ソリューション - 最終的な一貫性 eBay のアーキテクトである Dan Pritchett 氏は、BASE 原理を説明する論文「Base: An Acid Alternative」の中で、eBay の分散システムの一貫性の問題に対する解決策について言及しました。 その中心的なアイデアは、メッセージまたはログを介して分散処理を必要とするタスクを非同期的に実行することです。メッセージまたはログは、ローカル ファイル、データベース、またはメッセージ キューに保存され、ビジネス ルールに基づいて失敗した場合に再試行されます。各サービスのインターフェースがべき等性を持つことが要求されます。 説明されているシナリオでは、ユーザー テーブル user とトランザクション テーブル transaction があります。ユーザー テーブルには、ユーザー情報、合計売上、合計購入金額が格納されます。取引テーブルには、各取引のシリアル番号、購入者情報、販売者情報、取引金額が格納されます。トランザクションが生成された場合は、トランザクション テーブルにレコードを追加し、ユーザー テーブルの金額を変更する必要があります。 この論文で提案されている解決策は、トランザクション テーブル レコードの更新とユーザー テーブル更新メッセージをローカル トランザクションで完了することです。ユーザー テーブル更新メッセージの繰り返し消費の問題を回避するために、完了したトランザクションに関連する情報を記録する操作レコード テーブル updates_applied が追加されます。 このソリューションの中核は、第 2 フェーズの再試行とべき等実行にあります。失敗後の再試行は補償メカニズムであり、システムの最終的な一貫性を確保するための重要なプロセスです。 03. TCC (Try-Confirm-Cancel) 補償モード - 最終的な一貫性 図に示すビジネス モデルは、サービス A、サービス B、サービス C、サービス D で構成されるマイクロサービス アーキテクチャ システムです。サービス A は、操作を完了するために、サービス B、サービス C、サービス D を順番に呼び出す必要があります。 サービス A がサービス D の呼び出しに失敗した場合、システム全体のデータの一貫性を確保するために、サービス B と C の呼び出し操作をロールバックし、逆の復帰操作を実行する必要があります。ロールバックが成功すると、マイクロサービス システム全体のデータが整合されます。 これを実現するための 3 つの重要な要素:
実装における 2 つの困難:
04. キャッシュされたデータの結果的一貫性 私たちのビジネス システムでは、通常、I/O 操作がデータベースに直接影響しないように、キャッシュ (Redis または Memcached) がデータ読み取り用のバッファとしてデータベースの前で使用されます。 商品詳細ページを例にとると、販売者が商品情報を変更してデータベースに書き戻すと、ユーザーが商品詳細ページで見る情報はキャッシュから取得した古いデータのままとなり、キャッシュ システムとデータベース システムの間でデータの不整合が発生します。 このシナリオでキャッシュとデータベース データの不一致の問題を解決するには、次の 2 つのソリューションがあります。
選択の提案 データの一貫性の問題に直面した場合、まずビジネス ニーズの観点から 3 つの一貫性モデルの受け入れを決定し、次に特定のシナリオに基づいてソリューションを決定する必要があります。 アプリケーションの観点から見ると、分散トランザクションの実際のシナリオは避けられないことがよくあります。他のソリューションが利用可能になるまでは、2PC も良い選択肢です。 ショッピングや送金などの電子商取引や金融サービスの場合、ミドルウェア層の 2PC の最大の問題は、不可抗力や予期せぬ状況が発生すると、ビジネスが見えなくなり、一貫性が失われることです。 データノードが突然クラッシュした場合、ビジネスでは 2PC ログに基づいて補償することが困難になります。金融のシナリオでは、データの一貫性が生命線であり、企業はデータを完全に制御する必要があります。 TCC などの分散トランザクション モデル、またはメッセージ キューに基づく柔軟なトランザクション フレームワークを使用することをお勧めします。どちらのソリューションもビジネス層で実装されます。ビジネス開発者は十分な制御権を持ち、SOA フレームワークと組み合わせて、Dubbo、Spring Cloud などのアーキテクチャを構築できます。 |
<<: PaaSとは何ですか?プログラマーがクラウド上でソフトウェアを開発する方法
>>: フォーティネットがVMware Cloud on AWSハイブリッドクラウドプラットフォームをサポート
マイハオドットコムの洪妙龍最高経営責任者(CEO)は6日、約1カ月の交渉を経て、米投資機関から500...
今週はキーワードの問題に焦点を当てます。突然、私はこのような重要な問題がこれまで議論されたことがない...
2月6日の国際報道:EU当局はGoogleに対し、新しいプライバシーポリシーの影響を分析する前にその...
virmach は、クリスマス、ボックス デー、新年などの休暇中に再び暖かさをもたらします。いくつか...
現在、新たな科学技術革命と産業変革が深まり、デジタル経済が活況を呈しており、コンピューティングパワー...
FinOps は重要な機能へと進化しています。企業では、専任の FinOps 担当者を採用するケース...
weloveservers は、ほぼ 1 年前からある新しい VPS プロバイダーです。最も有名なの...
Licloud は新しいプロモーションを開始しました。新しい香港 VPS (e5-2680v4+NV...
Green Radish 1.0 ではリンク取引が取り締まりの対象となり、現在はソフト記事リンクを取...
crowncloudは2017年3月にホストキャットに登場しました。同社は2017年に設立され、主に...
サブタイトル: 草の根ウェブマスターが起業家的なウェブマスターに変身するには、独立した思考が不可欠な...
2011年12月21日朝、ハッカーが中国最大の開発者コミュニティであるCSDNのユーザーデータベース...
クラウド コンピューティングの時代において、マネージド サービス プロバイダーが重要な位置を占めてい...
2020年は特別な年になる運命にあります。それはもやの中で始まり、驚きの中で終わり、将来をさらに混乱...
「クラウド コンピューティング」という言葉は、皆さんもよくご存知だと思います。情報技術の発展の主流の...