SOA(サービス指向アーキテクチャ) えすおーえー
SOAとは
SOA(Service-Oriented Architecture、サービス指向アーキテクチャ) とは、ソフトウェアシステムを「サービス」という独立した機能単位に分割し、それらをネットワーク経由で連携させる設計アプローチです。各サービスは明確に定義されたインターフェース(APIや通信仕様)を持ち、互いの内部実装を知らなくても呼び出し合えるように作られます。
2000年代初頭に広く普及したSOAは、それまでのモノリシックアーキテクチャ(すべての機能が一つの巨大なシステムに詰め込まれた設計)の問題を解決するために生まれました。特に大企業の基幹システム同士を連携させる「エンタープライズ統合」の文脈で広く採用されました。たとえば、人事システム・販売管理システム・会計システムをバラバラのまま連携させるときに、SOAが接着剤の役割を果たしました。
SOAの核心にあるのは「疎結合(そけつごう)」という概念です。部品同士をガッチリくっつけるのではなく、緩やかにつなぐことで、一部を変更・交換しても全体が壊れないようにします。この考え方は、現代のマイクロサービスやクラウドネイティブな設計思想にも受け継がれています。
SOAの4大原則
SOAを構成する設計原則を押さえておくと、なぜこのアーキテクチャが有効なのか理解しやすくなります。
| 原則 | 意味 | 身近な例え |
|---|---|---|
| 疎結合(Loose Coupling) | サービス同士が互いに依存しすぎない | 電源コンセント:家電を変えても配線は変えない |
| 抽象化(Abstraction) | 内部の実装を隠して、インターフェースだけ公開 | 自販機:中の仕組みは知らなくてもボタンで買える |
| 再利用性(Reusability) | 同じサービスを複数のシステムから使い回す | 共通の「住所確認サービス」を注文・配送・請求で共用 |
| 自律性(Autonomy) | 各サービスが自分のデータとロジックを管理 | 部署ごとに独立した予算管理 |
SOAを構成する主要コンポーネント
┌──────────────────────────────────────────────────┐
│ サービス消費者(クライアント) │
│ (Webアプリ / モバイルアプリ / 他システム) │
└───────────────────┬──────────────────────────────┘
│ サービス要求
▼
┌──────────────────────────────────────────────────┐
│ ESB(Enterprise Service Bus) │
│ ルーティング・変換・オーケストレーション │
└──────┬─────────────┬────────────────┬────────────┘
│ │ │
▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐
│在庫管理 │ │注文処理 │ │ 請求 │
│サービス │ │サービス │ │サービス │
└─────────┘ └─────────┘ └─────────┘
ESB(Enterprise Service Bus) はSOAの「交換台」のような存在で、サービス間のメッセージ受け渡し・形式変換・ルーティングを一手に引き受けます。
SOAでよく使われる通信仕様
| 仕様 | 説明 | 特徴 |
|---|---|---|
| SOAP | XMLベースのプロトコル | 厳格・企業向け・WSDLで定義 |
| WSDL | サービスのインターフェース定義言語 | 「このサービスは何ができるか」を記述 |
| UDDI | サービスの登録・検索ディレクトリ | 「サービスの電話帳」的存在 |
| REST | HTTP準拠の軽量API | 近年のSOAでも採用増 |
歴史と背景
- 1990年代後半 — 企業システムの増殖期。部門ごとに異なるシステムが乱立し、連携が困難に。「スパゲッティ統合」と呼ばれる混乱状態が発生
- 2000年 — Gartnerが「Service-Oriented Architecture」という用語を提唱。システム統合の新しい考え方として注目される
- 2002〜2004年 — SOAPやWSDLなどWebサービス標準が整備され、主要なIT企業がSOA製品を投入。IBMのWebSphere、BEAのWebLogicなどESB製品が登場
- 2006〜2008年 — 大企業での大規模導入が進む。一方でESBへの集中が「新たなボトルネック」になるという批判も出始める
- 2010年代 — クラウド・アジャイル開発の普及とともに、SOAの「重厚さ」が課題視される。マイクロサービスアーキテクチャがSOAの後継・進化形として台頭
- 現在 — SOAの概念自体はマイクロサービス・APIエコノミーに受け継がれ、「サービスを組み合わせる」という思想はより広く普及している
SOA vs マイクロサービス:何が違う?
SOAとマイクロサービスは混同されがちですが、粒度・通信方式・組織体制が大きく異なります。
| 比較軸 | SOA | マイクロサービス |
|---|---|---|
| サービスの粒度 | 大きい(ビジネス機能単位) | 小さい(1機能1サービス) |
| 通信方式 | SOAP / ESB経由が主流 | REST API / メッセージキュー |
| データ管理 | DBを共有することも多い | サービスごとに独立したDB |
| デプロイ | まとめてリリースが多い | サービス単独でリリース可能 |
| 向いている組織 | 大企業・レガシー統合 | アジャイルチーム・クラウドネイティブ |
| 代表的なミドルウェア | ESB(IBM MQ、MuleSoftなど) | Kubernetes、Kafka、Istio |
SOAは「企業システム同士をつなぐ統合基盤」、マイクロサービスは「新しいシステムを小さく作って速く動かす」 というニュアンスの違いがあります。どちらが優れているというわけではなく、目的とシステム規模によって使い分けます。
関連する規格・RFC
| 規格・RFC番号 | 内容 |
|---|---|
| RFC 4825 | XCAP(XMLベースの設定プロトコル)。SOAのXMLサービス基盤に関連 |
| RFC 3261 | SIP(セッション開始プロトコル)。SOAのサービス連携に用いられるケースあり |
関連用語
- マイクロサービス — SOAを進化・細粒化させた現代的アーキテクチャパターン
- ESB(Enterprise Service Bus) — SOAにおけるサービス間通信を仲介する中央バス
- API(Application Programming Interface) — サービス間のインターフェース定義の基本概念
- REST — SOA・マイクロサービスで広く使われるAPI設計スタイル
- SOAP — SOAの通信に使われるXMLベースのプロトコル
- モノリシックアーキテクチャ — SOAが解決しようとした「一枚岩」型の設計
- 疎結合 — SOAの核心概念。部品同士を緩やかにつなぐ設計原則
- クラウドネイティブ — SOAの思想を受け継ぐ現代のクラウド設計アプローチ