メインコンテンツに移動

マイクロサービス

あらゆるサイズと規模のアプリケーションを稼働させる、高可用性のマイクロサービスを構築できます。

モノリシック対マイクロサービスアーキテクチャ

モノリシックアーキテクチャでは、プロセスすべてが固く結合され、単一のサービスとして実行されます。したがって、アプリケーションのプロセスのいずれか 1 つでも需要のスパイクが生じた場合、アーキテクチャ全体をスケールする必要が生じます。モノリシックアプリケーションの機能を追加または改善すると、コードベースが大きくなるにつれて複雑さが増大します。この複雑さにより、実験は制限され、新しいアイディアの実装は困難になります。モノリシックアーキテクチャはアプリケーションの可用性にリスクをもたらします。多くのプロセスが依存的で固く結合されている状態では、どれか 1 つでもプロセスに障害が発生した場合、その影響が大きくなるためです。

マイクロサービスアーキテクチャでは、アプリケーションは独立した複数のコンポーネントとして構築されます。各コンポーネントは、1 つのサービスとして個別にアプリケーションプロセスを実行します。これらのサービスは、軽量の API を使用した、正確に定義されたインターフェイスを通じてやり取りします。サービスはビジネス機能向けに構築され、各サービスが単一の機能を実行します。サービスが独立して実行されるため、各サービスを更新、デプロイ、スケールして、アプリケーションの特定の機能に関する要求に応えることができます。

Diagram comparing a monolithic node.js API service with users, threads, and posts grouped together, to a microservices architecture with separate services for users, threads, and posts.

マイクロサービスの特徴

自律性

マイクロサービスアーキテクチャの各コンポーネントサービスは、他のサービスの機能に影響を与えることなく開発、デプロイ、実行、スケールできます。各サービスは他のサービスとコードまたは実装を共有する必要が一切ありません。コンポーネント間の通信はすべて正確に定義された API を通じて行われます。

特殊化

各サービスは一連の機能のために設計され、特定の問題を解決することにフォーカスしています。もし開発者が経時的にコードをサービスに追加してそのサービスが複雑になる場合には、サービスをより小さなサービスに分割できるます。

マイクロサービスの利点

俊敏性

マイクロサービスでは、サービスの所有権を持つ小規模で独立した複数のチームからなる組織が発展します。チームは、小規模でよく理解されたコンテキストにおいて行動し、より自主的かつより迅速に仕事に取り組む権限を与えられます。これにより、開発サイクルが短縮されます。組織の総スループットを大いに有効活用できます。

柔軟性のあるスケーリング

マイクロサービスを利用すると、サポートするアプリケーション機能の要求に応じて各サービスを個別にスケールできます。これによりチームは、インフラストラクチャに対するニーズの適正化、各機能にかかるコストの精確な評価、サービスに対する需要のスパイクが生じた場合の可用性の維持が可能です。

容易なデプロイ

マイクロサービスでは、継続的インテグレーションと継続的デリバリーが実現可能です。容易に新しいアイディアを試したり、上手くいかなかった場合にロールバックしたりできます。失敗時のコストが抑えられるため、活発に実験を行えるほか、コードの更新が容易になり、新機能の市場投入を加速できます。

技術的な自由

マイクロサービスアーキテクチャは、「フリーサイズ」のアプローチを踏襲しません。チームには、特定の問題を解決するための最適なツールを選ぶ自由があります。その結果、マイクロサービスを構築するチームは、各ジョブに最適のツールを選択可能です。

再利用可能なコード

ソフトウェアを小さな正確に定義されたモジュールに分割すると、チームは複数の目的に合わせた機能を使用できます。ある機能のために記述されたサービスは、別の機能のために構成要素として使用できます。そのため、アプリケーションはそれ自体から独立でき、開発者は一からコードを記述することなく新機能を作成できます。

耐障害性

サービスの独立性により、アプリケーションの耐障害性が向上します。モノリシックアーキテクチャでは、1 つのコンポーネントに障害が発生すると、アプリケーション全体に障害が及ぶおそれがあります。マイクロサービスでは、アプリケーションの機能性を低下させてアプリケーション全体のクラッシュを回避することにより、全体的なサービス障害に対応します。

ストレージとデータベース

ネットワーク

ログ記録とモニタリング