「マイクロサービスアーキテクチャ」とは、アプリを機能単位に分割して開発する手法です。アジャイル開発などの新しい開発文化の普及が進む現況において、非常に重要な技術として扱われています。本記事では、マイクロサービスアーキテクチャの概要やメリット・デメリット、設計する際の注意点などを詳しく解説します。
マイクロサービスアーキテクチャとは?
「マイクロサービスアーキテクチャ」とは、アプリを機能単位で独立して開発し、それらをパズルのように組み合わせて、ひとつのシステムとして構築する手法です。「マイクロサービス」とは、独立して開発されたコンポーネント(構成要素)のこと、言わばパズルのピースに該当します。
従来の開発環境では、「一丸となる」や「ひとつにまとまる」を意味する、「モノリシック」なアーキテクチャが使われていました。つまり、個々の機能を分離せずに、ひとつの斉一的なシステムとして開発する手法です。
それに対して、マイクロサービスはそれぞれ独立したプロセスとして動作します。主に、ネットワークを経由して相互に通信し、所定のタスクを実行する仕組みです。したがって、それぞれのマイクロサービスは、アプリ全体、あるいはその他のマイクロサービスへの依存関係を持ちません。例えば、あるアプリで使用したマイクロサービスを、他のアプリに使い回すことさえ可能です。
これらの特性により、それぞれのマイクロサービスは独立して、デプロイやアップロードを行えます。アップロードの際に、何らかの不具合が発生しても、基本的には追加したマイクロサービスを切り離して、問題の特定や解決ができるので、障害対応の面でも優れている点が特徴です。
昨今では、短期サイクルにおいて、開発とリリースのサイクルを繰り返す手法である「アジャイル開発」が主流になりつつあります。機能単位での追加実装が可能なマイクロサービスは、こうしたアジャイル開発を進められる、重要な基幹技術のひとつです。
マイクロサービスで使われている技術
マイクロサービスアーキテクチャは、「API」や「コンテナ」などの技術に支えられて成立しています。以下では、これらの技術の特徴やマイクロサービスとの関係性について解説します。
API
APIとは、「Application Programming Interface」の略称であり、簡単に言えば、アプリ間でのデータ通信を円滑化する技術です。したがって、独立的にそれぞれの要素が構築された、複数のマイクロサービス(ソフトウェアコンポーネント)間のデータ通信をサポートし、ひとつのシステムとして連携およびつなぎ合わせる役割を担います。
コンテナ
コンテナとは、アプリの実行に必要なバイナリやライブラリ、構成ファイルなどの依存関係を備えた、独立的な実行環境を提供する仮想化技術です。それぞれのマイクロサービスをデプロイするための環境として、サーバー内を整理するコンテナ技術が活用されます。「仮想マシン(VM)」を使って、数多くのマイクロサービスのデプロイを行うと、メモリの圧迫などの問題が発生しかねません。一方で、コンテナはホストするサーバーのOSとリソースを直接共有するため、仮想マシンよりも軽量なメモリで高速に起動し、効率的なサービスの開発や管理が可能です。
マイクロサービスアーキテクチャのメリットとデメリット
続いては、アプリ開発において、マイクロサービスアーキテクチャを活用するメリットとデメリットを解説します。
マイクロサービスアーキテクチャのメリット
最大のメリットは、チームがそれぞれのマイクロサービスを個別に開発できる点です。マイクロサービスは、APIと通信プロトコルを使用して相互に連携しますが、それ以外の方法で相互に依存することはありません。この特性によって、開発チームはサービスごとに異なるプログラミング言語やライブラリ、フレームワークなどを使い分けて、自由に開発およびデプロイを行えます。
また、マイクロサービスで構築されたアプリは、必要に応じて柔軟なスケーリングが可能な点も魅力です。これにより、アプリの基幹部分から順番にリリースするので、市場投入までの時間の短縮に期待できます。つまり、事業全体のアジリティの向上にも寄与するでしょう。
さらに、機能ごとに分離されたサービスは、障害からの回復力にも優れています。それぞれの機能に分離されている分、それぞれのマイクロサービスはわりかし単純な構造であることが多く、実装後に問題が発生しても個別に切り離せば問題の原因をすぐに特定し、解決できる点もメリットのひとつです。
マイクロサービスアーキテクチャのデメリット
デメリットとしては、アプリ全体のメモリ使用量が増える傾向にあることです。これは、それぞれのサービスが個別のプロセスにおいて、動作することに原因があると考えられます。メッセージの送受信には、一定のオーバーヘッドが伴うため、マイクロサービス間の通信は、パフォーマンスの低下を意味する可能性を否めません。
また、サービス間のデータの送受信はネットワーク経由で行われるため、一定のオーバーヘッドが発生し、遅延などのパフォーマンス低下が懸念される点もデメリットのひとつです。サービス間の通信を担うAPIに関しても、原則として公開APIを通じる場合のみ行うため、その仕様はあらかじめ十分に検討しておかなければなりません。
さらに、多数のコンポーネントによって構築されるため、アプリ全体の構造がややこしく、サービスの監視やログの管理が煩雑になるなど、運用上の欠点もあります。
マイクロサービスアーキテクチャ設計時の注意点
マイクロサービスアーキテクチャを設計する際、事前に注意点をチェックしておきましょう。
まず、開発チームによる新しいアーキテクチャへの適応性が重要です。マイクロサービスは、従来のモノリシックなアーキテクチャと同様の感覚における開発は不可能でしょう。
例えば、サービスごとに言語や開発ツールを自由に変えられるメリットも、画一的な開発に慣れている人にとっては、戸惑ってしまうかもしれません。スケーラブルな開発ができるメリットも、「開発に明確な終わりが見えない」などの心的なストレスをもたらすおそれがあります。要するに、マイクロサービスを使いこなすには、チームにアジャイル的な新しい開発思想を浸透させることが必要です。
また、機能面では複数のサービス間におけるトランザクションが難しい点にも注意しなければなりません。これは、それぞれのマイクロサービスが別々のデータベースを所有し、マイクロサービス間での直接的なアクセスができない事情によります。
さらに、それぞれのマイクロサービスをどのように分割するかについても、十分な検討が欠かせません。機能を分割しすぎた場合、データ処理の容量や管理の負担が大きくなってしまいます。逆に機能を大きくまとめすぎた場合は、マイクロサービスを利用するメリットが損なわれてしまうでしょう。したがって、マイクロサービスアーキテクチャを設計する際には、優れたバランス感覚が重要なポイントです。
まとめ
マイクロサービスアーキテクチャとは、アプリを機能ごとに分割して、個別に開発する設計手法です。これを活用することで、開発チームはアジャイルな開発を実現できます。
マイクロサービスの設計にあたっては、「Microsoft Dynamics 365」の活用がおすすめです。 Dynamics 365には、アプリを簡単に作成できる「Power Apps」をはじめ、開発現場をサポートする多くのツールを備えています。マイクロサービスアーキテクチャを活用する際は、導入を検討してみてください。