クラウドネイティブ化の具体的手法を解説!企業のアフタークラウドを支援するNebulaShift【イベントレポート前編】
- クラウドネイティブ
- DX
- NebulaShift
- ../../../article/2024/07/nebulashift1.html

DXやクラウド化に伴い、「マイクロサービス」の活用が広がっています。従来のアプリケーション開発における課題を解決する新しいアーキテクチャとして登場して以来、注目度が高まるマイクロサービスですが、具体的にどんな技術なのか、どういったメリット・デメリットがあるのかについてよくわからないという方も多いのではないでしょうか。
この記事ではマイクロサービスの概要と従来の手法との違い、必要な技術や活用するためのポイントなどについてわかりやすく解説します。コンテナやクラウドネイティブといった、近年注目されるその他の技術を理解するためにも重要なキーワードとなりますので、ぜひご参考ください。
目次
【監修者】奥 浩史(おく ひろふみ)
SCSK株式会社 ITインフラ・ソフトウェア事業本部
技術第二課 課長 兼 全社クラウドネイティブCoEメンバー
【経歴】
SCSKにおけるNebulaShiftビジネス、RedHatビジネス立上げやSysdigビジネス立上げを担当。現在クラウドネイティブ領域で活動中
マイクロサービス(またはマイクロサービスアーキテクチャ)とは、ソフトウェア開発手法の一つで、小さく独立したサービスを組み合わせることで大規模なアプリケーションを構築する技法を指します。各サービスはそれぞれ特定の機能を担い、独立して動作するという特徴があります。そして、これらがネットワークやAPIを通じて相互に連携されることで、一つのシステムが成り立ちます。
マイクロサービスの図
マイクロサービスによって各サービスの独立性を高めることで、クラウドネイティブなアプリケーション開発にも役立ち、開発からデプロイ、スケーリングの効率化を実現します。
マイクロサービスという用語は2011年に誕生したとされていますが、概念として広く提唱されたのは2014年のことでした。この年に、ThoughtWorks社のソフトウェア開発者であるMartin Fowler氏が自身のウェブサイトで「Microservices」という記事を発表したことをきっかけに、マイクロサービスの概念が世界的に広まりました。
The term “Microservice Architecture” has sprung up over the last few years to describe a particular way of designing software applications as suites of independently deployable services. While there is no precise definition of this architectural style, there are certain common characteristics around organization around business capability, automated deployment, intelligence in the endpoints, and decentralized control of languages and data.
(訳)「マイクロサービスアーキテクチャ」は、ソフトウェアアプリケーションを独立してデプロイ可能な一連のサービス群として設計する手法です。正確な定義はないものの、マイクロサービスを構成するビジネス機能、自動デプロイ、エンドポイントのインテリジェンス、言語とデータの分散制御に関しては、一定の共通点があります。
(出典):Microservices
※日本語訳は当サイトによる
マイクロサービスを深く理解するために、他のソフトウェア開発手法との違いや特徴を比較して説明します。ここでは、一般的によく比較される「モノリシックアーキテクチャ」と「サービス指向アーキテクチャ(SOA)」の2つを取り上げます。
従来の開発手法として一般的なのが、モノリシックアーキテクチャです。モノリシック(monolithic)とは、英語で「一枚岩の(ような)」、「がっしりと固まっている」という意味で、モノリシックアーキテクチャはすべての機能を一つのプログラムにまとめて設計する手法のことです。一つのアプリケーションを実現するために必要な機能が全て同じプログラムに実装されており、それぞれの機能が密に結合されています。
モノリシックアーキテクチャでは全てが一つにまとまっているため、開発やテスト、デバッグがしやすいというメリットがあります。しかし1か所でもエラーが生じた場合、各所の依存関係が大きいことでアプリケーション全体に影響を及ぼす可能性があるうえに、修正にあたって全体を一気にアップデートしなければならないといったデメリットがあります。
一方マイクロサービスは、細かく分けられたサービスをAPIによって接続することで一つのアプリケーションを構築します。各サービスは独立して単一の機能を担うため、一部に問題があっても該当サービスのみの更新で済み、迅速な開発・運用が可能になります。
例えば下記の図は、ECアプリケーションをそれぞれマイクロサービスとモノリシックアーキテクチャで構築する場合のイメージです。
マイクロサービスとモノリシックアーキテクチャの比較
モノリシックアーキテクチャの場合、ECアプリケーションに必要な機能が全てまとまっており、それらが同じデータを参照していることが分かります。一方マイクロサービスでは、機能に応じてサービス(およびデータ)が細かく分割され、API連携によってECアプリケーションを構成しています。
別の開発手法として、サービス指向アーキテクチャ(Service-Oriented Architecture:以下SOA)があります。SOAは細かく独立したサービスに分割してアプリケーションを構築するという点ではマイクロサービスと共通していますが、違う点もあります。
マイクロサービスとSOAの比較
大きな違いの一つが各サービスの独立性です。マイクロサービスはサービス毎にサーバーやデータベースなどのリソースも分割され(物理的なマシンだけでなく仮想プラットフォームなども含みます)、非常に独立性が高いつくりになっています。一方SOAは、各種リソースが複数のサービス間で共有されます。
また、各サービスを繋ぐ手段も異なります。前述の通り、マイクロサービスがAPIで個々に接続されるのに対し、SOAはエンタープライズ・サービス・バス(Enterprise Service Bus:以下ESB)を共通基盤として全てのサービスが繋がります。APIはとあるサービスが別サービスの機能を必要としたときにのみ使われますが、ESBは全てのシステムを一元的に結合します。そのためESBに問題が生じるとサービス全体に影響を及ぼす可能性があります。
このようにSOAはマイクロサービスと比較すると各サービスの独立性が低く(依存関係が強く)、それ自体がモノリシックなESBを用いている点からも、よりモノリシックアーキテクチャに近い特徴があると言えます。
世界のマイクロサービスの市場規模は2023年に37億米ドルに達し、今後2024年から2032年にかけて13.2%のCAGR(年平均成長率)で118億米ドルにものぼると予測されています。(IMARC Group調べ。(参考)マイクロサービスアーキテクチャ市場| 市場規模 成長性 産業動向 予測 2024-2032年 【市場調査レポート】)
マイクロサービスがこれほど注目されている背景には、急激に変化するビジネス環境があります。近年、IT技術は急速に進化し、顧客のニーズも多様化しています。その結果、システムやアプリケーションは常に新しい機能を迅速に追加・更新することが求められます。このような状況の中で、企画、設計、テスト、リリースという開発プロセスを機能ごとに小さな一つのサイクルとして繰り返すことで、従来と比較し短期間でプロジェクトを進められる「アジャイル開発」が、開発手法として採用されるケースが増えています。
大規模なアプリケーションを「一枚岩」として開発するのではなく、機能ごとに小さく分割して開発範囲を限定し、一部を更新する場合に他の箇所への影響が最小限に抑えられるマイクロサービスは、アジャイル開発との親和性が高いのです。
また、DXの流れを受け、以前はリアルで提供されていたサービスが続々とデジタルに移行されることでアプリケーション開発の機会が増える中、その開発を効率化できる点でも、マイクロサービスに注目が集まっています。
マイクロサービスを実現するためにはさまざまな技術が必要です。ここでは代表的な技術要素である「API」「サービスメッシュ」「コンテナ」「DevOps」の4つをご紹介します。
APIとは”Application Programming Interface”の略で、異なるシステムやアプリケーション間で、特定の機能やデータを連携するためのインターフェース(窓口)です。マイクロサービスはシステムが細分化されているため、APIによってサービス同士が必要な機能を提供しあうことによって、一つの大きなアプリケーションとして機能するようになります。
APIにはいろいろな種類がありますが、クラウドで提供されるマイクロサービスでは、「REST API(Representational State Transfer API)」や「SOAP(Simple Object Access Protocol)」などの、ウェブサービス間の通信を行うAPIがよく使われます。それぞれREST APIはHTTPに従い、SOAPはW3Cによって標準化されているため、信頼性の高い通信が可能です。
サービスメッシュは、マイクロサービスにおいてサービス間の通信を効率的に管理する仕組みのことです。多数のサービスを繋いだ通信が網の目(メッシュ)のように見えることからそう呼ばれます。
サービスメッシュはマイクロサービスに必須というわけではありません。サービスメッシュを活用しなくても、通信に関するロジックをサービス毎にコード化してしまえば、サービス間の通信を問題なく行うことができます。しかしサービスが増えて通信が複雑になると、コーディングそのものや、システム改修に伴うメンテナンスなどの管理が難しくなってきます。
サービスメッシュでは、各サービスに「サイドカー(Sidecar)」というプロキシを付加することで、全ての通信がサイドカーを介して行われるようになります。サービス自体には通信に関するロジックが不要になるうえ、ネットワークトラフィックの負荷分散や暗号化によるセキュリティ向上などのメリットがあります。
代表的なサービスメッシュツールには、GoogleやIBMなどにより開発され、その後オープンソース化された「Istio」があります。そのソースコードはGitHubで公開されているので、手軽に利用できます。
(出典)コンテナとは|IT用語辞典|SCSK IT Platform Navigator
コンテナとは、アプリケーションやその実行に必要な環境をパッケージ化する仮想技術です。コンテナにはアプリケーションに必要なライブラリやミドルウェアなどがまとめられているため、各サービスを個々に開発・デプロイしたり、変更・更新したりといったことが容易になります。
マイクロサービスでは細分化されたサービスをコンテナで開発し、サービス(コンテナ)同士がAPIで接続されます。システム更新の際は該当するコンテナを入れ替えるだけで良いので、リリースサイクルを短縮できます。
コンテナに関するツールはさまざまなものがありますが、コンテナの作成においては依然「Docker」が主要なツールとして使用されています。また、複数のコンテナを効率的に管理するための、いわゆるコンテナオーケストレーションツールとしては「Kubernetes」が広く活用されています。
DevOps(デブオプス)とは、“Development and Operations”を省略したもので、システムの開発(Development)と運用(Operations)を統合する文化や手法を指します。開発担当者と運用担当者が密接に連携することで、迅速に開発を進めることができます。
DevOpsのプロセスを整備してマイクロサービスに適用することで、各サービスをより素早くリリースできると同時に、運用する中で発見された問題にいち早く対応でき、高品質なサービスを継続して提供することが可能になります。
マイクロサービスを活用することによって、具体的にどのようなメリットがあるのでしょうか。
システムやアプリケーションは、一度リリースして終わりではありません。運用する中で不具合が発生して修正が必要になったり、新機能を追加したりなど、継続的な改修が求められます。モノリシックアーキテクチャの場合、全ての機能が密に連携しているため、一部の改修が他の箇所へ影響を及ぼすことがあり、修正箇所が多くなってしまいます。また、さまざまな機能を一つのサービスで実装しなければならないので、コードが複雑化しやすいという問題があります。
一方マイクロサービスでは、それぞれのサービスを細かく分けて独立させていることによって、改修箇所が最小限に抑えられ、開発・改修期間の短縮につながります。
マイクロサービスで構築されているアプリケーションでは、ニーズに応じた柔軟な変更や拡張が可能です。
具体的には、アプリケーションのどれか1つの機能をアップデートしたい場合、モノリシックアーキテクチャでは各機能が密接に結びついているため、依存関係の調査や該当箇所の修正に多くの時間がかかります。また、一部の箇所に負荷がかかると、問題のない他の機能も含めてシステム全体をスケールアップしなければならず、時間とコストが余計にかかってしまいます。
一方マイクロサービスでは、各サービスが機能単位で独立しているため、機能の入れ替えやスケールアップを行う際にも、その機能を担っているサービスのみへの対応で済みます。このように対応範囲を限定することで、ニーズに応じた柔軟な改修と高い拡張性を実現でき、サービス全体のパフォーマンスを改善できます。
マイクロサービスのメリットの一つは、各サービスを個々にデプロイしたりロールバックしたりできることです。
例えばECシステムの決済機能に修正が必要となった場合、モノリシックアーキテクチャでは、ECシステムを全て一旦停止して、修正したコードをデプロイ(ユーザーが利用可能な状態にすること)しなければなりません。加えて、デプロイ後に問題が発覚してロールバック(以前のバージョンに戻すこと)したいときにも、同じくシステム全体を止める必要があります。
対してマイクロサービスでは、決済機能を担うサービスのみを停止しての対応が可能です。他のサービスは稼働したまま、新しいバージョンのデプロイやロールバックを行えるため、全体のシステムに与える影響を最小限に抑えることができます。
これまでも述べた通り、マイクロサービスでは各サービスが依存関係を持たず独立しています。そのため他のサービスがどのように開発されているかに関わらず、それぞれを自由な手法で開発できます。
ここで言う手法とは開発言語やフレームワークのことです。モノリシックアーキテクチャの場合、機能同士が影響を受けやすいため、この機能はこちらの手法で開発したいが、あの機能との依存関係を踏まえると別の手法を選択するしかない、といった制約が発生してしまいます。マイクロサービスでは、例えばこのサービスはJavaで、あのサービスはPythonで開発しよう、といった自由が利くため、各サービスによって最適な手法を選択でき、アプリケーション全体のパフォーマンス向上にも繋がります。
マイクロサービスは機能に応じてサービスを細分化しているため、特定のサービスを別のソフトウェア開発で再利用しやすくなるというメリットがあります。
とあるアプリケーションで実装した機能の一部を全く別のアプリケーションでも使いたいとなった場合、従来であればシステム全体から依存関係も考慮しながら該当部分を抽出する必要がありました。しかしマイクロサービスでは初めから必要最小限の単位で機能が分割されているため、欲しい機能を担うサービスのみを簡単に再利用できます。同様の機能を一からプログラミングしたり、大きく変更したりする手間が省けるため、開発効率を向上できます。
モノリシックアーキテクチャで構築された、特に大規模なシステムで障害が発生すると、原因となった箇所の特定や修正に多大な労力がかかります。さらに、あらゆる機能が密接に繋がっているため、一か所の問題がシステム全体に影響を及ぼすおそれがあります。
マイクロサービスでは、各サービスが機能ごとに分割され独立していることで、障害の原因となっているサービスのみを切り離して修正することが可能です。また、サービス同士が影響を受けにくいことで、障害による被害を最小限に抑えられます。つまり、システム全体の可用性と耐障害性を高めることが期待できます。
このようにマイクロサービスには多くのメリットがある反面、デメリットも存在します。ここでは代表的なものを4つご紹介します。メリットとデメリットの双方を理解し、マイクロサービスの検討に役立ててください。
細かく分割したサービスを連携させて一つの大きなシステムを構築するというマイクロサービスの特徴から、サービスをどのように分割し、どう連結させるかといった、システム全体の設計が複雑化するというデメリットがあります。特に日本では、複数の開発ベンダーにまたがって企業のシステムが運用されていることが多いです。さらに単純な機能だけではなく、その企業カルチャーも理解した上で設計する必要もあり、複雑化が増すという背景があります。そして技術的な自由度が高いというメリットは、裏を返せば、さまざまな技術の知見が求められるため、システム全体を設計する難易度が高くなるということでもあります。
さらに、設計だけでなく運用における複雑さも課題です。複数の分散したサービスを適切に監視・管理するために、想定以上に人手がかかってしまったり、専用ツールが必要になったりすることで、コストが増大する可能性もあります。
マイクロサービスでは、一つひとつのサービスが異なるデータベースを持っています。そのため複数のサービス間でトランザクションを制御する際に、データの整合性を保ち、必要に応じてロールバック(変更取り消し)を行うことが困難になるという問題があります。
こうした分散トランザクションを正しく管理するためには、専用ツールや特定の設計パターンを用いる必要があります。
マイクロサービスでは、多くのサービスが連携して一つのアプリケーションを構築するため、開発やテストの際には各サービスが適切に連携し、システムとして正しく動作するかを確認する必要があります。エラーが発生した場合、各サービスが独立していることで原因の追跡に時間がかかるおそれがあります。さらに、サービスの数が増えるほど、環境の構築やデバッグがより複雑になるといった課題があります。
マイクロサービスは複数のサービスがAPIを介して相互に連携することで、一つのアプリケーションとして機能します。そのため、サービス間の通信が頻繁に行われます。同時に通信するサービスが増えたり、データ容量が大きくなったりすると、ネットワーク遅延などのパフォーマンスが問題になることがあります。
マイクロサービスのリアルタイム監視・セキュリティ管理を実現する「Sysdig」プラットフォーム
ゴールドマン・サックスはマイクロサービスを採用するにあたり、Sysdig製品の導入によって、ソフトウェアのデリバリースピードの向上・アプリケーションの監視とセキュリティ管理の効率化を実現しています。
ここまで見てきた通り、マイクロサービスにはメリットとデメリットの両方があり、全てのアプリケーションをマイクロサービスで構築すればよいというわけではありません。
例えば、最初から小規模なシステムで、それ以上にサービスを切り分けることが難しいものや、開発および運用チームにマイクロサービスに関する十分な専門知識がない場合には、マイクロサービスよりも従来のモノリシックアーキテクチャの方が適している可能性があります。一方、ある程度の規模があるシステムや、頻繁にあるいは迅速な改修が必要なアプリケーションについては、マイクロサービスを適用することで、これまで述べたようなメリットが活かせます。
マイクロサービスを導入する際は、マイクロサービスの特徴と自社のシステムにどのようなメリットとデメリットがあるのかを踏まえ、慎重に検討しましょう。
マイクロサービス化を含めた各種支援でクラウドネイティブを加速する|NebulaShift(ネビュラシフト)
SCSKでは、マイクロサービス化のご支援に加え、クラウドネイティブを進めるために必要なサービスやプロダクトをアプリケーション基盤からコンサルティングまで幅広く支援します。アプリケーションのモダナイゼーションおよびマイクロサービス化には、適切なサービスの切り分けや技術・ツールの導入、開発・運用体制の構築が不可欠です。SCSKでは、マイクロサービスに精通したエンジニアがワンストップで支援します。お悩みの方はまずご相談ください。
クラウドネイティブに関しては、以下の記事もご参考ください。
クラウドネイティブ化の具体的手法を解説!企業のアフタークラウドを支援するNebulaShift【イベントレポート前編】|SCSK IT Platform Navigator
急激なデジタル社会への移行や技術の発展を背景に、ソフトウェアをいち早く開発するアジャイル開発と高い親和性を持つマイクロサービスに注目が集まっています。マイクロサービスには、開発期間が短縮できる、コードを再利用できる、耐障害性が高いなどの多くのメリットがある一方で、デメリットも存在します。そのため、それらをしっかりと理解したうえでアプリケーション開発に適用することが重要です。
モノリシックアーキテクチャによる既存のシステムに課題がある方や、マイクロサービスを導入したいが自社に適した進め方が分からない、といったマイクロサービスに関するお悩みがある方は、まずは身近なITパートナーや実績豊富なベンダーに相談することをおすすめします。マイクロサービスのメリットを最大限に活かして、企業のDXを加速させていきましょう。