マイクロサービスアーキテクチャを利用すると、アプリケーション開発がスピーディかつ低コストで行えます。また、複雑な開発や規模の大きな開発にも適しているため、マイクロサービスアーキテクチャを導入する企業が世界中で増加しています。
本記事では、マイクロサービスアーキテクチャとは何か、マイクロサービスアーキテクチャを利用するメリットやデメリットについて解説します。
マイクロサービスアーキテクチャとは?
マイクロサービスアーキテクチャ(Microservices Architecture)とは、開発環境やデータベースを細分化したアプリケーション開発手法です。それぞれのメンバーが、異なる環境やプログラミング言語で開発し、最終的にそれぞれの開発内容を統合して1つのアプリケーションやシステムを作りあげます。単にマイクロサービスと呼ばれることもあります。
以前は、1つの環境でシステム開発を進める「モノリシック」という方法が主流でした。モノリシック(monolithic)は「一枚岩のような」という意味を持ち、開発者全員が単一の開発環境やデータベースを利用していました。これにより、優れたシステムやアプリケーションが多数誕生したのも事実です。
しかしながら昨今、モノリシックは様々な壁に直面しています。例えば、モノリシックでは1つのエラーでシステム全体が影響を受けてしまい、修正に多くのコスト(時間や人件費)が必要になることがあります。また、変化の激しいVUCA時代に突入し、顧客からの要求が日々変化するようになり、モノリシック型の開発環境では対応に時間がかかりすぎるという課題も指摘されるようになりました。
そこで注目を集めたのがマイクロサービスアーキテクチャです。マイクロサービスアーキテクチャは、複数人が同時並行で開発を進められます。また、問題が生じた際には関連する箇所を修正するだけで解決可能です。
図:モノリスとマイクロサービスの比較
世界はモノリシックからマイクロサービスへ
日本ではまだマイクロサービスを利用している企業は限定的ですが、世界ではモノリシックサービスからマイクロサービスへと変わりつつあります。例えば、日本でも人気の動画ストリーミングサービス「Netflix」は、モノリシックからマイクロサービスへ移行することで成功を収めた企業として有名です。膨大な情報をマイクロサービスで細分化して管理することで、1日に何千回も発生するデプロイや顧客からの要望に迅速に対応しています。
Fortune Business Insightsの調査によれば、世界のマイクロサービスクラウドの評価額は2022年に12億9千万ドル、そして2030年までに60億4千万ドルまで成長すると見込まれています。
マイクロサービスアーキテクチャのメリット
マイクロサービスアーキテクチャを利用するメリットを以下にまとめました。それぞれについて詳しく説明します。
- サービスをスピーディに提供できる
- 拡張性が高い
- 大規模なエラーが抑制できる
- プログラミング言語の自由度が高い
- 市場の要求に応じて柔軟に対応できる
- 新規機能へのアップグレードが容易
- コスト削減につながる
- セキュリティ対策がしやすい
- アウトソーシングを活用しやすくなる
- 優秀な人材を確保しやすくなる
サービスをスピーディに提供できる
モノリシックアーキテクチャーでは、1つの開発環境を共有し順番に開発を進めていく必要があります。自身に割り当てられた作業も、その他の作業が終わっていないという理由で、取りかかれないことがありました。
一方マイクロサービスでは、各サービスが独立しているため、好きなタイミングで作業に取り組むことが可能です。また、複数人が同時に作業できるため、アプリケーションやシステムをスピーディに提供したい事業者に適しています。
拡張性が高い
各マイクロサービスが独立しているため、サービスの追加や削除、更新、拡張などが容易に実施できます。アップデートや市場に合わせた修正を頻繁に行いたい企業にとって大きなメリットといえます。
大規模なエラーが抑制できる
モノリシックアーキテクチャーでは、1つのエラーが原因でシステム全体が崩壊する可能性があります。一方マイクロサービスでは、各サービスが独立しているため、他のサービスに影響を与えることがまずありません。これにより、1つのエラーがシステム全体に影響を及ぼすことを抑制できます。
プログラミング言語の自由度が高い
モノリシックアーキテクチャーの場合、単一の環境によって開発を行うため、場合によっては不慣れなスキルセットやテクノロジーでの対応が必要になります。その結果、開発に時間がかかるとともに、クオリティにも影響を及ぼします。
一方マイクロサービスでは、各サービスでプログラミング言語やテクノロジーを選べます。開発者が得意なスキルセットを選べるため、高いクオリティのアプリケーションをスピーディに開発できるとともに、不慣れなプログラミング言語でエラーを出してしまうような事故も防ぐことができます。
市場の要求に柔軟に対応できる
システムやアプリケーションを開発している最中に、市場の状況が変わり、急な変更を迫られることもあるでしょう。モノリシックの場合には、修正箇所がシステム全体に影響し、開発が大きく停滞してしまうことがありますが、マイクロサービスの場合、関連する箇所のみの修正で、その他のマイクロサービスには影響を与えないため、手戻りを最小限に食い止めることができます。
新規機能へのアップグレードが容易
モノリシックな環境では、一度構築したシステムやアプリケーションをアップグレードするのに多くのコストを費やす必要があるため、企画や実行に多大な労力が必要になります。一方マイクロサービスでは、必要な箇所のみのアップグレードで完了するため、開発の負担が圧倒的に小さくなります。
コスト削減につながる
マイクロサービスでは、改修での開発工数やテスト工数を削減できるため、コスト削減につながります。サービスのアップデートやエラー修正にかかる時間も削減できるため、保守・運用にかかるコストを大幅に削減できるのも魅力です。
セキュリティ対策がしやすい
モノリシックな環境下で何らかのセキュリティ問題が発生した場合、開発環境上にあるすべての情報が漏洩する可能性があります。一方マイクロサービスの場合には、各サービスごとに情報が分断されているため、重要な情報がまとまったかたちで漏洩するのを防げます。機密情報を扱う箇所に強固なセキュリティ対策を施しておけば、大規模な情報漏洩のリスクを削減できます。サービス間の連携では適切なAPIを使用すれば、より安心して利用できるでしょう。
アウトソーシングを活用しやすくなる
昨今、開発業務の一部をアウトソースする企業が増えています。モノリシックな環境では、組織の知的財産の共有が懸念点としてありましたが、マイクロサービスであれば、必要なサービスの環境のみを共有できるため、情報漏洩の不安を抱えずに協力体制を構築できます。
優秀な人材を確保しやすくなる
マイクロサービスアーキテクチャは、開発者にとっても魅力的なプラットフォームです。プログラミング言語の自由度が高いことで、自身の得意なプログラミング言語やテクノロジーを最大限に活用して貢献できるためです。日本ではまだマイクロサービスを導入している企業が少ないのが現状ですが、今後マイクロサービス環境に興味を持ち、アプローチしてくる開発者が増えるでしょう。
マイクロサービスアーキテクチャのデメリット
一方で、マイクロサービスアーキテクチャには以下のようなデメリットもあります。
- 初期費用(導入コスト)が高くなる
- 熟練者が求められる
- インターフェイス制御が難しい
- エラーの特定や結合テストが複雑になる
初期費用(導入コスト)が高くなる
マイクロサービスは長期的に見た場合にはコストカットに効果的ですが、セキュリティやメンテナンスサポートを備えたホスティングインフラストラクチャが必要になるため、初期費用はモノリシックと比べて高くなる傾向にあります。
熟練者が求められる
マイクロサービスは様々なパーツ開発を同時並行でマネジメントしたり、出来上がったサービスを適切に組み合わせたりするスキルが必要です。そのため、マイクロサービスの活用に精通した熟練者が1名以上必要です。
インターフェイス制御が難しい
マイクロサービスの接点、つまりインターフェイスの制御が複雑になり、ときにマイクロサービスを利用する企業の悩みの種になります。各サービスには独自のAPIがあるため、大規模なアプリケーションを開発する際には大量のAPIを同時に管理する必要があります。
エラーの特定や結合テストが複雑になる
マイクロサービスでは、複数の開発が同時に行われるのに加え、サービスごとに異なる環境やコーディング規約で開発が行われているため、エラーの特定や修正に時間がかかる場合があります。
また、複数のサービス間で実施する結合テストは、各サービスのインターフェース設定を事前に行う必要があるため、より複雑で、時間がかかる傾向にあります。
サービス指向アーキテクチャ(Service-oriented architecture)とマイクロサービスの違い
クラウドコンピューティングに携わっている方なら、サービス指向アーキテクチャ(SOA)とマイクロサービスの議論を耳にしたことがあるかもしれません。どちらも作業しやすいように小さなユニットに分割すること、またアジャイル開発のためのクラウドコンピューティングを必要とすることなど、類似点もたくさんあります。
しかし、SOAは「できる限り共通性を持たせた上で細分化」するのに対し、マイクロサービスは「共通性よりも独立性を尊重している」という大きな違いがあります。例えばSOAでは、チーム内でできる限りリソースやコードを統一しようと努めます。一方でマイクロサービスは、それぞれの担当者が自分の得意なスキルセットを用いて開発することに重点を置きます。
大規模なシステム開発会社が社内のリソースで大規模開発を行う際などにはSOAが優先されます。一方で、アウトソーシングや他社との連携を利用するなど、多様なヒストリーを持つ開発者が共同で開発を行う場合にはマイクロサービスが好まれます。
考え方は非常によく似ていますが、開発に関する手法やコンセプトの点で違いがあるため、実施前にどちらが最適か、よく検討するとよいでしょう。
GitLabでマイクロサービスを利用する
マイクロサービスアーキテクチャは、各サービスを必要に応じて組み合わせる開発手法により、開発会社が抱える様々な悩みを解決します。GitLabは、マイクロサービスアーキテクチャにも対応していますので、マイクロサービス開発で使えるプラットフォームをお探しの方はぜひ検討してみてください。
監修:伊藤 俊廷 @toshitakaito (GitLab合同会社 ソリューションアーキテクト本部 スタッフソリューションアーキテクト)