マイクロサービスは私たちの身近なところで使われています。たとえば、LINEやAmazon、Netflix、メルカリなどは、マイクロサービスによって構築されています。マイクロサービスの導入を検討するためには、事前にマイクロサービスを導入するメリット・デメリット、導入時の留意点について、理解しておかなければなりません。ここでは、社会の変化や顧客ニーズに対応するため求められる「マイクロサービス」について、概念や導入事例、メリット・デメリット、導入の際の留意点などを解説します。
マイクロサービスとは
はじめに、マイクロサービスの概要とモノリシックアーキテクチャとの違い、マイクロサービスの需要が高まっている背景について解説します。
ソフトウェア開発技法の一つ
マイクロサービス(microservices)とは、小規模なサービス同士を組み合わせて連携させることで、一つのアプリケーションやWebサイトを構築する開発技法のことです。マイクロサービスは、アプリケーションを独立したサービスに小さく分割して実装するため、少人数のチームでスピーディーに開発を進められます。さらに、サービスごとに最適な開発基盤を使うことも可能です。
モノリシックアーキテクチャとの違い
近年、マイクロサービスアーキテクチャを利用してサービス開発を行うケースが増えてきましたが、従来は「モノリシックアーキテクチャ」で開発を行うケースが大半でした。モノリシックアーキテクチャとは、複数の機能を単一モジュールとして提供するアプリケーションの構造のことです。モノリシックアーキテクチャで開発する場合、アプリケーションの機能増加によるコードベースの増加・複雑化が大きな課題でした。また、複雑化したアプリケーションはバグも発生しやすく、「複雑な構造であるためテストに時間が掛かってしまう」「デプロイすることでシステム全体に大きな影響を与える可能性がある」といった問題も発生しやすくなります。
マイクロサービスの場合、複雑なアプリケーションを分割してシンプルにすることによって、システム開発・運用のサイクルをより効率よく行えるのが大きなメリットです。
マイクロサービスの需要が高まっている背景
マイクロサービスの需要が高まっている背景には、新型コロナウイルス感染症拡大の影響や、顧客ニーズが多様化していることが挙げられます。
コロナ渦でテレワークやハイブリッドワークなどの新しい働き方を採用する企業が増加し、また店舗での販売からECサイトへの販売に移行する動きも多く見られました。
従来のモノリシックアーキテクチャによる開発では、システム開発に時間が掛かってしまい、さまざまな顧客ニーズに柔軟に対応できないのが大きな課題とされていました。
マイクロサービスであれば、開発作業を効率的に進められ、顧客ニーズに応える期間を短縮できるようになります。多様化する顧客ニーズに対して、柔軟かつスピーディーに対応できるメリットがあるため、マイクロサービスはさまざまな企業で採用されるようになったのです。
マイクロサービスを構築している技術
マイクロサービスを構築する際に使われている技術は「API」と「コンテナ」の二つです。この章では、それぞれの技術の特徴について解説します。
API
API(Application Programming Interface)とは、ソフトウェアの機能を共有する仕組みのことです。クラウド上にマイクロサービスを構築する際には、「REST API」と呼ばれる技術がよく使われています。このREST(REpresentational State Transfer) は「具体的に状態を定義した情報のやり取り」という意味であり、Webシステムの構造がシンプルであることが特徴です。離れた位置にあるサービス同士を連携することで、一つのサービスとして運用できるようになります。
コンテナ
コンテナとは、アプリケーションの専用区画をOS上に作成する仮想化技術のことです。マイクロサービスでは、各プロセスに対してコンテナが用意されて区切られており、プロセス間のやり取りはAPIによって行う仕組みです。たとえば機能を変更したい場合、コンテナ単位で入れ替えを行うことによって迅速に対応できるようになります。
コンテナ技術にはさまざまな種類が存在しますが、「Docker」が主流になっています。Dockerとは、コンテナ型の仮想環境を作成できるDocker社が開発しているプラットフォームです。Linuxのコンテナ技術を活用しており、導入から運用まで手軽に行えるメリットがあります。
マイクロサービスの活用事例
マイクロサービスはその利便性の高さから、さまざまなサービスで活用されています。この章では、マイクロサービスの活用事例を4つご紹介します。
Amazon.com, Inc.
世界的な大企業であるAmazon.comでは、マイクロサービスというワードが普及する以前からマイクロサービスを導入していました。2000年代の初めはモノリシックアーキテクチャを採用していましたが、肥大化・複雑化したシステムをマイクロサービス化しました。各システムを連携させる際には、当時はまだ主流ではなかった「REST API」を使用しています。その結果、独立した各サービスのオーナーシップをデベロッパーチームに割り当てられるようになり、開発のボトルネックをより詳細に把握、効率的に課題を解決できるようになりました。
Netflix合同会社
Netflixのクラウド化は、2008年にデータベースが破損して、3日間会員へのDVDの発送ができなくなったことがきっかけでした。2009年からマイクロサービスへの移行を徐々に開始し、2012年に全プロセスを完了させました。NetflixのAPIゲートウェイは、500以上のマイクロサービスによって管理されるようになります。さらに、毎日20億のAPIエッジリクエストに対応できるようになり、機能変更の期間短縮にも成功しました。
株式会社メルカリ
株式会社メルカリでは、2017年から「マイクロサービスマイグレーションプロジェクト」を実行しました。主要機能である「お客様向けの機能」を中心にマイクロサービスマイグレーションを実施し、さらにプロジェクトを進めながら開発チームの生産性向上も実現しました。
LINE株式会社
LINE株式会社では、主力製品の「LINE」のアプリ開発にマイクロサービスを活用しています。
LINEのアプリは、トークをはじめとして電話、ショップなど多数の機能で構成されており、それぞれ独立したシステムをAPIで連携することで、スピーディーな開発やサービスの品質向上を実現しています。
マイクロサービスのメリット
マイクロサービスを採用することで、企業はさまざまなメリットを得られます。この章では、マイクロサービスの主なメリットについて解説します。
各機能が独立しているため、柔軟な開発が可能になる
全体として大規模なシステムであっても、各サービスは機能単位で独立しているため、スピーディーな開発が可能です。たとえば、ある機能を拡張したい場合、該当のマイクロサービスにのみ変更を加えることですぐに対応できます。マイクロサービスは拡張性が高く、デプロイまでスピーディーに行える点が大きな魅力です。
また、マイクロサービスによってサービスを構築すると、何かトラブルが起こった際の原因特定も容易に行えます。従来のモノリシックアーキテクチャの場合、どこかでトラブルが発生した場合には、全てのシステムを変えなければいけませんでした。マイクロサービスでは、問題のある部分だけを変更することで即座に対応できるのです。
各サービスの負荷を分散できる
マイクロソフトサービスは、それぞれのサービス同士の関係性は薄く、独自性を確保している点が特徴です。そのため、一つのサービスで障害が起きたとしても全体のサービスには大きな影響が出ません。障害が起きた際の影響を最小限に留めることが可能です。
開発期間を短縮できる
マイクロサービスでは、機能単位に分けて小規模な開発を進めていくいため、開発期間を大幅に短縮できます。開発期間を短縮することで、開発チームの人数も抑えられ、コミュニケーションや進捗確認も容易になるでしょう。
顧客の要望にスムーズに応えられる
マイクロサービスでは、顧客の要望に対し、各サービスの開発チームが個々に対応すれば良いため、これまでよりも要望に応えやすくなるメリットがあります。サービスを構築する過程において、顧客の要望やバグなどは必ず発生するものです。マイクロサービスは各サービスで分断されているため、スピーディーに対処できます。
マイクロサービスのデメリット
多くのメリットがあるマイクロサービスですが、デメリットも存在します。この章では、マイクロサービスのデメリットについて解説します。
システムやアプリケーション全体の設計の難易度が上がる
マイクロサービスでは、最初に分割した機能単位は後から変更できないため、システムやアプリケーションを設計する際に慎重に検討する必要があります。さまざまな観点から検討しなければいけない分、設計の難易度は格段に上がるといえるでしょう。
全体のデバッグやテストなどの難易度が高い
完成したサービスを提供する際には、デバッグや統合テストなどの作業が求められます。マイクロサービスでは、エラーが出た際にどの機能が原因なのかを探る作業が非常に難しくなります。
ユーザーに待機時間が発生するリスクがある
マイクロサービスでは、各ネットワークのやり取りに時間がかかるケースが多く見られます。各サービスを呼び出す時間が長くなればなるほど、ユーザーは待たなければいけません。待機時間が発生することによって、ユーザーが不便な思いをする可能性がある点も、デメリットだといえるでしょう。
高度なスキル・経験を持つ人材を確保する必要がある
マイクロサービスでは、多くの異なる言語やフレームワークを使用するためにガバナンスの統一が難しくなります。そのため、設計・構築を行う設計者やリーダーには、システム設計に関する豊富な知識と高度なスキル、実務経験が必要です。これらの要素を兼ね備えている人材を確保しなければなりません。
マイクロサービスへ移行する際の留意点
マイクロサービスへの移行は企業全体で計画的に取り組んでいく必要があります。この章では、マイクロサービスへ移行する際の留意点について解説します。
関係者全員が共通認識を持つ
はじめに、関係者全員が共通認識を持つことが重要です。「なぜマイクロサービスへ移行するのか」「どのような流れで進めていくか」などを関係者全員が把握することによって、マイクロサービスへの移行作業をスムーズに進められるでしょう。
各機能をどれくらいの粒度で分割するかを検討する
マイクロサービスの設計を行う際には、各機能をどれくらいの粒度で分割するかを慎重に検討する必要があります。各機能を細かく分割しすぎると、コストやパフォーマンスに大きな影響がでます。逆に分割粒度が大きい場合、マイクロサービスに移行するメリットが少なくなります。マイクロサービスへ移行する際には、必要な機能をどの粒度で分割するかが特に重要です。
機能同士の連携方法を検討する
各機能をどれくらいの粒度で分割するかを決めたら、分割した機能同士を連携する方法を決めましょう。連携する方法は複数あり、通信方式が「同期」か「非同期」、処理形態が「直列」か「並列」などがあります。パターンは下記の4つです。
- 同期×直列
- 同期×並列
- 非同期×直列
- 非同期×並列
同期する方法で一般的なのが、HTTPベースでやり取りを行う「REST」や「RPC」などが挙げられます。
まとめ
マイクロサービスは各機能が独立しているため、機能変更やバグの処理などをスムーズにでき、柔軟な開発を行えるメリットがあります。さらに、多様化する顧客ニーズに対しても、各サービスの開発チームが個々に対応すれば良い分、スムーズに対応できるでしょう。マイクロサービスを導入する際には、社内全体でマイクロサービスの必要性を共有し、各機能をどれくらいの粒度で分割するべきかを検討した上で導入を進めていきましょう。
マイクロサービスに役立つ「NetApp BlueXP」は、多様な環境やフレームワークを一元管理できるソリューションです。AIOpsによる自動化や、異常検出・修復などの機能が搭載されており、リスクを抑えた上でリソースの無駄を削減できます。さらに、バックアップやリストア、ランサムウェア検出などの機能によって、企業内のデータやインフラの保護も可能です。詳しくは下記サイトをご覧ください。
https://www.netapp.com/ja/bluexp/
- カテゴリ:
- トレンド
- キーワード:
- ソフトウェア開発技法