- IT・トレンド記事
マイクロサービスがアプリ開発の主流になった理由とは
こんにちは、クラウドエース編集部です。
ビジネストレンドの変化が激しい現代、システム構築において「マイクロサービス」というアプローチが採用されることが増えてきています。
この記事では、マイクロサービスの概要やメリット、現在大きな注目を集めている理由、マイクロサービスを実現するための技術などについて紹介していきます。
目次
マイクロサービスとは
マイクロサービスとは、「マイクロサービスアーキテクチャ」の略称で、ソフトウェア開発手法のひとつです。それぞれ個別に開発した小さなサービスや機能を組み合わせて連携・統合することで、1つの大きなアプリケーションを構築するという方法です。
マイクロサービスでのシステム構築には、迅速な開発・実行が可能で、頻繁な機能強化がしやすいというメリットがあります。また、可用性やスケーラビリティにも優れています。
マイクロサービスとモノリシックアーキテクチャの違い
マイクロサービスと対比される開発手法は「モノリシックアーキテクチャ」です。これは従来型の開発手法であり、「モノリス」と呼ばれることもあります。
マイクロサービスが小さな機能を組み合わせて大きなサービスを作り上げるのに対して、モノシリックでは分割されていない、大きな単一の機能でひとつの処理を実行します。
モノリシックで作成されたソフトウェアは、サイズが大きすぎることから、機能拡張を柔軟に行えなかったり、一部分の変更や修正、障害が他の機能に影響を及ぼしやすかったりという問題がありました。
このような課題を解決できる開発方法が、マイクロサービスです。マイクロサービスでは、1つの機能がそれぞれ独立したサービスとして実行されるため、一部分における変更や修正、障害などが他に影響を及ぼすことはありません。また、機能の拡張や追加も柔軟に行うこともできます。
マイクロサービスが注目されている背景
このようなマイクロサービスが、なぜ現在これほどまでに注目を集めているのでしょうか。その理由は、マイクロサービスは、消費の多様化が進み、変化が激しく、予測も不可能な現代のビジネス環境に適した開発手法だからです。
もう少し具体的に言うと、マイクロサービスは「アジャイル開発」「DevOps(デブオプス)」という2つの開発トレンドにマッチしたアーキテクチャであると言えます。
「アジャイル開発」とは、開発途中での仕様変更を前提に、ニーズに応じて適宜変更・更新を繰り返す手法のことです。従来は最初に要件を定義して作り込む「ウォータフォール型」の開発が一般的でしたが、この方法は開発までに時間がかかりやすく、開発途中での変更がしにくいという課題がありました。そのため、迅速な開発が求められる昨今ではアジャイル開発へのトレンド遷移が起きていたのです。
また、従来のウォーターフォール型の開発では、開発チームとオペレーションチームはそれぞれ独立し、各チームが自分たちの役割のみをこなして開発を進めることが一般的でした。
しかし、この方法では、それぞれが自分の仕事のみに責任を持つことになるため、サービスの品質が二の次になってしまいやすいという問題がありました。結果として、開発スピードの向上やユーザーのニーズへの迅速な対応、運用後の適切なメンテナンスなどに上手く対応できないケースも見られました。
このような問題の解決策として現れたのが、「DevOps」です。DevOps は、開発者とオペレーションチームが緊密に連携しながら迅速に開発・テスト・リリースを行う開発手法です。この手法を用いることで、サービス品質を維持しながら迅速な開発を実現できるようになっています。
DevOps においても、アジャイル開発においても、開発スピードや開発の柔軟性の高い品質やメンテナンス性の維持に優れたアーキテクチャが求められます。そして、このような要望に答えられるのがマイクロサービスということです。
マイクロサービスのメリット
続いては、マイクロサービスのメリットについて見てみましょう。
システムリソースを効率的に活用できる
1つ目のメリットは、システムリソースを効率的に活用できることです。
システム運用中に、「複数機能のうち、特定の機能のみのトラフィックが多い」という状況を経験したことがある人もいるでしょう。
モノリシックで作成されたシステムでは、このような状況でサーバーへの負荷が高くなった場合、トラフィックの多い機能は一部であるのにも関わらず、システム全体のスケーリングを行う必要がありました。
しかし、マイクロサービスの場合は、特定の機能のみをスケーリングさせることが可能です。結果として、システムリソースの効率的な利用に繋げられるのです。
システムの安定性を高められる
2つ目は、システムの安定性を高められることです。
モノリシックでは、ある1つの機能のみに生じた障害が、全体のシステムダウンに繋がってしまうリスクがありました。しかし、それぞれの機能が分割されているマイクロサービスでは、障害も分離されます。
システムを構成するコンポーネントの1つで障害が起きたとしても、アプリケーション全体がダウンしてしまうことはないため、安定性を高められます。
機能追加や修正を迅速に反映できる
3つ目は、システムへの新たな機能の追加や修正を迅速に反映できることです。
マイクロサービスでは、それぞれのサービスが独立して動作するため、機能の追加や修正をする際にもコード基盤の変更が必要がありません。
加えて、マイクロサービスの開発では、それぞれのサービスチームが独立して意思決定が行われます。1つのコンポーネントについて個別にテスト、デプロイできるため、機能の追加や変更、修正をスピーディーに反映することが可能です。
特定の技術や言語に縛られない
4つ目は、特定の技術や言語に縛られず、サービスの機能に合わせて最適なものを選択できることです。
マイクロサービスでは、各サービスで使用する技術に制約がありません。必要であれば、サービスごとに異なる技術や言語を選択することができます。
既存のコード規約や制約なく自由に設計できるため、より柔軟かつ効率的な開発が可能になります。また、新しい技術の積極的な採用にも繋がるため、トレンドに合ったシステム構築を実現できるでしょう。
マイクロサービスを実現するための技術
ここからは、マイクロサービスを実現する技術について簡単に見てみましょう。
コンテナ
マイクロサービスを実装する技術はさまざまです。小さな複数のモジュールで作られたサービスを開発できるプラットフォームであれば、どのようなものでも利用できます。
ただし、マイクロサービスを実現・運用しやすくする基盤技術として現在主流であるのは、「コンテナ」です。コンテナとは、個々のアプリケーションが動作する空間を生み出す仮想化技術であり、各サービスの独立性が必要なマイクロサービスと相性が良いと言われています。
REST API
コンテナをベースとしたマイクロサービスでは、各サービス間での連携が「API」という技術を用いて行われます。
API とはソフトウェアやアプリケーション、サービス同士を繋ぐもので、他のサービスの機能を呼び出す役割を果たすものです。マイクロサービスでは、その中でも「REST API」と呼ばれる、Web 標準技術に準拠した API を用いて通信されます。
クラウドサービス
コンテナ・ベースのマイクロサービスを構築する場合は、クラウドサービスの利用が適していると言えるでしょう。クラウドサービスは、リソースやコストの柔軟性が高いというメリットがあることに加え、コンテナのマネージドサービスも利用できるためです。
コンテナを基盤としたマイクロサービスを実際に運用すると、手動でのコンテナ展開が手間に感じられたり、1つのホストで複数のコンテナを実行させる場合、リソースの管理が複雑になるといった問題が出てくることがあります。
クラウドサービスでは、このような問題を解決できる、コンテナ化されたアプリケーションのデプロイ、管理、スケーリングを行うマネージド環境も提供されているのです。代表的な例には AWS が提供する「EKS(Elastic Kubernetes Service)や、Google Cloud が提供する「GKE(Google Kubernetes Engine)」などが挙げられます。
まとめ
ここまで、マイクロサービスの概要や実装に必要な技術などについて紹介してきました。開発期間の短縮や変化への柔軟な対応を可能とするなど、多くのメリットがあるマイクロサービスですが、そのアプローチはさまざまあります。自社のビジネスや実現したいサービスに合った方法を検討してみてください。
比較表
AWS・GCP・Azure 3大クラウドサービス 比較表
解体新書
【クラウドのことがわかる】クラウド導入 解体新書(初級編)
GCPとCAご紹介
GCP(Google Cloud)とクラウドエースのご紹介
導入事例集
GCP(Google Cloud) 導入事例集
この記事を共有する