web-dev-qa-db-ja.com

マイクロサービスアーキテクチャのDB設計

ウェブサイトの実装にマイクロサービスアーキテクチャを使用する予定です。サービス間でデータベースを共有するのが正しいかどうか、またはサービスごとに個別のデータベースを使用することが望ましいかどうかを知りたかったのです。この点で、すべてのサービスに共通のデータベースを1つ持つことを検討できますか、それともMicroserviceアーキテクチャの本質に違反しますか?

15
user2288991

マイクロサービスは、分離を提供します。 アプリケーションを分解する独立したドメインに分割する必要があります。各ドメインはDBを持つことができます。他のMSが他のマイクロサービスが所有するデータにアクセスする必要がある場合、ネットワークを介して通信する必要があります。

依存するサービスが多すぎてネットワーク呼び出しが多すぎると感じた場合は、ドメインを定義して、依存するサービスを一緒にクラスター化できます。

たとえば、ある会社のマネージャーがテストを投稿し、彼が自分の部署の全従業員の結果を表示できるオンラインのテスト評価サービスがあるとします。

このシナリオのマイクロサービスは次のとおりです。

初期設計

  1. ユーザーサービス:ログインおよびユーザー情報用。
  2. テストサービス:テストを評価するサービス。
  3. 従業員:従業員の詳細を処理します
  4. 会社:組織CRUDを処理します
  5. 部門:部門CRUDを処理します

分解すると、従業員、組織、および部門のサービスは互いに密接に依存しているため、ネットワーク/ API呼び出しが多すぎるように思われます。したがって、それらをクラスター化することをお勧めします。

更新されたデザイン

  1. ユーザーサービス:ログインおよびユーザー情報。
  2. テストサービス:テストを評価するサービス
  3. 組織:会社、従業員、および部門に関連する操作を処理します。

各サービスは独自のDBを持つことができ、独立してデプロイ可能です。ユーザーとテストサービスはmongoDBを使用できます。または、NoSql DBと組織サービスはRDBMSを使用できます。

お役に立てれば。

31
Nitish Bhardwaj

同じデータベースを共有する場合、マイクロサービスの2つの最も重要な利点を失います: 強力な結合と疎結合(25ページ)

テーブルを共有しない場合、同じデータベースを共有できます。たとえば、microservice1table1_1table_1_2を使用し、microservice2table2_1table2_2を使用します。使用と言うときは、読み取りと書き込みを意味します。一方のマイクロサービスは、他方のテーブルで読み取りも書き込みもしません。

15