サービス指向アーキテクチャー (SOA)

サービス指向アーキテクチャー (SOA) は、ソフトウェアを編成する 1 つの方法です。SOA について詳しくは、以下のセクションを参照してください。

SOA の概要

SOA は、サービス (ネットワークで実行されるロジックの単位) のデプロイに関連します。サービスには、次の特性があります。
  • 保険契約の見積もり計算や電子メールの配布などのビジネス・プロセスの処理、 データベースへのアクセスのようなテクニカルなタスクの処理、あるいは、ビジネス・データや、グラフィカル・インターフェースを構成するための技術的詳細の提供を行います。
  • 別のサービスにアクセスできます。 適切なランタイム・テクノロジーを使用して従来のプログラムにアクセスしたり、さまざまな種類のリクエスター (Web アプリケーションなど) に応答したりすることができます。
  • その他のソフトウェアから相対的に独立しています。 リクエスターを変更する場合、サービスを変更する必要はほとんどありません。サービスの内部ロジックを変更する場合、リクエスターを変更する必要はほとんどありません。サービスと他のソフトウェアとが相対的に独立していることを、疎結合 と呼びます。

サービスは、企業内の相互作用、および企業、サプライヤー、パートナー、および顧客の間での相互作用で処理することができます。

SOA は、ビジネス全体とモジュール性および再利用に重点を置いた開発スタイルです。ただし、SOA は新規コードだけのものではありません。 既存のアプリケーションをマイグレーションする状況を以下に示します。
  • アプリケーションが、ユーザー・インターフェース、ビジネス処理、およびデータ・アクセスのロジックを結合したモノリシック・アプリケーションであり、特定のロジックを更新するには、社内でさまざまな種類の振る舞いをテストする必要がある場合。
  • アプリケーションのロジックがモノリシックであり、要件の変更に伴い再作成ではなくパッチが適用されてきたために、アプリケーションを理解することが困難な場合。更新では、開発者がロジックを理解するために時間を必要とします。複雑化するに伴い、更新時に発生するエラーが増えます。
  • アプリケーション・インベントリーに重複するロジックがある場合。変更要求によって混乱が生じ、複数の場所で変更が必要となります。

デベロッパーの視点から言えば、サービス指向への変更とは重要視するものが変化することであり、開発タスクの多くの局面は影響を受けません。

サービス指向アプリケーション

サービス指向アプリケーション は、さまざまなサービスで構成されたアプリケーションです。これらのサービスは階層構造となっていることがよくあります。
サービス指向アプリケーションの図

最上位レベル は 1 つ以上の統合サービスを含み、それらの各サービスが、保険による補償を求める希望者の 要求の処理などの、アクティビティーのフローを制御します。 それぞれの統合サービスは、1 つ以上のビジネス・サービスを呼び出します。

第 2 レベルは、それぞれが相対的に下位のビジネス・タスクを実行するサービスで構成されます。 例えば、ある統合サービスが一連のビジネス・サービスを呼び出し、保険契約代理人が提供した詳細を検証することがあります。ビジネス・サービスが、「保険証書の発行」と判断される値を戻した場合、統合サービスは、さらに別のビジネス・サービスを呼び出します。 2 番目のビジネス・サービスは見積もりを計算し、サービス指向アプリケーションを呼び出したソフトウェア (Web アプリケーションなど) にその見積もりを返します。

第 3 レベルは、データ・アクセス・サービスで構成されます。各サービスは、データベースやメッセージ・キューのなどのデータ・ストレージ域に対する読み取りや書き込みという、 比較的テクニカルなタスクを処理します。 データ・アクセス・サービスは、非常に頻繁にビジネス層から呼び出されますが、サービスにアクセスしやすいことから、さまざまな用途に使用できます。例えば、Web アプリケーションなどのリクエスターは、データ・アクセス・サービスにアクセスして、書式の初期値を割り当てることができます。

重要なポイントは、柔軟性です。統合サービスの中には、さまざまな操作をさまざまなリクエスターに提供するものがあります。またサービスによっては、他の統合サービスを呼び出すものがあります。 また、リクエスターはサービス指向アプリケーション内からさまざまなサービスにアクセスできます。例えばリクエスターはある時点で統合サービスにアクセスし、別の時点でビジネス・サービスにアクセスします。

Web サービスおよびバイナリー交換サービス

Web サービスの特徴とは何でしょうか。この問いに対し、サービスが SOAP というテキスト・ベース・フォーマットでデータを交換することであるという答えがあります。また、Web サービスの特徴は、通信ソフトウェア Hypertext Transfer Protocol (HTTP) を使用してワールド・ワイド・ウェブでデータを交換することである、という答えもあります。

さまざまな Web サービスのスタイルを理解するため、ブラウザーから Web サーバーに送信されるデータである HTTP 要求メッセージの構造と、返される HTTP 応答メッセージの構造について説明します。

