2017-04-15 3 views
1

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

答えて

5

同じデータベースを共有すると、マイクロサービスの最も重要な利点の2つ、つまりstrong cohesion and loose coupling (page 25)が失われます。

テーブルを共有していない場合は、同じデータベースを共有できます。たとえば、microservice1table1_1table_1_2microservice2table2_1table2_2を使用します。私が使用すると言うとき、私は読み書きを意味します。 1つのマイクロサービスは、他のテーブルには読み込みも書き込みもしません。

+0

お返事ありがとうございます。しかし、私のアプリケーションでは、サービスの1つが他のいくつかのサービスからのデータを利用するケースがあります。そのような場合、サービス間やクライアントから別のサービスへのAPIコールが多すぎるのではないでしょうか? – user2288991

+1

マイクロサービスはネットワークを使用してのみ通信します –

+0

あなたのデザインを見て、境界のあるコンテキストを見つけて、垂直方向を細かく切り分けて、データの更新(状態の変更)、データ読み込みあまり心配していない... –

5

マイクロサービス提供デカップリングは、アプリケーションを独立したドメインに分類する必要があります。各ドメインにはDBがあります。他のMSが他のいくつかのマイクロサービスが所有するデータにアクセスする必要がある場合、それらはネットワークを介して通信しなければならない。

依存するサービスが多すぎ、ネットワークコールが多すぎると思われる場合は、依存するサービスを一緒にクラスタリングしてドメインを定義できます。

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

私Microservicesは次のようになります。

初期設計

  1. ユーザーサービス:ログインとユーザー情報について。
  2. テストサービス:テストを評価するサービス。
  3. 従業員:
  4. 従業員の詳細を処理当社は:組織のCRUD
  5. 部門を処理します、それを破壊した後、部門のCRUD

を処理し、従業員のように思える、組織や部門のサービスは、/あまりにも多くのネットワークを作ることになります彼らはお互いに密接に依存しているので、APIコール。だから、それらをクラスタ化する方がよい。

更新デザイン

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

各サービスには独自のDBがあり、独立して配置することができます。ユーザーおよびテストサービスはmongoDBまたは任意のNoSql DBを使用でき、組織サービスはRDBMSを使用できます。

これが役に立ちます。

関連する問題