マイクロサービスの解説(応用情報技術者シラバス用語)

目次

マイクロサービスとは

マイクロサービス(Microservices)は、1つの巨大なシステムを、機能ごとに独立した複数の小さなWebサービス(サービス)に分割して開発・運用するシステム設計の手法です。従来のシステムが「すべての機能を1つにまとめた巨大なプログラム(モノリス)」だったのに対し、マイクロサービスでは機能ごとにデータベースやサーバープログラムを分け、それらがネットワークを通じて互いに通信しながら動作します。これにより、一部分の修正がシステム全体に影響を与えにくくなり、開発スピードの向上や柔軟な拡張が可能になります。

具体例

ネットショッピングサイト(ECサイト)において、「商品検索機能」「カート機能」「決済機能」「配送管理機能」をそれぞれ別々のマイクロサービスとして作ります。仮に「配送管理機能」でエラーが発生して一時的に動かなくなっても、ユーザーは「商品の検索」や「カートへの追加」を問題なく続けられます。また、決済機能だけを最新のプログラム言語で作り直すといったことも簡単です。

【マイクロサービス構成例】\n[ Webブラウザ/スマホアプリ ]\n          │\n    ┌─────┴─────┐\n    ▼           ▼\n[検索サービス] [決済サービス]\n  (DB:商品)     (DB:顧客)\n※それぞれが独立して動き、必要に応じてAPIで連携します。

もう少し詳しく

マイクロサービスアーキテクチャは、独立したデプロイ可能性(Independent Deployability)と、密結合の回避を目指した「疎結合(Loose Coupling)」を核心とします。各マイクロサービスは通常、軽量な通信プロトコル(RESTful APIやgRPCなど)や、非同期のメッセージング(RabbitMQ、Kafkaなど)を介して通信します。最大の技術的特徴は、データベースの分割にあります。「データベースパーサービス(Database-per-service)」パターンを採用し、それぞれのサービスが独自のスキーマとデータベースインスタンスを管理します。これにより、モノリシックなシステムでよく見られた「単一のデータベース変更によるシステム全体の破壊」を防ぎます。ただし、データベースを分離することにより、システム全体でのデータの一貫性(トランザクション管理)の確保が極めて難しくなります。これに対抗するため、複数のサービスにまたがるトランザクションを最終的に一貫させる(結果整合性)ための「Saga(サガ)パターン」や、コマンド側(書き込み)とクエリ側(読み取り)のデータモデルを分離する「CQRS(コマンドクエリ責任分離)」といった高度な設計パターンが必要になります。

試験でのポイント

応用情報技術者試験では、マイクロサービスとモノリシックアーキテクチャの対比、およびそのメリット・デメリットが頻出のポイントです。メリットとして、「サービスごとに適した異なる開発言語やデータベースを選択できる(技術的多様性)」「一部のサービスが障害で停止してもシステム全体が完全にダウンすることを防げる(耐障害性)」「個別のサービス単位で動的にスケーリングが可能(柔軟な拡張性)」といった点が選択肢で問われます。一方でデメリット・課題として、「ネットワーク通信が発生するためオーバーヘッドが生じ、遅延が増大するリスクがある(パフォーマンス劣化)」「分散システム特有のデータ一貫性(結果整合性)の担保や分散トランザクションの難しさ」「システム全体での監視や分散トレーシング(OpenTelemetry等の利用)によるデバッグの複雑化」などが問われるため、利点と欠点の双方を体系的に把握しておく必要があります。

関連する用語

システム全体を一つの巨大なプログラムとして構築するモノリス(モノリシックアーキテクチャ)、サービス間で疎結合なデータ連携を行うためのREST API、およびシステムの一部に障害が発生しても全体への影響を抑える耐障害性(フォールトトレランス)があります。これらを対比することで、現代のシステム設計アーキテクチャのトレンドを論理的に整理できます。

読んだ内容を10問練習と実技で確認

記事で理解した用語を、StudyQuestの演習とクラウド実技ラボで定着させます。

10問練習 実技ラボ