web-dev-qa-db-ja.com

マイクロサービスの依存関係を管理する方法は?

モノリシックアプリケーションをより小さなサービスに徐々に分割する作業を行っており、依存関係の管理方法に関する議論の1つになっています。私たちの課題は、サービスAがBに依存していることです。Aは、リリースNexusリポジトリから依存関係を引き出します。

問題は、Bがビルドされ、ビルドが本番環境で承認されるまで、Aの依存関係がリリース候補のネクサスに含まれることです。これは、Bの新機能がすぐにAで利用できないことを意味します。現在のアプローチが最良のアプローチであるか、またはBをリリースネクサスレポに昇格させる必要があるかを検討しています。自動テストに合格し、Aに影響を与える探索的テストによってBでリスク欠陥が発見された後.

2
Sutty1000

システムのアーキテクチャについてのさらなる知識がなければ、正確な答えを出すことは困難です。ただし、多かれ少なかれサービスBのインターフェースが最初に含まれる成果物を作成してリリースすることをお勧めします。

インターフェイスには、テストが必要なロジックが含まれていてはなりません。また、まだリリースされていないシステムの他のアーティファクトへの依存関係があってはなりません。したがって、インターフェースを変更し、新しいバージョンをリリースするのは簡単なはずです。

インターフェースがリリースされた後、すでにリリースされているバージョンのサービスインターフェースに対して、クライアントの次のバージョンを開発および構築できます。まだサービス実装をリリースする必要はありません。実際には、サービス自体さえも、インターフェースをリリースした後でないと開発できませんでした。サービス自体の間に直接の依存関係はないため、探索的テストなどの後、サービスAとBの昇格は、任意の順序で、または同時に実行できます。

これは、パッケージ化と構成レベルに適用される依存関係の逆転の原則です。サービスAは、サービスBの実装に直接依存していません。どちらもサービスBのインターフェースに依存しています。

3
COME FROM

すべてのマイクロサービスを並べて、全体として機能させることで、モノリシックなアプリレベルのブランチ戦略、リリース、配信アプローチを維持できます。これにより、依存関係の管理、下位互換性の要件、バージョンの組み合わせによって引き起こされる爆発的な数の統合テストが大幅に排除されます。

もちろん、マイクロサービスごとに独立したリリース/配信ストーリーがない限り、モノリスを分割する理由の1つになりました。個人的に私はそれをもっと不利にすることの能力を考えています、また参照してください https://softwareengineering.stackexchange.com/a/341938/187812

1
Dan Cornilescu