web-dev-qa-db-ja.com

ドメイン境界外に多数の共同エンティティを持つマイクロサービスを設計するにはどうすればよいですか?

小規模なアプリケーションやマイクロサービスでモノリスアプリケーションを分解する作業をしています。いつものように、ドメインを特定し、それらを小さなアプリケーションとデータベースに分割するのは簡単な場合と難しい場合があります。

私はいくつかのドメインを見つけました(例として2つ紹介します)。これらはすべて、一連のエンティティ(ケアの単位またはいわゆるケアユニット)の使用を共有しています。これらの治療室は、データ統合ツール(SSIS)によって時々更新されます。データベースには100万を超えるケアユニットがあります。以下の例では、さまざまなドメインがこれらのケアユニットにどのように作用するかがわかります。 Simplified application architecture - domains using care units

これらのケアユニットをすべてのドメインに複製することもできますが、同期の問題などを考慮すると、これはかなり複雑になると思います。現時点では、SQL Serverで単純なjoinクエリを使用して、これらのドメイン間の集計を実行できます。大量のデータを複製せずに私が望むものを達成する他の方法はありますか?そうでない場合、ドメイン間でテーブルを同期するための推奨される方法は何ですか?

このアプリケーションは、SQL Serverをデータベースとして使用してc#.netで記述されています。したがって、これらのテクノロジーを使用した回答が推奨されますが、必須ではありません。

9
annemartijn

マイクロサービスのポイントは、大規模なソフトウェアシステムの一部を独立して開発および運用できるようにすることです。このプロジェクトのyour目標は何ですか、これを行う理由は何ですか?

マイクロサービスは、notdataモデルのサブツリーです。それは全体のクローズドで機能が完全な部分であり、一般的なデータはもちろんのこと、他のシステムへの要求/応答依存性は(理想的には)ありません。繰り返しになりますが、これはランダムなルールではありません。サービスを個別に進化させて操作できるようにする必要があります。これにより、そのようなシステムを維持できるようになります。

したがって、適切な分離を実現するために、潜在的な境界に関する質問を次に示します。

  1. この分離は私のプロジェクト目標に役立ちますか?例:これにより、この部分をより適切にスケーリングできますか?このチームがリリースサイクルを加速できるようになりますか?
  2. それは適切に独立システムをもたらしますか?

チートできるツールはいくつかありますが、正気を保つには、慎重に使用する必要があります。これらのツールは次のとおりです。

  • データの同期。これは、独立するためにオフラインである必要があるため、「最終的に」一貫性があります。
  • 必要なデータをリクエストのパラメータとして送信します。これは、ターゲットサービスがそれらを保持する必要がないことを意味します。
  • ハイパーメディア(Web/HTML)を介して統合し、クライアントがフォームとリンクに基づいて呼び出しとデータを調整するようにします。
5

マイクロサービスがデータの他のサービスにアクセスすることは公平です。マイクロサービスアーキテクチャで分散データを処理する方法については、 sagaパターン を調べます。

2
Martin K