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