私は現在、平均スタックで開発されたマイクロサービスベースのアプリケーションを構築しており、境界のあるコンテキスト間でモデルを共有する必要があるいくつかの状況に遭遇しています。マイクロサービス:限定されたコンテキスト間のモデル共有
例として、私は登録プロセスとログイン(jwt生成)、ログアウトなどを処理するUserサービスを持っています。プロフィール写真やその他の画像のアップロードを処理するFileサービスもありますアップロードする。さらに、メンバー間の関連付けを追跡するFriendsサービスもあります。
現在、ユーザーサービスで使用されているユーザーテーブルのユーザーのGUIDと、最初の、中間の、最後のフィールドをFileテーブルとFriendテーブルに追加しています。こうすることで、クエリが実行されるたびに情報を取得するために休憩をとることなく、他のサービス(フレンドとファイル)でこれらのフィールドが必要なときにいつでもこれらのフィールドを照会できます。ここで
は警告です:
欠点は、私は、私は、ユーザーがユーザーテーブルから自分の情報を更新するたびにファイルや友人のテーブルを通知し、RabbitMQのでセネカを選択しなければならないことのようです。
1)サービスがあまりにも多くなってしまうのではないかと心配すべきですか?
2)更新が1時間以上かかると、パフォーマンス上の問題が発生する可能性がありますか?
3)境界を切り離そうとして、私はこれを取り除く別の方法を見ていません。この問題を解決するにはどのような方法が推奨されていますか?
*サービスが煩雑になるのを心配する必要がありますか? - いいえ、サービスはすべての関連する状態の変更を公開する必要があります。 *更新が1時間以上かかる場合、これはパフォーマンス上の問題につながりますか?* - メッセージキューイングは基本的に大量に対処するように設計されています。 *この問題を解決するために推奨されるアプローチは何ですか?* - 私のお勧めは心配することです。あなたの現在のアプローチは最適です。 –
それでは、FileとFriendsの各レコードのFirst、Middle、Last、user guid(fk)フィールドを保存するか、f、m、l、guidフィールドを格納する別のusersテーブルを作成してくださいフレンドとファイルテーブルにGUIDをコピーするだけです。着信キューメッセージからf、m、lフィールドの更新を行う必要がある場合は、これがより効率的になる可能性がありますか? – user1790300
それでは、FileとFriendsの各レコードのFirst、Middle、Last、user guid(fk)フィールドを保存するか、f、m、l、guidフィールドを格納する別のusersテーブルを作成し、 FriendとFileテーブルにGUIDをコピーするだけです。いくつかのレコードではなく1つのレコードのみを更新するので、f、m、lフィールドの更新を着信キューメッセージから行う必要がある場合は、これがより効率的であるようです。 – user1790300