マイクロサービスアーキテクチャとは
近年、システム開発・運用において「マイクロサービス」というアーキテクチャを利用するプロジェクトが増えています。「マイクロサービスアーキテクチャ」とはどういう意味かご存知でしょうか?ここでは、マイクロサービスアーキテクチャの理解を深めるために、マイクロサービスアーキテクチャの詳細やモノリシックとの違いについて詳しく解説します。
サービスを構成する要素を小さな機能に分割して実装する手法
マイクロサービスアーキテクチャとは、サービスを構成している要素を「マイクロサービス」と呼ばれる小さな独立した機能に分割して実装する手法のことで、システム開発における技法の1つです。
マイクロサービスは、ソフトウェアエンジニアであるマーチン・ファウラー氏によって書かれた「Microservices」という文書が発表されてから、1種の流行語のような言葉として使われるようになりました。
モノリシックとの違い
マイクロサービスの対比として使われるのが、「モノリシック(モノリス)」という言葉です。モノリスとは、日本語に訳すと「一枚岩」を意味します。つまり、モノリシックは大きな岩の塊のように、大きな単一の機能によって1つのサービスを実現するアーキテクチャのことです。
もう少し詳しく説明すると、モノリシックは機能ごとにプログラムが分かれており、それらは全て同じOS・マシン内にあります。そのため、他のOS・マシンに分割することはできません。それに対し、マイクロサービスは各機能が別々のOS・マシンに分散しているため、ネットワークを介して相互連携を行っています。
マイクロサービスアーキテクチャの機能分割について
前述の通り、マイクロサービスとは「小さな独立した機能を組み合わせる」ソフトウェアのことです。では、どこまで機能を小さく分割すればマイクロサービスになるのでしょうか。
機能を限りなく小さくすると、マイクロサービスアーキテクチャの利点と欠点が最大化されると言われています。限りなく小さくすると、相互依存関係に関わる利点が増加する一方で、可動部が増えることによって複雑さも増加してしまいます。この両者のバランスを追究していくことが重要と言えるでしょう。
言い換えれば、マイクロサービスアーキテクチャが目標とするのは、複雑さを考慮しつつできるだけ細かくサービスを分割することです。
結論、どの程度まで細かく機能を分割するべきかについては、一概に「正しい」と言えるものが存在しません。よって、「細かくサービスを分割し、それぞれが自律する」という開発基準で取り組むことが、マイクロサービスアーキテクチャの方法だと言えるでしょう。
また、マイクロサービスアーキテクチャは「どのようにサービスを作るか」という方法論や、「どのような組織で作るか」という組織論の側面を持っています。
マイクロサービスアーキテクチャのメリット
ここからは、マイクロサービスアーキテクチャを採用する上でのメリットについて詳しく解説します。
新しい技術を簡単に利用できる
マイクロサービスは新しい技術を簡単に利用できる点が1つのメリットと言えるでしょう。マイクロサービスでは、それぞれのサービスはネットワークを介して公開したインターフェースを読み込むだけでいいため、依存関係などの制約はありません。そのため、インターフェース仕様の決まりを遵守している限り、さまざまなサービスに対して、異なる技術を採用することができます。
例えば、新しいシステムを作成する場合、Aという技術が適している部分、Bという技術が適している部分があります。技術というのは開発言語のこととしましょう。モノリシックサービスの場合、AもしくはBのどちらか一方の技術を選択する必要があります。つまり、技術を統一する必要があることになるでしょう。
一方、新しく作成するサービスに対して、マイクロサービスではどの技術を利用しているかを気にする必要なく、最適な技術を選択することができます。
システム開発のスケジュール短縮化
マイクロサービスを採用することによって、システムを開発するスケジュールの短縮が期待できるでしょう。そのため、新しい機能を取り入れることや新しい技術を採用することが比較的容易にできます。
障害発生時のリスクを最小限にできる
マイクロサービスは新しくシステム開発をする場合だけでなく、システムの保守・運用する際に新しい機能を追加することが容易です。システム同士の関係が薄く独自性を保っているため、障害発生時に影響を受けにくい、あるいはリスクを最小限に止めることができます。障害対応がしやすいのもマイクロサービスアーキテクチャのメリットの1つです。
マイクロサービスのデメリット
一方、マイクロサービスアーキテクチャにもデメリットはあります。向き不向きをしっかりと把握することで、どのように扱えばいいのかが理解できます。以下に、マイクロサービスアーキテクチャを採用する上でのデメリットを列挙するので、参考にしてください。
大きな負荷が発生しやすい
マイクロサービスアーキテクチャでは、機能を小さく分割していくため、コストや効率性などに大きな負荷が発生しやすいことがデメリットと言えるでしょう。例えば、マイクロサービスはそれぞれ別のプロセスで実行するため、メモリの使用量は増加する傾向があります。
さらに、ネットワークを通じてデータや通信をやり取りする際に、多くの時間を要する場合もあります。そのためシステムのパフォーマンスが劣化する可能性があります。
APIの仕様を検討する必要がある
APIとは、ソフトウェアそれぞれの機能が互いにやりとりするために使用するインターフェースの仕様のことです。マイクロサービス同士のやり取りは一般的に公開APIを用いて行うため、APIの仕様について事前に確認し、検討しておく必要があります。API呼び出しが失敗してしまった場合にどう対処するのかなど、モノリシックと比較すると難易度は高めです。
トランザクションを実現させることが難しい
データベース設計時において、複数のマイクロサービスに関連するトランザクションを実現させることが難しい点です。一般的に、マイクロサービスアーキテクチャでは、マイクロサービスごとに独自のデータベースをもっています。そのため、別のマイクロサービスのもつデータベースに直接的にアクセスすることができないように設計していることが多いです。
以上より、マイクロサービスアーキテクチャを利用する場合、「機能をどのように分割するか」ということが重要です。機能を細かく分割しすぎてしまうと、コストや効率性に対する負荷は大きくなってしまいます。
マイクロサービスアーキテクチャを採用する上での4つの課題
ここまでに、マイクロサービスアーキテクチャにはメリットとデメリットがあることを説明しました。ここでは、マイクロサービスアーキテクチャを採用する上での課題について4点紹介します。
1.運用を担当する技術者への負担
マイクロサービスアーキテクチャでは、機能を細かく分割しすぎてしまうと、コストや効率性に対する負荷が大きくなってしまいます。サービスを運用するにあたっての課題として、監視する対象が増加してしまうことにより、運用業務である死活監視やログ管理を行うことが複雑になるという問題点があります。
そのため、技術者への負担が増加してしまう傾向があるでしょう。マイクロサービスアーキテクチャを採用する場合は、運用を担当する技術者への配慮を考慮した設計や検討が重要です。
2.中央機関の必要性
マイクロサービスアーキテクチャでは、1つのシステムを複数のサービスで構成することになります。そこで、1つ1つのサービスの情報からシステム全体の状況を把握する監視体制と障害対応を徹底することが重要です。そのため開発方法だけでなく、開発を実施する上での中央機関の体制をどうするかについての考慮も欠かせません。
3.マイクロサービスに関する専門的知識やスキルをもっている技術者が少ない
マイクロサービスアーキテクチャは最先端の開発手法のため、現状としてスキルのある経験者が少ない点が懸念されています。
マイクロサービスアーキテクチャを採用する規模を拡大するためには、今後多くの技術者が必要です。海外では浸透しているマイクロサービスの手法ですが、日本ではまだまだ発展途上にあります。今後マイクロサービスの導入を進めるためには、専門的な知識やスキルを身につけた技術者を増やすことが重要でしょう。
さらに、セキュリティを担保するための専門的な知識やスキルも必要です。マイクロサービスは、機能を細かく分割していくため、モノリシックサービスと比較すると、サービスのセキュリティが脆弱になってしまう可能性があります。そのため、マイクロサービス全体のセキュリティ性を担保するためにも、セキュリティに関する専門的な知識やスキルを持った技術者も必要です。
4.チーム間でのコミュニケーションが難しくなる
マイクロサービスアーキテクチャを採用する場合、サービスによって開発しているチームが異なります。サービス数の増加に伴い、開発するチームの数も増加することが多いため、チーム同士の連携が難しくなるでしょう。チーム同士のコミュニケーションを円滑にするために、各チームの間を横断し、統一したコミュニケーションルールを作成することが重要です。
以上のように、マイクロサービスアーキテクチャは最先端の開発手法であり、発展途上のため、マイクロサービスアーキテクチャを採用する上で、「専門的な技術者が少ない」、「ノウハウが確立されていない」などの課題があることが言えるでしょう。
最先端の開発手法マイクロサービスアーキテクチャの導入は慎重に
マイクロサービスアーキテクチャとは、サービスを構成している要素を小さな機能に分割して実装する手法のことです。どこまで機能を小さく分割すればマイクロサービスになるかという議論がありますが、「これが正しい」というのは存在しないため、開発するシステムに対して、メリットとデメリットを考慮することが大切です。
マイクロサービスアーキテクチャの開発手法は海外では浸透し始めていますが、日本ではまだまだ発展途上であるため、課題が多く存在します。IT技術の発展の1つの鍵であるマイクロサービスですが、導入については今後も慎重な検討が必要と言えるでしょう。
編集部オススメコンテンツ
アンドエンジニアへの取材依頼、情報提供などはこちらから