HTTP 要求メッセージは、次の 3 つの構成要素からなります。
  • メッセージの先頭にある HTTP メソッドは、受信側によるメッセージの処理を指定します。
  • その後に続く複数の項目は、ビジネス・データ固有ではない情報を提供するヘッダーです。例えば、ユーザー・エージェント (要求元ブラウザー) の詳細情報などです。各ヘッダーは、名前と値のペアです。
    User-Agent: Mozilla/4.0 ...
  • エンティティー本体は要求データです (存在する場合)。HTTP メソッドが GET (データ要求) の場合、エンティティー本体はほとんどの場合は空です。
HTTP 応答メッセージは、次の 3 つの構成要素からなります。
  • メッセージの先頭にある HTTP 応答コードは、要求データが処理されたかどうかを示します。
  • その後に続く複数の項目はヘッダーです。これには、応答のエンティティー本体のデータのフォーマットを指定する Content-Type も含まれます。 フォーマットは固有です (例: JPEG タイプの画像を示すフォーマット)。フォーマットが HTML (Hypertext Markup Language) の場合、応答は Web ページです。Web アプリケーションまたはその他のリクエスターで使用されるビジネス・データを指定するコンテンツ・タイプには、最小限でも Extensible Markup Language (XML)、SOAP (XML の方言)、および JavaScript Object Notation (JSON) (JavaScript が容易に処理できるデータ) の 3 つがあります。
  • エンティティー本体 は応答データです (存在する場合)。

Web サービス という用語は、テキスト・ベース・フォーマットのデータの送信を意味します。対照的にバイナリー交換サービス は、特定のコンピューター言語または特定のベンダーに関連付けられているフォーマットでデータを交換します。

バイナリー交換サービスを使用するメリットを以下に示します。
  • Web サービスよりも高速な実行時応答が実現する
  • 構成ファイルを維持する必要がない
  • 従来型 Web サービスに関連するテクノロジーを習得する必要がない

バイナリー交換サービスを使用する場合の短所は、アクセス可能度が低下することです。バイナリー交換サービスは、サービスに必要なバイナリー・フォーマットでデータを伝送するソフトウェアのみが直接使用できます。

SOA によるビジネスへの影響

SOA は、 ビジネスに対していくつかの重要な影響を与えます。 まず、各コンポーネントが相対的に独立したユニットの場合、企業は、ビジネスの変更または技術的変更に対して、より迅速に、かつ費用と混乱を抑えて、対応することができます。

変化に対して迅速かつ有効に対応する企業の能力は、アジリティー と呼ばれます。適切に構築された SOA では、時間の経過に伴いアジリティーが向上します。

SOA は、ユーザーのコラボレーションにも影響します。最も技術的なサービスは別として、よく練られたサービスとは、粒度が粗い ものです。粒度が粗いサービスでは、関心領域が非常に幅広く、ビジネスに携わる人々がソフトウェアに関する知識を持たなくても、サービスの目的を理解できます。粒度の粗いサービスの集合によって企業のビジネス手順を扱う場合、ビジネス・アナリストとソフトウェア専門家は、豊富な知識で情報を共有し、各サービスの目的と有効範囲に関する初期の協議にユーザーを取り込み、ビジネス手順の変更がもたらす結果を理解することができます。ヒューマン・コミュニケーションが容易であることは、SOA が持つ重要な利点です。これは、アーキテクチャーがビジネス・プロセスを編成する上での第一原則となることを示唆します。

巧みに設計されたサービスは、再使用可能である可能性が高くなります。 企業は、少なくとも、新規ソフトウェア開発コストの発生を抑え、ソフトウェア・インベントリーの信頼性を徐々に向上させるという 2 つの方法から、再利用のメリットを得ることができます。既存のサービスを新規アプリケーションに配置する場合、最初から作成されたソフトウェアのデプロイで必要となるテストに比べると、実施する大規模なテストの数を減らすことができます。

SOA を使用して、ビジネス・プロセスとデータの可用性を向上させることができます。例えば、保険会社の代理人がワークステーションからメインフレーム・プロセスを呼び出し、特定の顧客の保険料を見積もるとします。競争の圧力から、企業は顧客が Web で見積もりを依頼できるようにすることを望んでいますが、従来 Web にはメインフレームとの直接リンクがありません。企業がブラウザーから個人情報データを受け入れ、メインフレームの分析ソフトウェアを使用してデータを処理し、顧客に対して応答するために必要なものとは何でしょうか?このためには、ブラウザーと分析ソフトウェアの相互作用を処理する新しいサービスの開発などが必要となります。ビジネスへの影響とは、拡大する市場におけるより新しいプロセスなのです。

上記の情報には、「Enterprise Web 2.0 with EGL」(MC Press, 2009; http://www.mc-store.com/5107.html) からの抜粋が含まれます。


フィードバック