下の「JavaEdge」をクリックし、「スターとして設定」を選択します。
技術情報はお早めに!
免責事項~
どの記事も考えすぎないでください。
世界には同じ成長環境や同じレベルの認知が存在しないため、すべてが精査に耐えることはできません。また「すべての人に適用できる解決策はない」 a>;
記事に記載されている意見を急いで判断する必要はありません。ただ自分の気持ちを取り入れて、自分自身を適度に観察してください。部外者の視点から見た状況。あなたは一般人になる前のどの段階にいますか?。
何を考え、何をするかはすべてあなた次第です「継続的な練習を通じて、自分に合った道を見つけてください」
0 概要
マイクロサービスのデータ管理パターンとは何ですか?
マイクロサービス データ管理パターンは、ソフトウェアのさまざまなコンポーネントのデータを管理するのに役立ちます。データ管理パターンにより、2 つ以上のソフトウェア コンポーネントのデータベース間の通信が容易になります。
データ管理モデル
サービスパターンごとのデータベース
共有データベースのパターン
API構成パターン
サーガパターン
CQRSパターン
イベントソーシングパターン
データベースシャーディングパターン
1 サービスごとに 1 つの DB
各マイクロサービスには独自のプライベート データベースがあり、サービスが疎結合になります。
サービス スキーマごとに 1 つのデータベースは使いやすく、新しいアプリケーションに適しています。マイクロサービス モデルは以下を提供します。
高い拡張性
データベース間の疎結合
簡単な影響分析
アドバンテージ
孤立と独立
各マイクロサービスには専用のデータベースがあり、データの完全な分離が保証されます。この分離により、各サービスは他のサービスに干渉することなく独立して実行できます。 1 つのマイクロサービスのデータベースに対する変更や更新は、他のマイクロサービスには影響しません。
自律的な開発と展開
マイクロサービス チームは、独自のサービスとデータベースを自律的に操作できます。この自律性により、チームは他のチームと調整することなくアップデートをリリースできるため、開発と展開のサイクルが短縮されます。
技術的な柔軟性
さまざまなマイクロサービスは、それぞれの特定のニーズに最適なデータベース テクノロジを使用できます。この柔軟性は、要件に基づいて、あるマイクロサービスにはリレーショナル データベース、別のマイクロサービスには NoSQL データベース、さらにはキャッシュ メカニズムを選択できることを意味します。
スケーラビリティ
各マイクロサービスは独自のニーズに基づいてデータベースを個別にスケーリングできるため、スケーリングが簡素化されます。高トラフィックまたはデータ負荷に悩まされているサービスは、他のサービスに影響を与えることなくデータベースを拡張できます。
カップリングを減らす
マイクロサービス間のデータベースへの直接アクセスを回避することで、マイクロサービス間の結合を軽減できます。マイクロサービスは、明確に定義された API を通じて相互に対話するため、疎結合が可能になり、サービスを変更する際の柔軟性が高まります。
大きな利点としては、機敏性、拡張性、独立性の向上、データ管理の改善などが挙げられます。ただし、データの一貫性の確保やマイクロサービス間の効果的な通信パターンの実装などの課題も伴い、慎重に検討して実装する必要があります。
2 共有データベースのパターン
さまざまなマイクロサービスで共有される単一のデータベースを作成します。
単一の共有データベースを作成し、各サービスがローカルACID トランザクションを使用してデータにアクセスします。しかし、これはマイクロサービスの性質そのものに矛盾し、アプリケーションの将来に深刻な問題を引き起こします。最後に、マイクロサービスではなく大規模なモノリシック アプリケーションを開発するという問題に直面します。
該当シーン
レガシー アプリケーションで役立ち、読み取り負荷が書き込み負荷よりも高い合理化されたアプリケーションで役立ちますが、アプリケーションが大きくなると、共有データベース スキーマによりアプリケーション間の密結合が発生する可能性があるため、サービス スキーマごとのデータベースへの移行が可能になります。ここではそうではありません。共有データベースがあるため、さまざまなテクノロジーを使用できますが、これによりスケーラビリティの欠如や単一障害点が発生する可能性があります。
3 API構成(API構成パターン)
複数のマイクロサービスからのデータを集約して、クライアントまたは別のサービスへの単一の応答に結合します。これにより、消費者は異なるマイクロサービスに対して複数の API 呼び出しを行う必要がなく、データの統一されたビューを提供できるようになります。
これにより、クライアントの開発が簡素化され、レイテンシが短縮され、データのオーバーフェッチやアンダーフェッチが最小限に抑えられます。
したがって、ここではクライアントがゲートウェイにリクエストを行い、さまざまなマイクロサービスで処理する必要があるすべての結合リクエストがアグリゲーターによってさまざまなマイクロサービスに渡され、最終的に 1 つの応答が生成されます。
このパターンでは、クライアントが 1 回のリクエストで必要なデータをすべて取得できるため、異なるマイクロサービスに複数のリクエストを行う場合と比べて待ち時間が短縮され、ラウンドトリップ時間が短縮されます。ここで、クライアントは複数のソースからデータを取得してマージするために複雑なロジックを扱う必要がないため、クライアント コードがシンプルになり、保守が容易になります。
4 ロングトランザクション(サガパターン)
分散トランザクション シナリオでマイクロサービス間のデータの一貫性を管理する方法。 Saga は、各サービスを更新し、次のトランザクション ステップをトリガーするメッセージまたはイベントを発行する一連のトランザクションです。ステップが失敗した場合、saga は、前のトランザクションの影響を相殺するために、補償トランザクションを実行します。
サービスごとに 1 つの DB モデルと同様に、各マイクロサービスには独自の DB がありますが、ACID は満たされません。
顧客に信用限度額がある電子商取引を構築します。アプリケーションは、新しい注文が顧客の信用限度を超えないようにする必要があります。注文と顧客は異なるサービスが所有するデータベースに存在するため、アプリケーションはローカル ACID トランザクションを単純に使用することはできません。
この問題を解決するには、Saga モードを終了します。
Saga パターンは、一連のローカル トランザクションを使用してトランザクション管理を提供します。ローカル トランザクションは、saga 参加者によって実行されるアトミックなワークロードです。各ローカル トランザクションはデータベースを更新し、メッセージまたはイベントを発行して、サガ内の次のローカル トランザクションをトリガーします。ローカル トランザクションが失敗した場合、saga は一連の補償トランザクションを実行し、前のローカル トランザクションによって加えられた変更を元に戻します。
サガの実装方法
調整
集中管理ポイントを持たずに、参加者が相互にイベントを交換する、物語を調整する方法。
整える
集中管理者がどのローカル トランザクションを実行するかをサーガ参加者に指示する、サーガを調整する方法。
5 CQRS
コマンド クエリ責任の分離は、ソフトウェア アーキテクチャで一般的に使用される設計パターンであり、複雑なデータ処理要件を持つシステムに特に適しています。 CQRS は次のことを行います。
コマンドの処理(データの変更)
クエリ(データの取得)
責任をさまざまなコンポーネントに分割します。このモードは、読み取り操作と書き込み操作でパフォーマンス、スケーリング、最適化の要件が異なるシナリオで特に役立ちます。
主要な概念とコンポーネント
注文
データを変更する操作、または何らかの状態変更操作を実行する操作を表します。例には、レコードの作成、更新、または削除が含まれます。コマンドはコマンド ハンドラーに送信され、コマンド ハンドラーがコマンドを処理し、システムのデータに変更を加える可能性があります。
コマンドハンドラ
注文の受信と処理を担当します。これには、データ ストアへの変更を検証、実行、適用するためのロジックが含まれています。コマンドの処理後、システムの他の部分に変更を通知するイベントを生成する場合があります。
イベント
システム状態の変化を表す不変の事実。コマンド ハンドラーがコマンドを正常に処理したときに、コマンド ハンドラーによって生成されます。イベントは変更の背後にある意図を捕捉し、通常は監査目的およびシステム状態の信頼できる情報源としてイベント ストアに保存されます。
イベントストレージ
イベント用の永続ストレージ システム。システム内で発生したすべてのイベントの履歴が保存されます。イベント ソーシングは、イベント ストアを使用してイベントを再生することでアプリケーションの状態を再構築する、密接に関連したパターンです。
お問い合わせ
状態を変更しない読み取り操作を表します。クエリ ハンドラーは、クエリを処理し、結果をクライアントに返す責任があります。コマンド ハンドラーとは異なり、クエリ ハンドラーはデータを変更しません。
モデルの分離
CQRS システムでは、通常、書き込み用のモデル (コマンド モデル) と読み取り用のモデル (クエリ モデル) が分離されています。これらのモデルは、それぞれのタスクを実行するために個別に最適化できます。
作業の方法
①コマンド処理
クライアントは、適切なコマンド ハンドラーにコマンドを送信します。
コマンド ハンドラーはコマンドを処理し、検証し、必要なビジネス ロジックを適用し、結果としてイベントを生成する場合があります。
生成されたイベントはイベント ストアに保存され、システムの他の部分に通知するために公開されます。
② イベントハンドリング
イベント ハンドラーはイベントをリッスンし、クエリ モデルと、クエリ処理 (データベースやキャッシュの読み取りなど) に使用される非正規化データ ストアを更新します。
この分離により、クエリ モデルを読み取り用に最適化でき、コマンド モデルとは異なるデータ構造とスキーマを使用できる可能性があります。
クエリ処理
クライアントはクエリをクエリ ハンドラーに送信します。
クエリ ハンドラーはクエリ モデルからデータを取得し、結果をクライアントに返します。
6 イベントソーシングパターン
イベント ソーシング パターンは基本的に、イベントを蓄積し、データベース内のイベント シーケンスに集約する方法を提供します。
7 データベースシャーディングパターン
データ シャーディング モードは、データ セットを異なるシャードまたは水平パーティションに分割して、アクセスとストレージを簡素化します。マイクロサービス データベース管理パターンの各シャードは同じスキーマを持ちますが、データの異なるサブセットを保持します。
シャーディング モードでは、ストレージのニーズが増加したときに新しいシャードを追加できるため、高いスケーラビリティが可能になります。さらに、各サービスの作業負荷を軽減することでパフォーマンスを向上させることができます。
8 まとめ
効果的なマイクロサービス データベース管理は、マイクロサービス アーキテクチャを成功させるための重要な要素です。これらの手法とベスト プラクティスに従うことで、データの整合性とセキュリティを促進しながら、マイクロサービスのスケーラビリティ、保守性、パフォーマンスを維持することができます。マイクロサービス エコシステムの成長に適応するために、適応性を維持し、データベース管理戦略を継続的に監視および最適化します。
参考:
https://learn.microsoft.com/zh-cn/azure/architecture/reference-architectures/saga/saga
最後に書きます
プログラマー向けの生涯学習 Web サイトである Programming Select Network (www.javaedge.cn) がオンラインになりました。
クリックして原文を読み、ウェブサイトにアクセスしてください。
欢迎长按图片加好友
,我会第一时间和你分享软件行业趋势
,面试资源
,学习途径
等等。
友人のメモ [テクニカル グループ コミュニケーション] を追加してグループに参加すると、より多くのチュートリアル リソースが見つかります。
公式アカウントをフォローした後、バックグラウンドでプライベート メッセージを送信します。
返信[アーキテクト]、アーキテクト学習リソースのチュートリアルを入手してください
[面接] に返信すると、大手インターネット企業の最新かつ完全な面接資料が入手できます。
[履歴書] に返信すると、美しいスタイルと豊富なコンテンツを備えたさまざまな履歴書テンプレートを入手できます。
回复 【路线图】,获取直升Java P7技术管理的全网最全学习路线图
返信【ビッグデータ】、Java 変換を取得ビッグデータの研究開発のためのインターネット全体の最も包括的なマインド マップ
WeChat [ssshflz] プライベート メッセージ [副業]、副業コミュニケーション グループに参加する
クリック[元のテキストを読む] にアクセスしますプログラマー向けのワンストップ学習 Web サイト