公開日
更新日
マイクロサービスとは、ソフトウェア開発手法の一つで、機能に沿った、複数の独立した小さなサービスを組み合わせて連携させることで、一つの大きなサービスを動かすというものです。
拡張性や柔軟性に優れていることから、目まぐるしくビジネス環境が変化する現代において、重宝されている手法です。
本コラムでは、マイクロサービスについての概要と導入するメリット、使用する際の注意点などをまとめてご紹介いたします。
マイクロサービス(microservices)とは、ソフトウェア開発手法の一つで、機能に沿った、複数の独立した小さなサービスを組み合わせて連携させることで、一つの大きなサービスを動かすというものです。
この手法は、2014年に、米国の技術系コンサルタント企業であるThoughtWorks社の技術者マーチン・ファウラーと、ディレクターのジェームス・ルイスが提唱しました。
マイクロサービスは大規模なシステムの構築に向いており、拡張性や柔軟性、可用性に優れ、各サービスのパフォーマンスを個別にモニタリングできるといった特長があります。
マイクロサービスのメリットについては、下の「マイクロサービスのメリット」で詳述します。
一方、すべての機能を単一のコードベースに含むソフトウェア開発手法がモノリシックです。モノリシック(monolithic)は「一枚岩」とも呼ばれ、すべての機能を一つの大きな塊として開発します。小規模なシステムには、モノリシックアーキテクチャが適しています。
モノリシックアーキテクチャとマイクロサービスアーキテクチャの比較をまとめると、下の表のようになります。
モノリシックアーキテクチャ | マイクロサービスアーキテクチャ | |
---|---|---|
開発とデプロイ | 容易 | 困難 |
複雑さ | 低い | 高い |
保守 | 容易 | 困難 |
スケーラビリティ | 低い | 高い |
柔軟性 | 低い | 高い |
冒頭でもお伝えしましたが、現代のビジネス環境は目まぐるしく変化しています。
消費者のニーズは多様化している上に、それぞれ同じニーズにとどまらず、速いスピードで変化しています。
こうした変化に素早く追いつくためには、一つの大きなサービスを機能ごとに小さなサービスへ細分化し、機能ごとに変更を加えやすいマイクロサービスを取り入れた方が適しています。
仕様変更に強いアジャイル開発やDevOpsといった開発手法とマイクロサービスの相性が良いこともマイクロサービスがもてはやされるゆえんです。
また、複雑で規模の大きなシステムが求められるようになった点でも、モノリシックよりもマイクロサービスの方が適しており、注目される理由の一つになっています。
マイクロサービスには、モノリシックアーキテクチャにはない、次のようなメリットがあります。
マイクロサービスを構成する複数の小さなサービスが独立しているため、追加や修正といった変更を加えても、全体へ影響することがありません。当該サービス内だけのテストを行えば済むため、仕様変更が行いやすく、機能拡張などもしやすいアーキテクチャとなっています。
モノリシックアーキテクチャの場合、前の工程が終わってから次の工程へと進むウォーターフォール開発で進められるため、大きなシステムになるほど開発期間も長期にわたり、その分、開発コストも上がります。
一方、マイクロサービスは、全体を構成する小さなサービスを並行して開発できるため、開発期間を圧縮することが可能です。開発チームも少人数であることが多く、進捗状況の把握がしやすいのもメリットです。
マイクロサービスは、構成するちいさなサービスごとにデプロイでき、ほかの機能を停止させる必要がありません。
このため、デプロイが容易で、一日に複数回のデプロイも可能です。
マイクロサービスを構成する複数の小さなサービス同士で、類似の機能があった場合、一からコードを記述しなくても、ほかのサービスで利用したコードをそのまま利用したり、それを元に改編したりすることができます。
これを実現するには、開発チーム同士でのコミュニケーションが重要になります。
マイクロサービスは、小さな複数のサービスから構成されているため、いずれかのサービスで障害が起きた場合は、分離することで影響を限定的にすることが可能です。
このため、障害が発生しても、ソフトウェアそのものは稼働させ続けることができます。
上記のようにメリットの多いマイクロサービスですが、利用の際は以下の点に注意するべきです。
マイクロサービスでは、一つの大きなサービスを構成する複数の小さなサービスごとに、異なる技術を採用することもできます。これ自体はメリットなのですが、これらを含むサービス全体を設計したり制御したりするためには、幅広い知識と高度な技術力が求められます。
システムの分割と再構成の概念の理解や、分散システムの設計・開発に関する知識、サービス間の通信に関する知識などが必要になります。
マイクロサービスは、全体のサービスを構成する小さなサービスごとに使用するデータストアも分割し、それぞれでデータを管理します。そのため、複数のマイクロサービスにまたがって処理を行う場合、異なるデータ形式である可能性があり、データの整合性を取る必要があります。
また、機能ごとに同期せずにデータ処理を行うこともあります。
このため、サービス全体でデータの一貫性が担保しづらくなります。
マイクロサービスを構成する複数の小さなサービス間で、どのように影響しているのか、その依存関係が複雑になるため、統合テストでエラーが出た際、どの機能が原因なのかを突き止める工程の難易度が上がります。
各サービスのドキュメントを充実させ、各サービスの依存関係を明確に定義するなどの工夫が必要です。
統合テストフレームワークを利用することもできます。
「幅広い知識と高度な技術力が必要」でお伝えしたように、マイクロサービスの開発は難易度が高いものです。このため、開発のための高スキルな人材確保のためにコストがかかります。
また、マイクロサービスは小さな複数のサービスで構成されていることから、リリース後の管理運用も、個々のサービスでも行う必要があります。このため、運用コストもかさむ可能性が高いです。
マイクロサービスは、ビジネス環境の変化スピードが激しく、複雑で高度な大規模システムが求められる現代において、注目されているソフトウェア開発手法の一つです。
柔軟性や拡張性、可用性の高さ、障害への強さなどのメリットがある一方で、開発や運用に高度なスキルを持った人材が必要で、開発・運用コストもかさむ傾向があります。
従来のモノリシックアーキテクチャと、マイクロアーキテクチャ、どちらが適した開発であるかを見極め、マイクロサービスのメリットを享受しましょう。
※ 本文に掲載されている会社名・団体名および製品名は各社または団体等の商標または登録商標です。弊社は、情報サービスのプロフェッショナルとして、システムの企画・コンサルティングから開発、稼働後の運用・保守、評価までの一貫したサービスと公共、金融、産業分野などお客様のビジネスを支える専門性の高いソリューションをご提供しています。お気軽にご相談ください。