マイクロサービスとは、それぞれ独立して機能する疎結合のサービスを連携させ、全体として1つの情報システムを構築する開発・運用手法を指す。マイクロサービスを活用したシステム構成は、マイクロサービスアーキテクチャーと呼ばれる。

 高速で柔軟性の高い開発に適しており、近年ニーズが高まりつつある。米アマゾン・ドット・コムや米ネットフリックスなどの企業がマイクロサービスを採用している。日本国内では、みんなの銀行や全日本空輸(ANA)、三越伊勢丹などがシステム構築に採用した。

 一般にマイクロサービスはDockerなどのコンテナ技術の上で実装・実行する。サービス間はAPI(アプリケーション・プログラミング・インターフェース)でつなぐ。Kubernetesのようなコンテナ管理ツールを活用し、コンテナを自動で操作することも多い。各サービスの独立性を維持しながら運用するため、サービスごとに最適な言語で構築できる。

 マイクロサービスは「モノリシック(一枚岩)」と対比で語られることが多い。モノリシックなシステム構造では、各機能が密接に結びつく。1つの機能に変更を加える場合、他機能への影響調査や回帰テスト、リリース時期の調整などが必要だ。改修したプログラムを実環境へ展開(デプロイ)する際はシステムを停止しなければならない場合が多い。

 一方、マイクロサービスは機能をサービスとして切り分けた単位で開発するため、リリース作業でもシステムを停止することなく、他サービスに影響を与えずにデプロイできる。1日に複数回のデプロイも可能なため、アプリケーションの改修速度も向上する。マイクロサービスは小さく始めて徐々に機能を充実させていくアジャイル開発に向く。

 負荷分散の観点でも利点がある。各サービスが独立しているため、特定のサービスの負荷が高い場合はシステム全体ではなく、該当部分のみスケーリングすれば済む。

DevOpsの採用と実践が必須

 システムの柔軟さや開発の素早さなどマイクロサービスの利点は、単にシステムをマイクロサービス化すれば実現できるとは限らない。日本マイクロソフト カスタマーサクセス事業本部App Innovationアーキテクト本部の樽沢広亨氏は「DevOpsの採用と実践が重要だ」と強調する。開発と運用の連携を密にし、高頻度で確実なソフトウエアの開発やテストを実行する開発体制にすることで、マイクロサービスの利点を享受できるという。

 マイクロサービスの構築・運用について考慮すべき点もある。各サービスで適用する技術が異なる場合は、開発や運用監視のコストや手間が増えたり、エンジニアの追加学習が必要になったりする。また、データベースをそれぞれに分割する場合は、1つのトランザクションを担う複数サービスの書き込む内容や順序、エラー時の対応、書き込みが複数箇所の場合はそれらの関係性などを踏まえ、テーブル間で不整合が起こらないよう留意する必要がある。