マイクロサービスアーキテクチャとは?メリットと活用例を解説

Rabiloo

最近、ソフトウェア開発の世界では「マイクロサービス」が大きな注目を集めています。
マイクロサービスとは、システムを小さなコンポーネントに分割していくアーキテクチャのことです。細分化された各部分をサービスと呼びます。
マイクロサービスアーキテクチャでは、サービスがうまく処理され、プロトコルが軽量化されます。そのためアプリケーションを理解しやすく、開発しやすく柔軟なものにします。
- マイクロサービスアーキテクチャとは何ですか。
- なぜ「小さな」アーキテクチャが大きなプロジェクトに貢献できるのでしょうか。
- マイクロサービスアーキテクチャをソフトウェア開発に取り入れるメリットは何ですか。
この記事ではマイクロサービスアーキテクチャの概要を説明していきます。
弊社ラビロー(Rabiloo )は、マイクロサービスアーキテクチャを取り入れた効率の良い開発プロセスを実践する、ソフトウェア開発企業です。
マイクロサービスアーキテクチャとは?
マイクロサービスアーキテクチャとは、小さなサービスの集合体という方法でソフトウェアを設計するスタイルを取る開発方法です。
例えば、Eコマースアプリの開発を考えましょう。
この場合、「商品」「注文」「顧客」といった各モジュールは、それぞれが別々のプロジェクト(サービス)になります。
マイクロサービスアーキテクチャの各サービスは、互いに独立して存在します。それぞれのサービス(「商品」や「注文」など)は、それぞれ異なる構造を持ち、異なる技術を使用して開発されます。
また、それぞれ独自のデータベースを持つことができます。
そのため、マイクロサービスアーキテクチャではサービス同士がどのように通信するかを開発者同士が事前に合意しておく必要があります。
ここで質問が生じます。
なぜ細かく多くのパーツに分けるのでしょうか?
この疑問に答えるために、従来のソフトウェア開発の仕組みを見てみましょう。
マイクロサービスアーキテクチャが登場した背景
従来のプロジェクトは、モノリシック・アーキテクチャの形で書かれているものがほとんどでした。
モノリシックとは、つなぎ目のない一枚岩を指す言葉で、システムの構造が要素に分割されておらず全体が一つになっています。
モノリシックでは、すべてのソフトウェアの機能が1つのプロジェクトの中で一緒に配置され、同じプログラミング言語とデータベースを共有します。各モジュールはお互いに影響し合い、円滑に機能するために互いを必要とします。マイクロサービスとは対象的です。
モノリシックアーキテクチャは、ソフトウェアを開発するためのシンプルな手法で、すべてを一箇所で管理することが容易になります。
IDE(統合開発環境)は、アプリケーションのテストと実行を十分にサポートします。
IDE(統合開発環境)とは、様々なツールの集合体となるソフトウェア開発のプログラミング環境です。
モノリシックアーキテクチャの課題
すべてを一元管理できるモノリシックアーキテクチャですが、問題点もあります。
例えばモノリシックなシステムでは、運用中に以下のような問題が発生する可能性があります。
-
システムの部品の1つが故障すると、システム全体が動作しなくなる
-
システムの拡張が難しい
-
システムに負荷がかかったときには、サーバーをアップグレードしなければならない
モノリシックアーキテクチャは全体を触らなければならない
例えば、FacebookのようなSNSサイトがあるとします。
画像アップロードと広告表示という2つのモジュールがあります。このアプリの課題として、ユーザー数が増えれば増えるほど、写真をアップロードする必要性が高まります。
そこで、データベースを拡張したり、複数の画像を一度にアップロードする機能などを追加することにします。しかし、モノリシックなプロジェクトでは機能を拡張したい場合、直接関係のない広告表示のモジュールも触らなければなりません。
編集が完了したら、アプリケーション全体を再デプロイする必要があります。デプロイ作業中は、システムの動作を停止させる必要があり、それにはリスクを伴います。
また、モノリシックアーキテクチャでは、プロジェクトが特定の技術で開発されるため、機能がその技術に限定されることになります。
モノリシックとマイクロサービスの違い
上記の問題を解決するために生まれたのが「マイクロサービス」システムです。
すべてを一つのサーバーで処理するのではなく、アプリケーションを細分化し、それぞれが「サービス」と呼ばれる特定の機能を1つ以上実行するようにします。
サービスは独立して動作したり、連携してアプリケーションを動かすネットワークになったりします。あるサービスが故障したときでも他のサービスは引き続き正常に動作します。
モノリシックとマイクロサービスの違いは以下の図の通りです。
モノリシックとマイクロサービスの比較
例えば、上図左側のモノリシックシステムの場合、システムのどこか一部に障害が発生すると、システム全体が停止し、顧客はアクセスできなくなってしまいます。
一方、マイクロサービスシステムは様々なサービスで構成されます。Postサービスに障害が発生しても、Customer、Order、Authサービスには影響がなく、顧客は通常通りに注文を行うことができます。
マイクロサービスアーキテクチャの特徴
マイクロサービスアーキテクチャには以下のような特徴があります。
- マイクロに分割される
- 独立性
- エラー防止
- 専門性
それぞれ見ていきましょう。
マイクロに分割される
その名の通り、マイクロサービスではソフトウェアが「マイクロ」に分割されます。これらの部分はデータベースが別々で、変更、編集、削除しても他の部分に影響を与えないように小さく分割されています。
独立性
各サービスはシステム内の独立したサービスで、他の機能とは関係ありません。
それぞれのサービスは異なるチームによって開発され、異なるサーバーシステムで構築され、異なる言語で記述することが可能です。これらは完全に独立しています。
これにより、各モジュールを順番通りに行う必要がないため、開発のスピードアップにつながります。
エラー防止
マイクロサービスアーキテクチャは、分割統治法を採用しています。そのため、システム全体をチェックするのではなく、システム内の1つまたはいくつかの小さなサービスだけをチェックすればよいので、エラー防止、監視も容易になります。
専門性
各サービスは独立したサービスで、他のサービスに影響を与えることはありません。そのため、あるサービスに障害が発生しても、モノリシックアーキテクチャのようにシステム全体や他のサービスに影響を与えることはありません。
マイクロサービスアーキテクチャのメリット
マイクロサービスアーキテクチャには次のようなメリットがあります。
-
独立した動作
あるサービスが停止しても、他のサービスは動作しているので、システムは他の機能を維持することができる -
ソースコードの保護
サービスに分割されているため、どのプロジェクトの社員も自分の携わるプロジェクトのソースコードしか知ることができない -
管理・保守が容易
サービスは普通、一つの役割を果たすため、保守やバグの修正が容易になる -
水平方向の拡張が容易
マイクロサービスは水平方向の拡張性が非常に優れているため、将来の肥大化や過負荷を心配することなくシステムを展開することができる。そこに徐々にサービスを追加していくだけでよい
マイクロサービスのデメリット
しかし、マイクロサービスにはいくつかデメリットもあります。
-
各サービスを個別にデプロイする必要があるため、システムのデプロイが複雑になる
-
サービス同士がインターネット環境上で通信する必要があるため、モノリシックアーキテクチャよりもレイテンシー(遅延時間)が高くなる
-
マイクロサービスのサイズも重要な要素になる。慎重に設計しないと、マイクロサービス自体がモノリシックアーキテクチャになってしまう
-
サービスの数が多すぎると、サービス管理も難しくなる
確かにマイクロサービスアーキテクチャでソフトウェアを開発することは簡単ではありません。
しかし、マイクロサービスアーキテクチャは、特に規模の大きなシステム開発にはメリットが多いため、ソフトウェア開発業界では以前から注目されています。
マイクロサービスアーキテクチャの活用例
マイクロサービスはモノリシックな問題点を解決してくれます。
前述のSNSサイトの例をもう一度考えましょう。
従来の一枚岩なモノリシック開発では、例えば画像アップロードの機能を強化したい場合、広告を表示するモジュールも同時に触らなければなりません。全部つながった一つのプロジェクトになるからです。
しかしマイクロサービスアーキテクチャでは、広告表示サービスに影響を与えず、画像アップロードのサービスだけをバージョンアップすれば済みます。
当然その分、開発の負担は軽くなり、工期も短縮されます。
このようにマイクロサービスは、開発とテスト工程を高速化します。
SNS認証の機能を追加したい場合
マイクロサービスアーキテクチャの活用例として、他社のサービスとの連携や拡張について考えましょう。例えば、SNS認証(ソーシャルログイン機能)です。
SNS認証とは、ユーザーがGoogleやFacebookのアカウントでソフトウェアにログインできるようにする機能のことです。
マイクロサービスなら非常に簡単にSNS認証の機能を組み込むことができます。
ログイン機能の部分だけを触ればよく、システム全体を触る必要はありません。アップグレード中もシステムを稼働させ、ユーザーへの影響を与えないようにすることができます。
仮にあるコンポーネントでエラーが発生した場合、そのサービスのみでエラーを修正すればよく、システム全体を再デプロイする必要はありません。
関連記事: FacebookによるSNS認証(ソーシャルログイン)を設定する方法
まとめ
この記事では、マイクロサービスアーキテクチャの概要について詳しく解説しました。
マイクロサービスアーキテクチャのメリットは以下のとおりです。
-
独立した動作
-
ソースコードの保護
-
管理・保守が容易
-
水平方向の拡張が容易
マイクロサービスアーキテクチャは多くのソフトウェア開発現場で採用されています。
弊社Rabilooのソフトウェア開発でも、マイクロサービスアーキテクチャを利用してソフトウェア開発を行っています。
マイクロサービスのスタイルでプロジェクトの共同開発をするベンダーをお探しなら、ぜひ弊社までお問い合わせください。