マイクロサービスのサーガ設計パターン java_Servo_Industry Insights_Kpower
家 > 業界の洞察 >サーボ
テクニカルサポート

製品サポート

マイクロサービスJavaのsaga設計パターン

発行済み 2026-01-19

マイクロサービスが少し「かさばる」と思うときは、この古い友人の Saga を試してみてください

マイクロサービスの構築はビルディングブロックのようなものです。各モジュールが独立して動作するのは素晴らしいことです。しかし、サービス間のトランザクション処理が関与すると、その美しい構図は簡単に粉々に砕け散ってしまいます。注文は作成されたが在庫が差し引かれなかったり、支払いは成功したが物流が開始されなかったりするなど、最悪の事態に遭遇したことがあるかもしれません。

分散トランザクションはなぜ常に頭痛の種を引き起こすのでしょうか?

これを想像してください。オンラインで本を購入し、支払いをクリックすると、システムが成功を促すメッセージを表示します。数日後、「在庫不足のため注文をキャンセルしました」というメールが届きましたが、すでに代金は引き落とされていました。これは架空のシナリオではなく、分散システムにおける典型的なデータの不整合の問題です。従来のデータベース トランザクションは単一のアプリケーションで適切に機能しますが、マイクロサービスに分割すると、各サービスは独自のデータベースを使用するため、ACID トランザクションはネットワーク境界を越えることができません。

そのため、一部の人々は 2 フェーズ コミット (2PC) を試みましたが、パフォーマンスのボトルネックと同期ブロックの問題により、多くのチームが意欲を失いました。特に同時実行性の高いシナリオでは、コーディネーターが単一障害点となり、システム全体の可用性が低下します。それは、指揮者に 10 のオーケストラの演奏を同時に調整するように依頼するようなものです。リズムが少しでもズレると、曲全体がめちゃくちゃになってしまいます。

Saga デザイン パターン: 思考を変えて行動を調整する

Saga の核となるアイデアは非常にシンプルです。長いトランザクションを一連のローカル トランザクションに分割し、各トランザクションが完了した後に次のトランザクションをトリガーします。中間ステップが失敗した場合、以前の影響をロールバックするために一連の補償操作が実行されます。原子性は追求しませんが、最終的な一貫性を保証します。

少し抽象的に聞こえますか?実際の例を考えてみましょう。あなたは複数の都市を巡る講義ツアーを企画しました。従来のアプローチでは、すべての会場が確定するまで旅程を発表するのを待ちますが、これでは宣伝に最適な時期を逃してしまう可能性があります。嵯峨さんの考えでは、まず第1会場を確定し、次に第2会場、そして第3会場を予約するというもの。 特定の市内会場に一時的な問題が発生した場合、予定されていたその後の会場はキャンセルされ、代替案が調整されるという。プロセス全体が完全に同期しているわけではないかもしれませんが、最終的にはツアーが実現します。

Java マイクロサービスで Saga を実装するいくつかの方法

オーケストレーションされた物語は、ストーリーを語るディレクターのようなものです。中央のコーディネーター (通常はオーケストレーターと呼ばれます) があり、各サービスに何をいつ実行するかを指示します。サービスは相互に直接通信せず、コーディネーターとのみ通信します。このアプローチは論理的に一元化されており、理解とデバッグが簡単ですが、コーディネーターがボトルネックになりやすい可能性があります。トランザクション手順が少なく、プロセスが安定しているシナリオに適しています。

協奏曲の物語はジャズの即興演奏に似ています。各サービスがタスクを完了した後、次のサービスに通知するイベントを発行します。中央のコマンドはなく、サービスはイベント駆動型です。このソリューションは優れたスケーラビリティと低いサービス結合を備えていますが、トランザクション フロー全体を追跡するのは手間がかかり、エラー発生時のデバッグはパズルを解くようなものです。

どれを選びますか?チームがイベント駆動型アーキテクチャに優れており、トランザクション ステップが頻繁に変更される場合は、Concerto の方がより柔軟です。プロセスの制御性や可観測性を追求する場合には、オーケストレーションの方が便利かもしれません。絶対的な有利不利はなく、シーンマッチングのみです。

Saga を使用した後、システムがより「厳しく」なったのはなぜですか?

Saga モードを採用した後の最も直感的な変化は、システムのスループットが向上したことです。サービスが同期を待たなくなるため、リソースの使用率が自然に増加します。さらに重要なのは、システムの「回復力」を高めることです。特定のサービスが一時的に利用できなくなっても、トランザクション全体が停止することはなく、補償メカニズムによって修復と再試行の余地が与えられます。

