ウェブサイトの実装にマイクロサービスアーキテクチャを使用する予定です。サービス間でデータベースを共有するのが正しいかどうか、またはサービスごとに個別のデータベースを使用することが望ましいかどうかを知りたかったのです。この点で、すべてのサービスに共通のデータベースを1つ持つことを検討できますか、それともMicroserviceアーキテクチャの本質に違反しますか?
マイクロサービスは、分離を提供します。 アプリケーションを分解する独立したドメインに分割する必要があります。各ドメインはDBを持つことができます。他のMSが他のマイクロサービスが所有するデータにアクセスする必要がある場合、ネットワークを介して通信する必要があります。
依存するサービスが多すぎてネットワーク呼び出しが多すぎると感じた場合は、ドメインを定義して、依存するサービスを一緒にクラスター化できます。
たとえば、ある会社のマネージャーがテストを投稿し、彼が自分の部署の全従業員の結果を表示できるオンラインのテスト評価サービスがあるとします。
このシナリオのマイクロサービスは次のとおりです。
初期設計
分解すると、従業員、組織、および部門のサービスは互いに密接に依存しているため、ネットワーク/ API呼び出しが多すぎるように思われます。したがって、それらをクラスター化することをお勧めします。
更新されたデザイン
各サービスは独自のDBを持つことができ、独立してデプロイ可能です。ユーザーとテストサービスはmongoDBを使用できます。または、NoSql DBと組織サービスはRDBMSを使用できます。
お役に立てれば。
同じデータベースを共有する場合、マイクロサービスの2つの最も重要な利点を失います: 強力な結合と疎結合(25ページ) 。
テーブルを共有しない場合、同じデータベースを共有できます。たとえば、microservice1
はtable1_1
とtable_1_2
を使用し、microservice2
はtable2_1
とtable2_2
を使用します。使用と言うときは、読み取りと書き込みを意味します。一方のマイクロサービスは、他方のテーブルで読み取りも書き込みもしません。