2017-02-25 4 views
1

node.jsプロジェクトをマイクロサービスアプローチに移行し始めており、データの共有方法がわかりません。ここでは一例であり、私は以下の有界コンテキストがあるとします。 マイクロサービス:限定されたコンテキスト間でデータが必要な場合のシナリオの処理方法

  • 画像(ユーザーアカウント、アクセス権、ログイン/ログアウト、プロフィールなどを管理するために使用される)

    • アカウントを(のようなアップロードファイルを管理するために使用されますこの例では指定されたアカウントに関連付けられたプロファイルの写真、画像ギャラリーなど)
    • 所与のユーザに関連する様々なフォーマットにビデオのアップロードとトランスコードを管理するためのビデオ()

    、画像及びビデオが見えます縛られた口座に自然に依存すること内線またはマイクロサービス。私は、アカウントテーブルを画像データベースとビデオデータベースにコピーし、必要なアカウントデータのみを保存することができますが、アカウント情報が頻繁に更新されるため、一貫性の維持という面では悪夢のようです他のマイクロサービスにはこの同じ依存関係が必要です。私は3つのマイクロサービスをすべて同じデータベースを使用することができますが、それはそれぞれのマイクロサービスがそれ自身のデータベースに結びついているという勧告に違反します。

    このシナリオを処理するために推奨されるアプローチは何ですか?私はまだ計画段階にあり、私はこれを正しい方法で確実にしたいと思っています。私はアカウントとして など、これは一貫性を維持するという点で悪夢のように思える私は画像と ビデオデータベースへの上のアカウントテーブルをコピーしてのみ必要とされているアカウントのデータを格納できることを前提としたが

  • +0

    * ...画像と動画はアカウントに自然な依存関係があるようです。* - これはあなたにとっては明白なようですが、なぜこれが当てはまるのかはわかりません。この依存関係の性質は何ですか? –

    +0

    これらは両方とも最終的にそれらを作成したユーザーに属します。したがって、それらを作成したユーザーに外部キーを割り当てる必要があります。 – user1790300

    答えて

    1

    アカウントデータをビデオ/画像サービスにコピーする必要はありません。ビデオ/写真を保存するときは、accountIDを付けてください。

    あなたがデータを取得するためにさまざまなオプションを持っている、あなたはたとえば、ユーザーを取得する必要があり、それはイメージです:

    あなたがAPIゲートウェイで作業する場合、あなたはサービスにそれから2つの非同期並列コールを作ることができます両方のデータをDTOで結合して返します。

    ユーザーの特定のデータが最初に必要なのでできない場合は、アカウントサービスに電話をかけるだけです。アカウントサービスに電話をかけ、画像サービスを呼び出してデータを取得し、全体を送信しますパッケージバック。

    可能かどうかはあなた次第です。

    ロングストーリーは、各ビデオ/画像エンティティにアカウントIDを保存するだけです。

    1

    他の microservicesこの同じ依存

    が必要な場合の情報は、私はそれは確かにやり過ぎだと思う言及しないように、頻繁に更新されます。実際、この依存の程度は、自分たちのエンティティを関連付けるべきアカウントを知る必要があるビデオサービスと画像サービスの両方に依存するように見えます。どちらの場合も、これはエンティティに対してアカウントIDを格納するだけで実現できます。

    これにより、アカウントIDが変更されるまでの一貫性の懸念が軽減されます。これは、アカウントを不変にすることで軽減できます。つまり、いったんアカウントが作成されると、アカウントを削除することはできません。そうすれば、ビデオや画像をもはや存在しないアカウントに関連付けることは不可能です。

    関連する問題