各マイクロサービスが個別の独立したデータベースと共通ユーザテーブルを持つマイクロサービスベースのアーキテクチャを設計することは可能ですか?共通ユーザテーブルを持つマイクロサービス
答えて
マイクロサービス間でデータベースまたはテーブルを共有することは推奨されません。彼らははっきりとした明確な責任を持っていて、ネットワークを使ってのみコミュニケーションをとるべきです。プロトコルは、マイクロサービス内で使用される技術を隠す必要があります。たとえば、要求/応答にJSONを使用できます。
マイクロサービスは、他のマイクロサービスの技術に依存してはならないという理由から、マイクロサービスは他のテクノロジスタックを使用するが同じ目的を果たす他のマイクロサービスと簡単に置き換えられるべきです。あなたが別で1 microserviceからのデータが必要な場合は
あなたが作ることができます。
同期呼び出し:これは実装が簡単ですが、失敗に
非同期呼び出しをカスケード接続する余地がある。困難を実装しますより弾力のあるシステムに導く
ユーザーdetaに関連するすべてのロジックをカプセル化する追加のマイクロサービスを作成することを検討してくださいILS:
- にのみ、このサービスは
- 他のサービスがそのサービスに要求を行うと、ユーザーテーブルについて何も知らないはずのデータを修正/読み取るために、ユーザーテーブルへのアクセス権を持っているし、エンドポイントを提供する必要があります
私はRESTベースのマイクロサービスを経験しています(私の答えのこの部分は主に意見に基づいています)。ここではほとんどの場合、データの読み取り/変更が必要な場合に直接HTTPリクエストを使用してサービスします。私たちは、そのサービスは、データの変更についてのさまざまなコンポーネントに通知したいときや、私たちはキューベースのメッセージ通信(パブリッシュ・サブスクライブ・パターン)を使用します。
- サービスを、それがデータの所有者である、キューに変更イベントに関するメッセージを送信します。
- 他のサービスはそのキューに登録し、新しいメッセージが到着したときに処理を行います。
- ご覧のとおり、通信は非同期になります。
単純なメッセージブロードキャストよりもメッセージキューのメリットの1つは、自動的に再試行(および障害発生時に再試行)するメカニズムをサポートすることです。
次に、ユーザーのカプセル化されたユーザーの詳細マイクロサービスを持つマイクロサービス間の最善の通信方法は何ですか? RPCまたはメッセージブロードキャスト? –
マイクロサービス - サービスと同様に、できるだけ自律的でなければなりません。データベーステーブルを共有することは、サービスが可用性に結びついていることを意味し、より重要なのは、相互の内部構造を妨げることです。
これは、単一のサービスを複数の実行可能ファイルに分割して、開発スピード、テクノロジの適合性、または他の理由に関連する利点を得ることが理にかなっていることがあります。私はこれらをaspectsと呼んでいます(同じサービスの異なる点のように)。
サービスの境界を理解する(そして尊重する)のは依然として非常に重要です。そうでなければ分散した混乱を招くことがありますが、境界を特定すると、サービスを作るいくつかのコンポーネント(側面)を構築することもできます。例えば、私は今日、私たちは着信データの処理(リアルタイムでのストリーミング)とそのデータ(グラフベースのクエリ)を消費するための全く異なる要件を持つサービスを持っています。最初のアスペクトはScalaで実装され、高度に分散されており、後者はnode.js(express-graphqlのようなフレンドリーなライブラリを使用するため)で実装されています。両方のアスペクトが同じDBを使用しますが、DBはシステム内の他のサービス
- 1. マイクロサービス共有データベース
- 2. Sharepoint 2013共通のメニューバーを持つリストビュー
- 3. 共通要素を持つUITableViewCell
- 4. マイクロサービス通信
- 5. ホテル通信マイクロサービス
- 6. マイクロサービスで共通のフロントエンドコンポーネントを管理する方法
- 7. マイクロサービスごとに専用のCronジョブを持つGAEマイクロサービス
- 8. 共有データベースを持つマイクロサービス?複数のORMを使用していますか?
- 9. テナント間の共通データを持つマルチテナント共有データベース
- 10. 同期通信マイクロサービス
- 11. マイクロサービスとプレゼンテーション層を持つAPIゲートウェイ
- 12. 共通のノードを持つリンクを見つける
- 13. 1つの共通認証を持つ複数のコントローラRspec
- 14. 共通の属性を持つSQLテーブルについて
- 15. マイクロサービス間のメッセージベースの通信
- 16. Springマイクロサービス間の通信
- 17. 2つのマイクロサービス間でドメインモデルを共有するベストプラクティス
- 18. 2つのNodeJSマイクロサービス間でカスタムコードを共有
- 19. マイクロサービス間でコードを共有する
- 20. railsは共通の属性を持つタプルを返します
- 21. 共通ファイル識別子を持つcsvファイルを結合する
- 22. Bintray、共通グループidを持つパッケージをマージする
- 23. 2列に共通の値を持つ行を特定する
- 24. 共通の名前を持つコンピュータ言語を探したい
- 25. 最低共通共通点を見つける
- 26. 共通のライブラリを持つ複数のプロジェクト
- 27. Oracle SQLの共通列を持つ表の結合
- 28. 共通の列を持つ複数のタイプのオブジェクトのActiveRecordスキーマ
- 29. 共通の文字を持つ正規表現のキャプチャグループ
- 30. 共通のメソッドとデータ構造を持つ戦略
マイクロサービスごとにユーザー情報を共有する必要があり、マイクロサービスから作成されたユーザー情報の変更はすぐに他のユーザーに知らせる必要があります。この場合、同期呼び出しまたは非同期呼び出しの方が信頼性が高いですか? HTTPまたはRPCはどうですか? –
@OmarFaruk私はhttpとjsonでrestfullと非同期を推奨しますが、あなたの特定のケースに依存します。 –