テクノロジー、特にクラウド・コンピューティングに携わる人であれば、サービス指向アーキテクチャー(SOA)やマイクロサービスの仕組みをご存知の方は多いかと思います。しかし、さまざまな状況に応じた最適なアプローチという面では、多くの議論があります。SOAとマイクロサービスでは、データガバナンス、コンポーネントの共有、アーキテクチャなどに決定的な違いがあります。

この記事では、SOAとマイクロサービスの基本を学び、両者の基本的な違いを理解し、モダナイゼーション、アップデート、あるいはゼロからのアーキテクチャ設計など、それぞれの状況に応じてどちらのアプローチが最適かを見極めます。

SOAとは?

サービス指向アーキテクチャは、企業全体の開発を含むソフトウェアへのアプローチです。開発者は、企業全体で他の様々なアプリケーションのコンポーネントを再利用することができます。SOAには、モジュール化されたサービス群が含まれており、アプリケーションをサポートするために相互に「通信」します。

このサービスは、異なるプラットフォームや言語を介したコミュニケーションを可能にします。SOAでは、緩い結合またはデカップリングに基づいた仕組みとなっています。そのため、2つのビジネスが全く異なるものであっても通信することができます。これにより、ソフトウェア開発の利便性が高まり、ビジネスの機能性が向上させることが可能です。SOAでは、基本的に4種類のサービスを提供します。

  • 機能的なサービス: ビジネスアプリケーションのための一般的なサービス。
  • アプリケーションサービス:アプリケーションを展開・開発するためのサービス。
  • エンタープライズサービス:機能を具体的に実装するためのサービス。
  • インフラストラクチャサービス:非機能的な目的で使用されるサービスで、セキュリティや認証などが含まれる。

Microservicesとは?

マイクロサービスは、SOAの進化・拡張版のようなものです。マイクロサービスのさまざまなサービスは、API(アプリケーション・プログラミング・インターフェース)を通じて通信します。それぞれのサービスは、特定のビジネスドメインを中心としたネットワークを形成しています。これらのサービスを組み合わせることで、複雑なアプリケーションを構築することができます。マイクロサービスは、アプリケーションシステムを、通常はユニークで互いに異なる一連の単一目的のためのサービスとして作成します。

マイクロサービスでは、プログラマーはコードを簡単に更新でき、コンポーネントを互いに独立して拡張し、様々なコンポーネントに異なるスタックを使用することができます。これにより、アプリケーション全体を拡張する際に発生しがちなコストや無駄を削減することができます。また、単一の機能が過度の負荷に直面するのを防いでくれます。マイクロサービスは、他のタイプのアプリケーションメソッドと比較し、障害に対する耐性が高く、マイクロサービスはクラウド上で動作することが多いのが特徴です。

両者の大きな違い

SOAとマイクロサービスのスコープこそが明確な違いを産む部分です。マイクロサービスのアーキテクチャはアプリケーションのスコープを生み出し、SOAはエンタープライズのスコープを提供します。これらの大きな違いが顕著に表れる具体的な分野がいくつかあります。

データの二重化: データが生成された場所でデータを更新することは、すべてのアプリケーションにSOAを提供する基本的な目的の1つです。これにより、複雑なデータ同期パターンを維持する必要性を減らすことができます。マイクロサービスアプリケーションは通常、アクセスする必要のあるデータをローカルに持ちます。しかし、これは、他のシステムにデータが重複している場合があることを意味し、複雑さの原因となります。

データストレージ: マイクロサービスは通常、個別のデータストレージを持っています。SOAシステムでは通常、データストレージを共有します。

再利用性: 統合機能を再利用することは、SOAの主要な目標の1つです。アプリケーション全体でマイクロサービスのコンポーネントを再利用することは、柔軟性と俊敏性を制限するであろう依存関係の問題を引き起こす可能性があります。

スピード:基本的なアーキテクチャを共有することで、トラブルシューティングや継続的な開発を簡素化する際にSOAを支援することができます。その一方で、SOAはよりスローに動作する可能性があります。

コミュニケーション: SOAシステムは、各サービスに基本的な通信メカニズムを提供します。これはESB(エンタープライズ・サービス・バス)と呼ばれています。また、単一の障害点が企業全体を混乱させることを意味します。マイクロサービス・アーキテクチャでは、各サービスは互いに独立しています。

粒度: SOAは、幅広いサービスを展開しています。これらには、小さな専用のサービスから、企業全体に及ぶものまであります。一方、マイクロサービスはすべてが専用です。プログラマーは、ある特定のサービスを非常にうまく実行するために、それぞれのサービスを作成します。

