【初学者向け】サービス指向アーキテクチャ(SOA)とは?
0.はじめに
初学者向けに、サービス指向アーキテクチャ(SOA)とは何かをまとめました。
1.サービス指向アーキテクチャ(SOA)とは
サービス指向アーキテクチャ (SOA) は、ネットワーク上の共通の通信言語を使用するサービスインタフェースを介してソフトウェアコンポーネントを再利用可能にするソフトウェア設計の一種です。
もう少しざっくりいうと、SOAは1つのシステムを「1つの大きな製品」ではなく「複数の部品(サービス)が集まったもの」として考えます。
基本的に「1つの処理に1つのサービス」として区切られており、個々の独立性は高く、サービス同士の依存性は低いのが特徴です。
この「1つの処理」とは、多くの場合ユーザー視点で区切りをつけます。たとえば「在庫管理」「仕入れ」といった業務上の単位です。
これら個々のサービスは、外部から呼び出し可能であることが前提となります。多くはWebを媒介してアクセスできるように、標準的なインターフェースが設けられています。
2.サービス指向アーキテクチャ(SOA)のコンポーネント
サービス指向アーキテクチャ (SOA) には 4 つの主要なコンポーネントがあります。
引用元:ITmedia:SOA―サービス指向アーキテクチャー(前)
2.1.サービス
サービスはSOAの基本的な構成要素です。それらはプライベート (組織の内部ユーザーのみが利用可能) またはパブリック (インターネット経由ですべてのユーザーがアクセス可能) にすることができます。
サービス実装は、ユーザー認証や請求額の計算など、特定のサービス機能を実行するためのロジックを構築するコードです。
2.2.インターフェイス
SOAでは、他のサービスまたはシステムがそのサービスインターフェイスを介してサービスと通信します。インターフェイスは、アクティビティを実行したり、データをやり取りしたりするためにサービスを呼び出す方法を定義します。これにより、サービスとサービスリクエスタ間の依存関係が減少します。
2.3.プロバイダー
サービスを提供するコンポーネント。サービスプロバイダーは、他のユーザーが利用できる1つ以上のサービスを作成、維持、提供します。組織は、独自のサービスを作成することも、サードパーティーのサービスベンダーから購入することもできます。
2.4.サービスコンシューマー
サービスを利用するコンポーネント。サービスコンシューマーは、サービスプロバイダーに特定のサービスを実行するようにリクエストします。システム全体、アプリケーション、または他のサービスである場合があります。
3.サービス指向アーキテクチャ(SOA)のESBとは
SOAでは、リクエストを送信したり、データにアクセスしたりするためのサービスが標準のネットワークプロトコル (SOAP、JSON、ActiveMQ、Apache Thrift など) を使用して公開されているため、開発者はゼロから統合を行う必要がありません。
代わりに、開発者はエンタープライズ・サービス・バス (ESB) と呼ばれるパターンを使用できます。
引用元:日経XTECH:SOA (サービス指向アーキテクチャ)
ESBは、一元化されたコンポーネントとバックエンドシステム間の統合を実行し、それらをサービスインタフェースとして利用できるようにします。
これにより、開発者は関数を再作成せずに、既存のものを再利用することもできます。
4.サービス指向アーキテクチャ(SOA)のメリット
モノリシックと比較したとき、サービス指向アーキテクチャ(SOA)にはどのようなメリットがあるのか見ていきます。
4.1.開発期間の短縮と柔軟性の向上
サービスの再利用が可能なので、モノリシック・アプリケーションのように開発者が毎回ゼロから始める必要がなく、アプリケーションの構築がはるかに容易かつ迅速になります。
4.2.重複開発の防止
大規模な組織においては、各部署で知らず知らずの内に類似機能を備えた別システムを導入してしまっていた、という事態も起こり得ます。
SOAでは、汎用性の高い機能をピックアップし開発を進められる側面があるため、各部署やアプリケーションごとに重複したシステムが開発される、といった事態を防ぐこともできます。
4.3.効率的なメンテナンス
すべてのサービスは自己完結型で独立しているため、他のサービスに影響を与えることなく、必要に応じた変更と更新が可能です。
5.サービス指向アーキテクチャ(SOA)のデメリット
サービス指向アーキテクチャ(SOA)にはどのようなデメリットがあるのか見ていきます。
5.1.スケーラビリティの制限
サービスが多くのリソースを共有し、自己の機能を実行するために調整する必要がある場合、システムのスケーラビリティは大きく影響を受けます。
5.2.より強い相互依存関係
サービス指向アーキテクチャ (SOA) システムは、時間の経過とともにより複雑になり、サービス間にいくつかの相互依存関係が生じる可能性があります。
複数のサービスがループで相互に呼び出している場合、それらを変更またはデバッグするのは難しいです。
また、一元化されたデータベースなどの共有リソースも、システムの速度を低下させる可能性もあります。
5.3.単一障害点
ESBを使用するSOA実装について、ESBは単一障害点を作成します。ESBがダウンすると、クライアントとサービスはまったく通信できなくなります。
6.サービス指向アーキテクチャ(SOA)とマイクロサービスの比較
SOAとマイクロサービス・アーキテクチャは類似しているため、よく混同されます。
その違いを示す主な特徴はそれらが及ぶ範囲です。すなわち、SOAは組織規模のアーキテクチャの手法であり、マイクロサービスはアプリケーション開発チーム内の実装戦略です。
また、コンポーネントの分割単位も違います。具体的には、マイクロサービスは、サービスごとにサーバー、DB、ストレージを個別化することが多い一方、SOAはサーバー、DB、ストレージを複数のサービスで共有することが多いです。
異種のサービスを提供する大企業は、サービス間の統合やメッセージングプロトコルの可能性から、サービス指向アーキテクチャ(SOA)が向いています。一方、ウェブベースやモバイルベースのアプリケーションを含む小規模なビジネスでは、提供されるサービス間の強固なコミュニケーションは必要ありません。このようなビジネス要件には、マイクロサービス・アーキテクチャの方が適しています。
7.まとめ
SOAは昔からある考え方であり、クラウドの登場など技術の発展や、「変化に柔軟かつ迅速に対応できる」という側面からその価値が見直されてきているように思えます。
SOAを知ることで、他アーキテクチャとの比較・検討のご参考になれば幸いです。
Discussion