分散システムでは、強力な一貫性を実現するのは簡単ではありません。 2PC ステージと 3PC ステージがコミットされたとしても、絶対的な強力な一貫性は保証されません。 また、不整合の可能性が極めて低いために、システム全体のパフォーマンスが低下したり、スケーラビリティが影響を受けたり、アーキテクチャが極端に複雑になったりすることも許されません。したがって、2PC/3PC 送信の大規模なアプリケーションがない場合、結果整合性はより優れたソリューションであり、業界で広く使用されています。 1. 再試行メカニズム下の図に示すように、サービス コンシューマーはサービス A とサービス B を同時に呼び出します。サービス A が正常に呼び出されると、サービス B が認識されます。最終的な一貫性を確保するための最も簡単な方法は再試行することです。 再試行するときは、リソース枯渇につながる長時間の待機やフリーズを回避するために、サービス コンシューマーのタイムアウトを必ず設定してください。 コンシューマーが再試行する場合、次の点に注意する必要があります。
具体的な実装の詳細については、「Spring-tryer に基づくエレガントな再試行ソリューション」を参照してください。 2. ローカルログログをローカルに記録し、分散監視システムまたはその他のバックエンド システムに収集することで、定期的な検査ツールを開始します。実際の状況に応じて、手動処理を選択できます。 ログ形式: TranID-AB-Detail
以下に示すように、識別ログの設計図を集めます。 3. 信頼性の高いメッセージモード実際のビジネスシナリオでは失敗する確率が比較的低いことを考慮すると、次のような解決策が考えられます。 サービス コンシューマーはサービス B の呼び出しに失敗し、最初に再試行します。再試行が一定回数失敗した場合、メッセージは直接メッセージ キューに送信され、非同期処理に変換されます。 非同期処理には、Kafka、RocketMQ、その他のオープンソース分散メッセージング システムなどの強力な分散機能を備えた MQ を使用できます。
このソリューションには、メッセージが失われるリスクもあります。つまり、メッセージが送信される前にサービス コンシューマーがクラッシュするリスクがありますが、これは発生確率の低いイベントです。 次の図に示すように、別の解決策として信頼性の高いメッセージング モードがあります。サービス コンシューマーは、RocketMQ、Kafka などのメッセージ キュー ブローカーにメッセージを送信します。メッセージは、サービス A とサービス B によって消費されます。 MQ は分散 MQ を使用でき、永続化できるため、メッセージが失われないことを保証でき、MQ は信頼できるものと見なされます。 信頼性の高いメッセージング モードの利点:
問題点:
上記の矛盾した時間ウィンドウの問題は、さらに最適化することができます。
注文サービス(コアサービス)を直接呼び出して、ビジネス注文データを DB に保存します。同時に、MQ にメッセージを送信します。 サービス コンシューマー (注文の作成) が MQ にメッセージを送信する前に失敗する可能性があることを考慮すると、分散トランザクションの処理は面倒でパフォーマンスに影響するため、注文サービスの呼び出しとメッセージの送信は 1 つのトランザクションで実行する必要があります。 したがって、注文テーブルと同じデータベースにイベント テーブルという別のテーブルが作成されます。トランザクション保護を追加して、分散トランザクションを単一のデータベース トランザクションに変換できます。 全体のプロセスは次のとおりです。 (1)注文を作成する - ビジネス注文データを永続化し、イベントテーブルにイベントレコードを挿入します。一貫性を確保するために、これは 1 つのトランザクションで実行されることに注意してください。失敗した場合は、ビジネス サービスのロールバックを心配する必要はありません。成功した場合は、ビジネス サービスは継続されます。 (2)メッセージの送信 - 注文メッセージをメッセージキューに送信します。
(3)メッセージの消費 - 他の従属ビジネスサービスはMQ内の注文メッセージを消費し、独自のビジネスロジックを処理できます。 上記の設計では、注目すべき点が 3 つあります。 (1)注文サービス(コアビジネス)を直接呼び出すことで、ビジネス注文データができるだけ早く配信され、時間枠の不一致の問題を回避し、読み取り後の書き込みの一貫性が確保されます。 (2)注文業務は、メッセージをMQに直接送信することでリアルタイム性を高めます。補償サービスは異常事態の場合にのみ利用されます。リアルタイム要件が高くない場合は、メッセージを直接送信するロジックを削除することも検討できます。 (3)追加のイベントテーブルを導入する目的は、分散トランザクションを単一のデータベーストランザクションに変換することであり、これによっても、ある程度、データベースへの負荷が増加します。 |
<<: 急成長を遂げているクラウドコンピューティング業界において、上流産業が最も繁栄しているのはなぜでしょうか?
元の URL: http://www.clickz.com/showPage.html?page=3...
バックアップおよびリカバリ システムの攻撃ポイントを保護する従来のランサムウェア ソリューションは、...
今朝8時ごろから、Baidu Cloudにアクセス障害が発生し、ファイルリストが表示できず、ファイル...
2022年グローバルエッジコンピューティング市場レポートの最新統計によると、エッジコンピューティング...
この記事では、Qingguajunが2019年1月から9月までの中国モバイルインターネット業界分析レ...
まず、顧客よりもユーザーが重要です初期のビジネスエリートの中には、ビジネスがお金に近ければ近いほど、...
3月25日、南京市ビッグデータ管理局の翟盛強副局長と曹海斌副局長は、無錫市ビッグデータ管理局の関係幹...
Baidu 検索エンジンでのウェブサイトのランキングは、間違いなくすべての中国 SEO 担当者にとっ...
大規模なQQデータ漏洩により、パスワードや友達サークルなどの個人情報を閲覧できる可能性があると報告さ...
国内のホットマネーが株式投資分野にどんどん参入し、起業家や投資家が衝動的になっているため、両者が一目...
近年、企業がローカルに展開されたデータをクラウドに移行する傾向が高まっています。しかし、企業はクラウ...
基本的なヒント: よく使用される参考資料とツールをリストするか、簡単な説明をいくつか追加します。この...
テンセントは8月12日、2020年第2四半期および上半期の業績報告書を発表した。テンセントの2020...
greencloudvps (Green Cloud または Green Cloud vps と呼ん...
1. Qvodは罰金通知書にその場で署名することを拒否し、2億6000万元の罰金は最終的な罰金ではな...