マイクロサービスデータベースのシード
モデル(製品、ID、タイトル、価格)を制御するサービスA(CMS)と、与えられたモデルをどのように表示する必要があるかを示す必要があるサービスB(配送)とC(メール)があるとします。イベントソーシングアプローチでこれらのサービス全体で特定のモデル情報を同期するには 商品カタログがめったに変更されない(ただし変更される)と、出荷および電子メールのデータに頻繁にアクセスできる管理者がいるとします(機能例:B:display titles of products the order containedおよびC:)display content of email about shipping that is going to be sent。各サービスには独自のDBがあります。 解決策1 イベント内の製品に関する必要なすべての情報を送信します-これは以下の構造を意味しますorder_placed: { order_id: [guid], product: { id: [guid], title: 'Foo', price: 1000 } } サービスBおよびCでは、製品情報はテーブルのproductJSON属性に格納されordersます そのため、必要な情報を表示するために、イベントから取得されたデータのみが使用されます 問題:BとCで提示する必要のある他の情報によっては、イベントのデータ量が増える可能性があります。BとCはProductについて同じ情報を必要としない場合がありますが、イベントには両方を含める必要があります(イベントを2つに分割しない限り)。特定のデータが特定のイベント内に存在しない場合、コードはそれを使用できません- 特定の製品に色オプションを追加すると、BおよびCの既存の注文に対して、イベントを更新して再実行しない限り、特定の製品は無色になります。 。 解決策2 イベント内の製品のガイドのみを送信-これは以下の構造を意味しますorder_placed: { order_id: [guid], product_id: [guid] } サービスBおよびCでは、製品情報はテーブルのproduct_id属性に格納されますorders 製品情報は、A/product/[guid]エンドポイントへのAPI呼び出しを実行することにより、必要に応じてサービスBおよびCによって取得されます 問題:これにより、BとCが(常に)Aに依存します。製品のスキーマがAで変更された場合、それらに依存するすべてのサービスで(突然)変更を行う必要があります。 …