マイクロサービス アーキテクチャの創始者である 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ハイブリッドクラウドプラットフォームをサポート
インターネットの普及に伴い、インターネットから情報を入手することに慣れた人がますます増えています。し...
地域ウェブサイトの構築は、中小規模のウェブマスターにとって開発トレンドになっています。これは、中小規...
vpsdimeは設立1周年を迎え、年間わずか7ドルで利用できる非常に優れたVPSです。マイニングなど...
数日前の百度のアルゴリズム更新により、また一群のウェブサイトが消滅しました。また、4月25日には、百...
今日は、Xiaojiao が分散システムのアーキテクチャ ルーチンについてお話します。ルーチンについ...
昨日はそのうちのいくつかについて簡単にお話ししましたが、今日は残りの側面についてお話しします。 9....
pnzhostは2009年に設立された新しいホスティング会社です。主にVPSと専用サーバー事業を運営...
毎年、気取った言葉はありますが、今年は特に多いですね。昨年の今頃、私は思いつきで「2013年中国のイ...
昨年、Michael I. Jordan 研究室は「CoCoA: 通信効率の高い分散最適化のための一...
ウェブサイトのプロモーションは今日のインターネットのハイライトですが、多くの人々はまだウェブサイトの...
Baidu の最近の大規模なアップデートは、数え切れないほどの医療サイトに影響を与えています。グルー...
アリペイの取引額は350億元で、ダイヤモンドは1個あたり2050万元、寝具は1個あたり300万元、資...
月給5,000~50,000のこれらのプロジェクトはあなたの将来です多くの企業では、すでに公式サイト...
都市住民にとって、さまざまな口コミサイトは徐々に人々の衣食住や交通を導く「道標」となってきた。消費者...
システム開発のプロセスでは、アーキテクトのビジョンが重要です。プログラマーであれば機能を実装するだけ...