IT技術の変化は加速し続け、モバイル、ソーシャル、IoT、AIなどデジタル化を中心にビジネスシーンは劇的に変わってきています。これまでの日本流のシステム開発にマッチした開発手法であるウォーターフォールから時代の変化のスピードにマッチできるようにアジャイル型の開発が急増しています。
そんな激動のビジネスシーンで、「マイクロサービス」という言葉が一種のトレンドとなっています。そもそもマイクロサービスとは何なのでしょうか?なぜこんなに注目されているのでしょうか?
この記事では、マイクロサービスの概要をはじめ、導入に必要な技術やメリット、デメリットまで解説します。
Contents
マイクロサービスとは何か?
マイクロサービスとはシステム開発の手法の一つです。「小さいサービス」という名の通り、規模の小さいサービスを多数組み合わせることで一つのサービスを構築する手法を指します。
例えば、オンラインショッピングの業務を処理するソフトウェアの場合、そのソフトウェアは複数の機能を備えています。決済処理、顧客の管理、商品在庫の管理など、様々な機能が組み合わさって一つのサービスとして成立しています。
マイクロサービスの場合、この個々の機能のそれぞれを別々に作り、後でそれらを連携させます。そのため、機能が少ない小規模なシステムよりも、複数の機能から構成される大きなシステムの方が、マイクロサービスに向いていると言えます。
どこまで分割すればマイクロサービスといえるのか?
それでは、サービスをどこまで分割して開発していれば、それを「マイクロサービス」と呼んで良いのでしょうか?その明確な基準はないものの、各サービスが独立していることが最低限の条件となります。サービス間の連携を最小限にとどめることが、マイクロサービスの大きなメリットにつながっています。
これまでの開発手法との違い
マイクロサービスはこれまでの開発手法とどのように違うのでしょうか?これまで主流だった開発手法は「モノリシックサービス」と言われています。「モノリシック」とは「一枚岩の」といった意味を持ち、部分毎に分割せずに一つの大きなシステムを構築する仕組みを指しています。
全体が一枚岩のシステムとして成り立っているため、障害発生時にすべてのサービスが影響を受けたり、部分毎の改修が難しかったりといったデメリットがあります。
なぜ注目されているのか?
マイクロサービスが注目されているのは、やはり従来のモノリシックなサービスにはなかった柔軟さにあると言えるでしょう。IT業界の技術の進歩は目覚ましく、日々新しい技術が続々と現れ、より便利で効率的なシステムの開発が求められています。そのため、ユーザーのニーズやトレンドに合わせた改修やシステムの柔軟な運用に対応できるマイクロサービスが注目されているのです。
導入例
マイクロサービスは、近年注目されている開発手法です。マイクロサービスを利用している代表的なサービスをご紹介します。
Amazon
Amazonはまだマイクロサービスという言葉が生まれる前から、モノリシックなサービスの限界を感じ、マイクロサービスへと移行しています。各サービスを、HTTPSを使ったAPIで連携させるシステムを構築しました。
COOKPAD
COOKPADも、モノリシックなシステム構成からマイクロサービスへの転換を図りました。複数のサービスから情報を取得して、一つのページとして表示する、という仕組みでサービスを提供していたCOOKPADにとっては、マイクロサービスの仕組みがピタリと当てはまったようです。
マイクロサービスに必要な技術
マイクロサービスの概要がお分かりいただけたかと思います。とは言えマイクロサービスはまだ新しい技術で、運用に必要な知識や技術も数多く存在します。ここでは、マイクロサービスに必須の技術や開発手法についてご紹介します。
API
マイクロサービスは、各サービスの独立性を確保しています。しかし一つのシステムとして各サービス間で連携を行う必要もあります。そこで、サービス間の連携に用いられるのが「API」という技術です。
「API」とは「Application Programming Interface」の略称で、ソフトウェアやアプリケーション、サービス同士をつなぐインターフェースです。他のサービスの機能を呼び出して使うことができ、サービス間の連携が求められるマイクロサービスにとっては必須の技術となります。
コンテナ
「コンテナ」とは仮想化技術の一種です。OS上に各アプリケーションのための専用区画を作り、その中でそれぞれのサービスが稼働します。コンテナ毎に改修が可能となるため、各サービスの独立性が必要なマイクロサービスと相性のいい技術と言えます。
アジャイル開発
「アジャイル開発」は、開発手法の一種です。「アジャイル」とは、「素早い」「俊敏な」といった意味で、短い開発期間で小さい単位での開発とテストを繰り返し、最終的に一つのサービスへと仕上げていく開発の仕方を指します。マクロサービスは小さいサービスごとに開発や改修を行うため、このアジャイル開発との相性が良いとされています。
対して、モノリシックなサービスには「ウォーターフォール」モデルの開発手法が採用されてきました。企画→設計→実装→テストといった開発工程を、上から順番に進めていく手法です。この手法には細かい変更に対応しにくいというデメリットがあり、マイクロサービスには向いていません。逆に言うと、開発後の改修を小まめに行わないようなシステムには、マイクロサービスはあまり向いていないということでもあります。
DevOps
「DevOps」とは、開発(Development)と運用(Operations)とが密に連携し、柔軟な対応を目指す開発手法です。
マイクロサービスは、細かい変更に対応することができる開発手法です。そのため、システムの運用を行う中で、改善点を敏感に察知して即座に改修することができるような体制があれば、より効率的な運用が可能となります。
マイクロサービスのメリット
それでは、マイクロサービスを導入するメリットとはなんなのでしょうか?名だたる大企業が導入していることからも分かる通り、マイクロサービスには大きなメリットがいくつも存在します。
障害発生時に迅速な対応が可能
システムに障害が起こった場合、モノリシックなサービスの場合にはシステム全体に影響が及び、障害発生箇所の特定や復旧にも時間がかかります。対してマイクロサービスの場合、個々のサービスが独立しているため影響範囲が小さく、原因の特定が比較的容易になるというメリットがあります。
サービスに合わせた技術選択が可能
モノリシックなサービスの場合、基本的には全てを同じ言語で開発することになります。しかし言語によって、得意とする処理には違いがあります。マイクロサービスでは、サービス毎に適した言語を用いて開発することができるため、より柔軟かつ効率的な開発が可能になります。また、同じ理由で新しい技術を積極的に採用することも可能なため、トレンドに即したシステムを構築していくことが可能です。
リソースの有効活用
システムの中でも、サービスによって必要なリソースには差があります。マイクロサービスでは、個々のサービス毎にリソースを割り当てることができます。一部分にリソースが不足していればその部分だけの増強を図ればよいため、コストを抑えた柔軟なリソース管理が可能です。
機能の再利用ができる
サービス毎に開発を行うマイクロサービスの場合、各機能を切り離して再利用することが可能です。例えば、先ほどのショッピングサイトの処理を行うソフトウェアの場合、「顧客管理のサービスだけ別のシステムで再利用しよう」といったこともできるのです。
マイクロサービスのデメリットと注意点
良いことばかりに見えるマイクロサービスですが、デメリットもあります。導入を検討する際には、これらのデメリットにも気を配る必要があります。
設計が複雑になる
複数のサービスを連携させるため、全体の設計が複雑になりやすい、というデメリットがあります。サービスの分割の粒度や連携方法の検討など、高度な専門知識が必要となります。その分、モノリシックなサービスよりも設計の難易度が高く、導入にコストがかかる可能性があります。
データの一貫性を保証するのが難しい
マイクロサービスの場合にはデータストアもサービス毎に分かれている場合が多く、さらに、複数のサービスが同期せずにデータを処理する場合もあります。そのため、システム全体としてのデータの一貫性を保つことが難しいというデメリットがあります。各サービスの独立性を保ったままデータの一貫性を保証するのは難易度が高く、導入の際には、そのシステムがどのようなデータを用いるのか、一貫性をどのような観点で保証しなければならないのか、といった点に気を配る必要があります。
まとめ
マイクロサービスには多くのメリットがあり、大規模なシステムに向いていることから大企業で導入されるなど、近年大いに注目されてきました。しかし、デメリットとしてご紹介したように、設計の難易度の高さなど、高度な専門知識が必要となるため、まだ導入に至っていない企業も多くあります。
確かなメリットも見えていて、導入を必要とするサービスもある中、ノウハウが不足しているということで実践できない現状は非常に歯がゆく感じてしまいますが、この時代の転換期に求められるITエンジニアというのは、どういう人なのか、どれほどの需要があるのかを垣間見える状況とも言えます。
これからのITエンジニアに求めら得るのは劇的な変化をしているビジネスシーンに対応できるよう、最新の技術を学び、習得した技術を迅速に実践することができる柔軟さが必要とされています。
もし、転職することを検討される場合は、現在の求人内容からだけ判断するのではなく、将来性や求められている人物像などにもフォーカスをあて、10年後、20年後も生き残れる企業なのかを見定めることが貴方のキャリアパスを成熟させてくれるでしょう。
マイクロサービスの導入には慎重かつ綿密な検討が求められます。そのため、導入を考えている場合には、導入実績のあるベンダーに相談するのもよい手段かもしれません。