web-dev-qa-db-ja.com

マイクロサービスアーキテクチャ:単一のサービスが所有する単一のデータベース?

マイクロサービスアーキテクチャでシステムを再構築しています。 SOAの標準的な方法は、各サービスが独自のデータベースを担当することです。

しかし、モノリシックデータベース(つまり、ユーザー、注文、在庫などを1つのデータベースに保持する)を処理する「データベース」サービスを1つ持つことは理にかなっていますか?これは妥当と考えられるものですか?

それとも、ユーザー、注文、在庫のすべてに独自のデータベースと対応するサービスがあるという期待ですか?その場合、各アイテムの注文数で在庫リストを注文するなどの単純なリレーショナルクエリを実行する場合、どのように処理しますか?

編集:重複しないでください。明確にするため(コメントから):複数のマイクロサービス間でデータベースを共有することは悪いことだと理解しています。私の質問は、単一のマイクロサービスによって管理される大きな中央データベースを持つことは悪い考えであるのか、それとも内部システムのデータ自体を切り離すことが重要であるのか、ということです。

10
jtmarmon

ただし、モノリシックデータベースの処理を担当する1つの「データベース」サービス(つまり、ユーザー、注文、在庫などを1つのdbに保持する)を持つことは理にかなっていますか?これは妥当と考えられるものですか?

これは、SOAまたはデータベース、データベースの一部、テーブル、または考えられるあらゆるデータベースの一部を担当するその他のアーキテクチャで、サービス(または何でも)を作成するのは間違いだと思います。

サービスとは、ユーザー(または他のサービスの要求)の要求を満たすことです。データベースの相互作用は、それに対する副次的なものにすぎません。マイクロサービスは、テーブルのグループではなく、リクエストのグループを処理します。

私の理解では、サービスは通常、最大の分離を確実にするために専用データベースを使用するように設計されています。このようにして、サービスデータは物理的に別のサービスのデータから分離されます。また、この決定により、サービスを新しいプラットフォームに簡単に移動できます(サービスアプリサーバー+データベースを別のマシンに移動するだけです)。

サービスの分離を維持する他の方法が見つかる場合や、データベースの特定の部分を別のマシンに移動することにあまり問題がない場合は、単一のデータベースを使用できます(データベースのどの部分がどのサービスに属しているかを調べます)時々簡単ではありません)。

6