私たちのウェブサイトの実装にはMicroservicesアーキテクチャーを使用する予定です。私は、サービス間でデータベースを共有することが妥当かどうか、またはサービスごとに個別のデータベースを持つことが望ましいかどうかを知りたかったのです。この点に関して、すべてのサービスに共通のデータベースを1つ持つことを検討することはできますか、それともマイクロサービスアーキテクチャの本質に反するのでしょうか?マイクロサービスアーキテクチャー用のDBデザイン
答えて
同じデータベースを共有すると、マイクロサービスの最も重要な利点の2つ、つまりstrong cohesion and loose coupling (page 25)が失われます。
テーブルを共有していない場合は、同じデータベースを共有できます。たとえば、microservice1
はtable1_1
とtable_1_2
とmicroservice2
はtable2_1
とtable2_2
を使用します。私が使用すると言うとき、私は読み書きを意味します。 1つのマイクロサービスは、他のテーブルには読み込みも書き込みもしません。
マイクロサービス提供デカップリング。 は、アプリケーションを独立したドメインに分類する必要があります。各ドメインにはDBがあります。他のMSが他のいくつかのマイクロサービスが所有するデータにアクセスする必要がある場合、それらはネットワークを介して通信しなければならない。
依存するサービスが多すぎ、ネットワークコールが多すぎると思われる場合は、依存するサービスを一緒にクラスタリングしてドメインを定義できます。
たとえば、会社のマネージャーがテストを投稿し、彼の部門の全従業員の結果を見ることができるオンラインテスト評価サービスがあるとします。このシナリオの
私Microservicesは次のようになります。
初期設計
- ユーザーサービス:ログインとユーザー情報について。
- テストサービス:テストを評価するサービス。
- 従業員:
- 従業員の詳細を処理当社は:組織のCRUD
- 部門を処理します、それを破壊した後、部門のCRUD
を処理し、従業員のように思える、組織や部門のサービスは、/あまりにも多くのネットワークを作ることになります彼らはお互いに密接に依存しているので、APIコール。だから、それらをクラスタ化する方がよい。
更新デザイン
- ユーザーサービス:ログインとユーザー情報について。
- テストサービス:テストを評価するサービス
- 組織:会社、従業員および部署の関連操作を処理します。
各サービスには独自のDBがあり、独立して配置することができます。ユーザーおよびテストサービスはmongoDBまたは任意のNoSql DBを使用でき、組織サービスはRDBMSを使用できます。
これが役に立ちます。
- 1. DBのショートラッカーのデザイン
- 2. インクリメンタル/デクリメントDBデザイン
- 3. JavaScript DB APIデザイン
- 4. DBデザイン。継承
- 5. DBデザインFK&PK
- 6. DBデザイン - 提案
- 7. MYSQLシンプルDBデザイン
- 8. DBデザインの質問
- 9. マイクロサービスアーキテクチャーで非同期
- 10. スケジューリングphp mysql dbデザイン
- 11. マイクロサービスアーキテクチャーでメールを送信
- 12. DBデザイン:ルックアップテーブルの並べ替え順序
- 13. DBデザイン:テーブルの継承と階層
- 14. Visio DBデザインのセットを定義する
- 15. 批判的な私のDBデザイン
- 16. サブタイプのクロスリンク付きスーパータイプ/サブタイプdbデザイン
- 17. Rails DBデザイン:JSONBとPostgreSQLを使用したアルバムとアルバムなし
- 18. モバイル用のデザイン
- 19. フォルダスキャンサービス用のデザイン
- 20. DBストアドプロシージャの操作デザイン - カーソルベースのセットに基づく
- 21. Nodejsマイクロサービスアーキテクチャーは共通のプロジェクトでモデルを共有します
- 22. カードゲームクラス用のOOPデザイン
- 23. GUIデザインの用語
- 24. MySQLで大きなテーブルを扱うには? (ゲームのDBデザイン)
- 25. カテゴリツリーのDBデザインはどれぐらい効率的ですか?
- 26. DBデザイン質問 - 国際人物の名前を格納する
- 27. DBデザイン - 私は、次のカテゴリ持つ親、子カテゴリマッピング
- 28. dbデザインに関する質問と弱いエンティティの実装
- 29. Photoshopのパラメータ:Android用のデザイン
- 30. PHP OOPデザイン:DBが積極的に接続
お返事ありがとうございます。しかし、私のアプリケーションでは、サービスの1つが他のいくつかのサービスからのデータを利用するケースがあります。そのような場合、サービス間やクライアントから別のサービスへのAPIコールが多すぎるのではないでしょうか? – user2288991
マイクロサービスはネットワークを使用してのみ通信します –
あなたのデザインを見て、境界のあるコンテキストを見つけて、垂直方向を細かく切り分けて、データの更新(状態の変更)、データ読み込みあまり心配していない... –