実際のケースがあります。プロモーション期間中、e コマース プラットフォームは過度の注文サービスのプレッシャーにさらされ、その応答が遅くなりました。従来のトランザクション モードでは、支払いサービスと在庫サービスが注文サービスの応答を同時に待機するため、ユーザーの支払いがタイムアウトして失敗します。 Saga の実装に切り替えた後、注文サービスの遅延は独自の補償プロセスにのみ影響します。支払いおよび在庫サービスは引き続き非同期で処理でき、ユーザーの支払い成功率ははるかに高くなります。

便利な Saga の実装はどのようなものでしょうか?

適切に設計された Saga 実装には、通常、補償操作が冪等である (繰り返し実行しても同じ効果がある)、トランザクション ステータスが追跡可能、タイムアウトと再試行メカニズムが合理的であるなど、いくつかの特徴があります。これらは技術的な詳細のように聞こえますが、開発エクスペリエンスに直接影響します。

キロパワーこのような要件に対処する際、多くのチームが補償ロジックの設計で行き詰まっていることがわかりました。たとえば、「在庫の削減」に対する補償は「在庫の復元」ですが、ネットワークのタイムアウトにより補償操作が繰り返される可能性があります。単純に「インベントリ+1」を実行すると、補正が複数あるためデータが混乱してしまいます。したがって、彼らのソリューションでは、補償操作で元のトランザクション ID が処理されたかどうかをチェックして、累積の繰り返しを回避します。

いつサーガの導入を検討すべきですか?

チームが「部分的に成功した」データ クレンジングの処理に多くの時間を費やしている場合、またはサービスがダウンしているためにリンク全体がブロックされている場合は、Saga を検討してください。特に、ビジネスに多段階の非同期処理が含まれる場合 (たとえば、オンライン コースの購入にはコースの選択、支払い、権限の有効化、通知の送信が含まれます)、これらの手順は必然的に Saga 調整に適しています。

実装を開始するときは、小規模で試験的に実施し、最初に変換する非コアではあるが典型的なプロセスを選択することをお勧めします。変換前後のエラー率、トランザクション完了時間、開発およびデバッグのコストの変化を記録します。データから、宣伝する価値があるかどうかがわかります。

考えられる落とし穴と回り道

サーガは特効薬ではない。不適切に設計された補償オペレーションは、返金や繰り返しの控除などの「二次被害」を引き起こす可能性があります。たとえば、「注文の作成」イベントの前に「注文のキャンセル」イベントが到着するなど、順序が乱れたイベントによってステータスが不一致になる可能性があります。これらの問題は、ビジネスと合わせて慎重に設計する必要があります。

実際的な戦略は、各トランザクション ステップにバージョン番号またはタイムスタンプを追加し、ダウンストリーム サービスが処理するときに順序を確認することです。迅速な介入を容易にするために、進行中のトランザクションと異常ステータスをリアルタイムで表示するために、Saga 監視パネルをセットアップすることをお勧めします。結局のところ、自動化がどれほど優れていても、手作業は依然として必要です。

に書かれています

分散システムは、複数の人々が協力して手工芸品を完成させるようなものです。完全な同期は非効率的で、完全な非同期は混乱を招きやすいです。 Saga は、最終製品の完成を確実にしながら、関係者全員が自分のペースで作業できるようにするという中間点を見つけました。完璧ではありませんが、多くのマイクロサービス プロジェクトが「かろうじて実行される」状態から「スムーズなコラボレーション」に至るまでには時間がかかります。

次回、サービス間でのデータの一貫性について問題が発生した場合は、トランザクションを確認してください。おそらく、これらの一見複雑なビジネス フローを別の方法で接続する必要があるだけかもしれません。

2005年に設立され、キロパワーは、中国広東省東莞に本社を置く、コンパクトモーションユニットの専門メーカーです。モジュラードライブテクノロジーのイノベーションを活用し、キロパワー高性能モーター、高精度減速機、マルチプロトコル制御システムを統合し、効率的でカスタマイズされたスマート ドライブ システム ソリューションを提供します。 Kpower は、スマート ホーム システム、自動エレクトロニクス、ロボティクス、精密農業、ドローン、産業オートメーションなどのさまざまな分野をカバーする製品で、世界中の 500 を超える企業クライアントにプロフェッショナルなドライブ システム ソリューションを提供してきました。

更新時間:2026-01-19

未来に力を与える

お客様の製品に適したモーターまたはギアボックスを推奨するには、Kpower の製品スペシャリストにお問い合わせください。

Kpowerにメールする
お問い合わせを送信
WhatsApp メッセージ
+86 0769 8399 3238