マイクロサービス Nosql データベースとメッセージ キュー
公開: 2022-11-22マイクロサービスは、開発者がシステムとして連携する単一の機能モジュールを構築できるソフトウェア アーキテクチャの一種です。 マイクロサービス システムでは、各サービスに独自のデータベースがあります。 これにより、各サービスを他のサービスとは独立して開発および展開できます。 Nosql データベースは、リレーショナルデータベースの従来のテーブル ベースの構造を使用しないタイプのデータベースです。 Nosql データベースは、リレーショナル データベースにはあまり適していない大量のデータを格納するためによく使用されます。 マイクロサービスは、さまざまな方法を使用して nosql データベースと通信できます。 一般的なアプローチの 1 つは、メッセージ キューを使用することです。 このアプローチでは、各サービスに、他のサービスとの通信に使用するメッセージ キューがあります。 サービスが nosql データベースのデータにアクセスする必要がある場合、サービスはメッセージをキューに送信します。 nosql データベースへのアクセスを担当する別のサービスは、キューからメッセージを取得し、データベースからデータを取得します。 もう 1 つの方法は、REST API を使用することです。 このアプローチでは、各サービスは、他のサービスが nosql データベース内のデータにアクセスするために使用できる REST API を公開します。 このアプローチは、nosql データベースのデータが頻繁に更新される場合によく使用されます。 さらに別の一般的なアプローチは、グラフ データベースを使用することです。 このアプローチでは、各サービスはグラフ内のノードとして表されます。 グラフの端は、サービス間の関係を表しています。 このアプローチは、nosql データベース内のデータが高度に相互接続されている場合によく使用されます。
マイクロサービスの目標は、最大速度を達成することです。 ほとんどのNoSQL サービスは、わずか 24 時間でセットアップでき、迅速にスケールアップし、永続化レイヤーに触れる前にできるだけ多くのデータ ノードを作成できます。 これらすべての結果として、リリース サイクルが短縮されます。
マイクロサービスをサポートする方法で大規模に展開すると、NoSQL データベースは多くの場合、使いやすくなります。 多くの場合、NoSQL データベースをリアルタイム ストリーミング テクノロジと統合する機能の方が優れています。
上で述べたように、すべてのマイクロサービスには、データベース、専用スキーマ、または専用テーブルのセット (データベース内で定義された) に格納できる DATA が必要です。
マイクロサービスはデータベースとどのようにやり取りしますか?
アプリケーションは、モノリシックな方法でデータベースと対話します。 アプリケーションのすべてのコンポーネントは、同じデータを共有します。 マイクロサービスではデータの所有権が分散化されていますが、他の種類のアプリでは直接行われています。 一般に、すべてのサービスには、それぞれの機能に合わせて調整された独自のプライベート データ ストアがあります。
サービスごとに個別のデータベースを作成すると、ドメイン境界を強化し、意図しないデータのやり取りを防ぐことができますが、これが唯一の解決策ではありません。 データベースをすべてのサービスと共有する可能性もオプションです。 サービスが動作し、他のサービスからの予期しないデータに驚かされない限り、問題はありません。 データベースベースのマイクロサービス アーキテクチャは、スケーリングが困難です。 データベースのクラッシュは、単一のクラスターだけでなく、データベース全体で発生します。 データベースの変更は、多くのサービスに影響を与える可能性があります。 さらに、マイクロサービスは同じデータベース上に構築されて接続されるため、相互に独立していません。 マイクロサービス アーキテクチャでは、共有データベースを使用すると多くの利点が得られます。 このシステムは、アーキテクチャのスケールアップと適応にも役立ちます。 また、サービスの開発と展開も容易になります。 最後に、システムの管理とトラブルシューティングが容易になります。 その結果、マイクロサービスに単一のデータベースを使用する場合でも、サービスごとに個別のデータベースを使用する場合でも、アーキテクチャが適応可能でスケーラブルであることを確認してください。
マイクロサービスの長所と短所
近年、組織はマイクロサービスへの依存度を高めています。 開発者間のチーム間の依存関係の必要性を減らしますが、欠点もあります。 マイクロサービスの問題の 1 つは、単一のデータベースに依存していることです。 2 つの異なるマイクロサービスが同じ情報を必要とする場合、データ共有が必要です。 マイクロサービスの 1 つがデータを長期間ロックすると、データが使用できなくなる可能性があります。 マイクロサービスのもう 1 つの問題は、他のマイクロサービスからのデータへのアクセスが難しいことです。 各マイクロサービスが他のマイクロサービスのデータに接続するには、通信プロトコルが必要です。 このタイプの実装は実装が難しく、エラーが発生する可能性があります。 これらの問題を解決する 1 つの方法は、複数のデータベースを使用することです。 マイクロサービス Web サイトは、この方法を使用して特定の要件を最もよく満たすデータベースを使用できます。 また、さまざまなマイクロサービスを開発するときに、さまざまなデータベース テクノロジを使用することもできます。 これにより、マイクロサービス間のデータへのアクセスが容易になりました。
マイクロサービス共有データベース
マイクロサービス共有データベースは、マイクロサービス間で共有されるデータベースです。 このデータベースは、複数のマイクロサービスが必要とするデータを格納するために使用できます。 これは、マイクロサービス間でデータを共有する必要がある場合に役立ちますが、各マイクロサービスが独自のデータのコピーを持つ必要はありません。
マイクロサービス データベースのベスト プラクティス
マイクロサービス データベースのベスト プラクティスは、アプリケーションの特定のニーズによって異なるため、この質問に対する万能の答えはありません。 ただし、役立つ可能性のある一般的なヒントには、データベース スキーマをモジュール化して疎結合になるように設計する、メッセージ キューを使用してマイクロサービスを分離する、データベース レプリケーション ソリューションを使用して高可用性を確保するなどがあります。
マイクロサービスのデータベース パターン
マイクロサービスに使用できるいくつかの異なるデータベース パターンがあります。 最も一般的なのは共有データベース パターンで、各マイクロサービスにはデータ ストレージに使用される独自のデータベースがあります。 これは、MySQL などのリレーショナル データベース、または MongoDB などの NoSQL データベースのいずれかです。 もう 1 つの一般的なパターンは、イベント ソーシング パターンです。各マイクロサービスには、データ ストレージに使用される独自のイベント ログがあります。 このイベント ログを使用して、過去に発生したイベントを再生できます。これは、デバッグや監査の目的に役立ちます。
マイクロサービス データベースの結合
マイクロサービスは、連携して動作する小規模で独立したサービスに焦点を当てたソフトウェア アプリケーションを構築するための新しいアプローチです。 このアプローチには多くの利点がありますが、潜在的な欠点の 1 つは、データベースの結合がより困難になる可能性があることです。
この課題を克服する 1 つの方法は、Apache Kafka のようなツールを使用することです。このツールは、すべてのマイクロサービスからのデータの中央ハブとして機能します。 その後、Kafka を使用してこのデータの結合を実行できるため、複数のマイクロサービスからのデータの操作がはるかに簡単になります。
マイクロサービス データベース管理パターン
マイクロサービスのデータベース管理に万能の答えはありませんが、データの一貫性とパフォーマンスを確保するために従うことができる一般的なパターンがいくつかあります。 一般的なパターンの 1 つは、すべてのマイクロサービスがアクセスできる中央データベースを用意することです。これにより、データの一貫性を確保できます。 もう 1 つの一般的なパターンは、各マイクロサービスが独自のデータベースを管理することです。これは、各マイクロサービスが独自のデータベースを個別にスケーリングできるようにすることで、パフォーマンスを向上させるのに役立ちます。
マイクロサービスで使用されるパターンとは?
クライアント側の検出パターンとサーバー側の検出パターンは、クライアントの要求をマイクロサービス アーキテクチャで利用可能なサービス インスタンスにルーティングするために使用されます。 サービスのメッセージング パターンとリモート プロシージャ呼び出しパターンは、さまざまな方法で使用できます。
データベースはマイクロサービスでどのように管理されますか?
マイクロサービス アーキテクチャの主な特徴は、サービスを結合せずにサービスを提供することです。 これを実現するには、各サービスに独自のプライベート データ ストアが必要です。 その結果、マイクロサービス用のデータベース アーキテクチャを開発するには、通常、サービス ベースのパターンに準拠する必要があります。
マイクロサービスで複数のデータベースを管理するにはどうすればよいですか?
異なるマイクロサービス用に単一のデータベースを作成する場合、これはアンチ パターンです。 解決策は、マイクロサービスごとにデータベースを作成することです。
マイクロサービス アーキテクチャ
マイクロサービス アーキテクチャは、ソフトウェアを小さな独立したサービスの集合として編成するソフトウェア アーキテクチャの一種です。 各サービスは特定の機能を担当し、他のサービスと通信してタスクを実行します。 このタイプのアーキテクチャは、ソフトウェア アプリケーションの柔軟性、スケーラビリティ、および保守性を向上させるように設計されています。
マイクロサービス トポロジの 3 つの異なるタイプ
API REST ベースのトポロジは、次の図で確認できます。 マイクロサービスは、マイクロサービスのトポロジに基づいて RESTful API によってアクセスされます。 マイクロサービスはインフラストラクチャ内のさまざまなノードに実装され、標準の HTTP を使用して相互に通信します。 アプリケーションの作成には、REST ベースのトポロジが使用されます。 マイクロサービスは、同じ RESTful API を使用してトポロジ全体に分散されます。 一方、マイクロサービスのデプロイは、マイクロサービス間の API メッセージ ベースの通信に依存しています。 メッセージングのトポロジは一元的に分散されます。 マイクロサービス トポロジは、マイクロサービスが相互に通信する集中メッセージング プラットフォームに基づいています。 これは主にマイクロサービス通信に使用され、マイクロサービスとそのオーケストレーション レイヤー間でメッセージが交換され、このプラットフォームを介して処理されます。