相互運用性: SOAは多様なメッセージやプロトコルに対応しています。マイクロサービスでは、HTTP/RESTなどのメッセージングを使用し、シンプルなものになっています。

両者の類似点

SOAとマイクロサービスが似ている点はいくつかあります。

  • 両者とも特定の機能に特化した集合体である。
  • 両者とも大規模なモノリシック・アーキテクチャーよりも全体的な規模が小さい。
  • 両者とも社内の文化を分散させ、部門を超えた協力体制を必要とする。
  • 両者ともそれぞれのサービスに最適なプログラム言語を選択することが可能。

事例

どちらがベストな選択肢なのかは、実際の事例を見てみると簡単に判断できることがあります。ここでは、SOAとMicroservicesのどちらかを採用している企業を紹介します。

SOAを採用している企業: SOAはモノリシックなシステムに似ており、コンポーネントの共有に重点を置いています。このタイプのアプリケーションを使用している大企業がいくつかあります。NASAやMotorolaは、ソフトウェア開発にSOAを導入しています。また、First-Citizens BankもSOAを採用している機関です。

マイクロサービスを採用している企業 :マイクロサービスは、デカップリングをより重視しています。Netflixはマイクロサービスシステムを採用しており、世界中で簡単に作品をストリーミングすることができます。PayPalでは、ユーザーが "make a payment "をタップするたびにマイクロサービスを使用しています。Amazon Web Servicesもマイクロサービスアーキテクチャをサポートしています。。

メリットとデメリット

SOAとマイクロサービスの使い分けには、メリットとデメリットがあります。どちらかを選択する際には、それぞれの長所と短所を評価するとよいでしょう。

SOAの長所:サービスの場所は関係ありません。1つのサーバー上のサービスでも、複数のサーバー上のサービスでも動作します。また、SOAは高い再利用性を提供します。開発チームやデータエンジニアも、SOAを使えば並行して開発を行うことができます。

SOAの欠点:最大の欠点の一つは、多くの場合、SOAは多額の先行投資を必要とすることです。Webサービスやその他の新しいサービスを開始する際には、これは企業の収益に悪影響を及ぼす可能性があります。SOAを使用すると、サービス間の相互連携のたびにすべてのパラメータの完全な検証が行われるため、通常、レスポンス時間は長くなります。

マイクロサービスの長所:マイクロサービスを使用することで、俊敏性と柔軟性が向上します。再利用性が高いため、クロスプラットフォームの開発が容易になります。大きなメリットは、サービスが壊れてもアプリケーション全体がクラッシュしないことです。また、各コンポーネントを個別に調整できるため、スケーラビリティも期待できます。

マイクロサービスの短所:通信に時間がかかることがあります。特にシステム内のサービス数が多くなるとその傾向が強くなります。モノリシックなアプリケーションとは異なり、各サービスには更新やテストのチェックが必要です。これは明らかに時間がかかります。全体的に見て、マイクロサービスは適切に運用し、実行するののは、より複雑であると言えます。

どちらが最適か?

長所と短所についてここまで読んだ結果、どちらのシステムが最適なのかが見えてくるはずです。SOAとマイクロサービスの間で最終的な決断を下すには、自分自身や企業に問いかけるべき質問がいくつかあります。

以下の質問にイエスと答えた場合、SOAを選択することになるでしょう。

  • 大規模で多様なアプリケーション環境を持っていますか?
  • 複数のメッセージングプロトコルをサポートするシステムを必要としていますか?
  • エンタープライズサービスバスを介して動作するメッセージングシステムを必要としていますか?

次のようなことが自社に当てはまる場合、マイクロサービスを望ましいでしょう。

  • 強力な通信層を必要としない小規模な環境を持っているか?
  • 広範なスケーラビリティを提供するシステムが必要ですか?
  • よりシンプルなメッセージングシステムで小規模なプロジェクトを構築したいと考えていますか?

最終的に、SOAとマイクロサービスのいずれかを選択する場合、将来的に追加する可能性のある機能やサービス、サービスプロバイダーとのシステム連携、どの程度のスケーラビリティが必要かなどを念頭に置く必要があります。SOAもマイクロサービスも、それぞれの仕組みの重要な違いに基づき、個々のニーズにフォーカスした素晴らしい選択肢を提供します。

Integrate.ioは、モノリシックアーキテクチャ、SOAアーキテクチャ、マイクロサービスのいずれを採用したとしても、ビジネスプロセスを改善することができます。Integrate.ioは、適切なソフトウェアコンポーネントとアプリケーション開発でスケーラビリティを提供します。最先端のDevOpsに取り組みたい方は、今すぐIntegrate.ioのオンラインデモにお申し込みください。