2017-01-03 5 views
4

私はマイクロサービスアーキテクチャを持つウェブサイトを開発しており、各サービスはデータベースを所有しています。データベースは、マイクロサービスが必要とするデータを格納する。データベースをマイクロサービス(および新しいもの)と同期させるにはどうすればよいですか?


PostVideoサービスは、ユーザー情報が必要なので、サービスの両方がNEW_USER_EVENTに加入。

NEW_USER_EVENTは、新しいユーザーが登録されたときにトリガーされます。

enter image description here

サービスがNEW_USER_EVENTを受信すると、彼らは自分のデータベースのそれぞれに入ってくるユーザー情報を入れます。だから彼らはUserサービスを頼むことなく何かをすることができます。

enter image description here

これまでのところは良いです。しかし、ここに質問が来る:

  • 私は新しいサービスを作るつもりですか?登録されたユーザー情報を取得して新しいサービスに入れるにはどうすればよいですか?

多分私は既存のサービスから情報を得ることができます。しかし、イベントはメッセージングキュー(NSQ)によってプッシュされます。

マイクロサービスの1つからデータをコピーする場合、どのサービスに最新のユーザー情報があるかを確認するにはどうすればよいですか?

enter image description here


続きを読む(は、いくつかのサービスは、最新のイベントを受けていないので):

The Hardest Part About Microservices: Your Data

Intro to Microservices, Part 4: Dependencies and Data Sharing

+0

「投稿」と「動画」などのサービスで、ユーザー作成について知る必要があるのはなぜですか?これらのサービスが聞こえなかったユーザーに関連してリクエストが到着した場合、ユーザーは存在することを検証する必要はありません。ユーザーは実際に存在しなければならないと単純に仮定することができます。ユーザー。 –

+0

@Michaelサービスは 'username'を受け取り、' User'サービスに疎結合を要求せずに 'user_id'に変換します。新しいユーザが登録されると、サービスはそれぞれのデータベースに 'username-userId'マップを保存して、自分のサービスでそれを変換することができます。 –

+0

私はこの問題がJWTを使って解決できることを知っていますが、私はまだユーザーが変換する必要があるだけでなく、同様のことがあります。 –

答えて

3

新しいサービスを作成する場合はどうすればよいですか?登録されたユーザー情報を取得して新しいサービスに入れるにはどうすればよいですか?

この新しいサービスが購読されているすべてのイベントを最初から再生する必要があります(アプリケーション内で発生したすべてのイベントを保持する「イベントストア」が必要です)。また、最近のものから開始して時間を遡ってイベントを再生するときに、よりスマートなロジックを置くこともできます。このようにして、まず貴重なデータを復元することができます。相互依存のイベントを正しく処理するように注意してください。

データソース:イベントはメッセージングキュー(NSQ)によってプッシュされます。マイクロサービスの1つからデータをコピーする場合、コピー元に最新のユーザー情報があることを確認するにはどうすればよいですか?

あなたはではありません。バックアップをやっていることを話していますよね?

バックアップとは別に、イベント駆動型システムでは、通常、古典的な方法でデータを行ごとにコピーしません。代わりに、イベント・ストアのイベントを最初から再生し、そのイベントを新しいサービス(または新しいインスタンス)のイベント・ハンドラーに供給するだけです。その結果、新しいサービスは最終的にシステムの他の部分と一貫しています。

+0

私は、マイクロソフトのアーキテクチャに結びついているわけではないイベントソーシングについて話していますか? –

+0

あなたは正しいと、YamiはNEW_USER_EVENTを使ってサービス間のデータを同期させていることを指摘しました。これはイベントソーシング技術の使用を意味しています。 – IlliakaillI

+0

私は最後の質問を記述するのに間違った方法を使用したかもしれませんが、あなたの答えはまだ私にいくつか余分なものを理解するのに役立ちます。私は話していた:おそらく私は、既存のサービスから登録されたユーザー情報を取得することができますが、私はユーザー情報を同期するために 'メッセージングキュー 'を使用しているので、私はどのサービスが最新のユーザー情報を持っているかを確認することができません(* 'NEW_USER_EVENT'イベントはまだ受信していません)。 –

関連する問題