...

Messaging 1 WASV6.1による基幹システム設計Workshop

by user

on
Category: Documents
71

views

Report

Comments

Transcript

Messaging 1 WASV6.1による基幹システム設計Workshop
WASV6.1による基幹システム設計Workshop
Messaging
1
Agenda
„
„
„
Messaging(メッセージング)とは
WASV6.1におけるメッセージング環境
メッセージング基盤設計
‹
‹
‹
‹
„
„
メッセージング基盤の計画
接続方式,キュー配置,ネットワーク・リンクの検討
メッセージ信頼性の検討
負荷分散/可用性向上の実装
WASV6.1でのJMSプロバイダー選択のポイント
補足
‹
‹
ESB(Enterprise Service Bus)
Hints&Tips
Messaging
MQ
ME
ESB
2
はじめに、メッセージングとはどういうものなのか、その特徴・使用方法についてご説明します。その次に、
メッセージングを実装する製品であるMEとMQについて、トポロジー・信頼性・負荷分散/可用性を中心に
ご説明します。纏めとして、WASV6.1でのMQ/MEの選択指針についてご説明します。
2
Messaging(メッセージング)とは
‡ Messaging(メッセージング)とは
‡ メッセージングの利用形態
‡ メッセージ・キューイングとUOW
3
3
Messaging(メッセージング)とは (1/3)
„
メッセージングとは
‹
„
プログラム間のコミュニケーション手段の一つ
以下の2つの側面がある
‹
メッセージ・インタフェース
¾
‹
プログラム間インタフェースをメッセージ形式で規定する方法
メッセージ・キューイング⇒当資料の主題
¾
メッセージ転送に一時保管場所としてキューを利用する方法
メッセージ・インタフェース
送信者
メッセージング
・プロバイダー
送信
受信者
受信
メッセージ・
キューイング
4
このページでは、システムにおけるメッセージングの特徴について説明します。以下の文章は、一般的
なMessaging(メッセージング)の考え方、特徴についての解説です。
メッセージングとは、人同士のコミュニケーションで例えれば電子メール(郵便)に似ています。電子メー
ルでは、用件を書いて、宛先を設定し、送信ボタンをクリックすれば、送信者は次の仕事に取り掛かれま
す。一度預かったメールは、電子メールのプロバイダーが責任を持って、宛先の受信者のメール・ボックス
に配信します。受信者は自分の都合の良いときに受信メールをチェックし、内容に応じたアクションをとる
ことができます。または、新着メールが届いたタイミングでメール・ソフトがポップ・アップ画面や音で通知し
てくれます。
これが、電話のような相手と直接接続する必要がある方法(密結合)では、相手の都合に大きく左右され
ることになります。(相手が電話の前にいなかったり、多忙であったりすれば、何コールも待たされ、ついに
はあきらめることになり、何も相手に伝えられないまま処理が進みません。)
電子メールの良いところは、このように相手の都合に左右されないということ(非同期)、相手と直接接続
する必要がないこと(疎結合)にあります。反面、急ぎの用件の時には相手がすぐにメールを見るとは限ら
ないので、誰しもメールではなく直接電話するでしょう。
このように、仕事を進める上で必要なコミュニケーション手段は、目的に応じて使い分けることが重要で、
仕事の効率を上げる一つのコツであることはご理解いただけると思います。システム間、プログラム間の連
携の場合も要件に応じ連携方法を使い分けることが、処理の効率を上げ、トラブルを最小化することにつ
ながります。
(※)メッセージングという言葉を広義で解釈すると、フォーマットをメッセージ形式で規定したデータ連携手
法全般(つまり直接コネクションを張る形式も含まれる)を指しますが、当資料ではキューを介したメッセー
ジング(メッセージ・キューイング)を主題とします。
4
Messaging(メッセージング)とは (2/3)
„
メッセージングの特徴
‹
メッセージ・インタフェース
メリット
‹
デメリット
・一度決めたメッセージ・インタフェースさえ
守れば、処理内部のロジックを変更しても、
他の処理に影響を及ぼさない
・人が目で見て、理解出来る形式である
・メッセージ形式不正の場合、受信側の
フォーマット解析の際にエラーが発生する
(※) WebServiceではJAXRPC等の規定に
基づき、提供されたWSDLを公開し、使用
するので開発時に予めエラーを除去できる
‹
メッセージ・キューイング
メリット
デメリット
・転送途中でのデータ編集、型変換などの
加工がしやすいため、アプリケーション間
のインタフェース/プロトコル差を吸収する
処理を組み込みやすい
・高負荷時にキューが一時的なバッファー
となる
・相手と直接接続しないので、相手の稼動
状況が分からない
・システム的な作業単位(UOW)が
キューを境に分かれる
5
メッセージングの特徴をキーワードで示すと「非同期」、「疎結合」と表現できると思います。通常のWeb
(HTTP)が「同期」的で「密結合」であることを考えると、言わばそれぞれが対極に位置し、適用すべき範囲
が異なります。そのためシステム構築にあたって通信プロトコルを決定する際はどちらの方式がお客様要
件によりマッチするかについて、初期段階で検討することが必要です。
5
Messaging(メッセージング)とは (3/3)
„
メッセージ・キューイング製品利用価値
‹
分散環境での接続性
¾
¾
¾
‹
メッセージ加工機能
¾
‹
マルチ・プラットフォーム環境の接続、ネットワーク障害ハンドリング機能
アプリケーションは宛先、メッセージ識別のみを意識し、システム構成(マシン、ネッ
トワーク)を意識しないで済む
ネットワーク・リンクによる信頼性のあるメッセージの転送が利用できる
データが全て文字型であればコード変換もしてくれる
可用性向上/負荷分散/拡張機能
¾
¾
メッセージ信頼性レベルの選択により、適切なコストで必要なサービス・レベルを
得ることができる
負荷分散、可用性向上機能により連続稼動性、拡張性を備えた基盤を整備できる
6
メッセージング製品の利用価値について纏めました。システム要件にメッセージングが入っている場合、
どのような効果を製品レベルで実現できるか、整理する際にご参照下さい。
6
メッセージングの利用形態
„
メッセージングを利用した処理
‹
一方向型
¾
¾
‹
送信者から受信者にメッセージを送信する
ディレード処理や、センターカット処理に活用できる
要求応答型
¾
¾
送信者から受信者にメッセージを送信し、受信者から送信者にメッセージ処理結
果を送信する
オンライン処理に活用できる
一方向型
要求応答型
送信者
受信者
送信者
受信
送信
宛先
受信者
要求送信
長時間を要するような
処理を起動しておき、
後から別プロセスで
結果を取得するような、
ディレード方式やセン
ターカット方式に適用
可能
要求受信
要求宛先
応答受信
応答送信
応答宛先
短時間で結果を戻
すオンライン方式
に適用可能
7
メッセージングの利用形態は様々ですが、つきつめると、一方向型のメッセージングと、要求応答型のメッセージン
グに分類することができます。
一方向型は、サービスを呼び出しておき、後から結果を取得するようなディレード(遅延)処理や、大量件数を処理す
るセンターカット(一括)処理に活用できます。
要求応答型は、受信者(サービス)が送信者(リクエスター)に処理結果を戻すような、オンライン処理に活用できます。
ただし、メッセージ伝達の負荷を考えると、EJBやWebサービスと比較して、パフォーマンスは劣るかもしれません。パ
フォーマンスの観点からメッセージングを利用して要求応答を行うメリットを生かせるのは、送信側と受信側が並行し
て処理を行うような場合です。ただし、送信者側と受信者側のトランザクションが分離してしまうので、障害ケースのイ
ンダウト処理について、入念に検討する必要があります。
7
メッセージ・キューイングとUOW
„
メッセージ・キューイング方式ではリソース更新のUOWが分かれる
‹
メリット
‹
デメリット
リソース更新がローカルで完了するため、ロック保持時間を分割/最小化できる
¾
システムを跨ったリソース更新においてUOWを一つにはできない
⇒実現には他の分散同期処理方式を選択する必要がある
¾
要求/応答型
一方向型
分散同期処理方式
送信タスク
リソース
更新
送信
同期点取得
要求タスク
更新
要求送信
応答受信
更新
同期点取得
メッセージング・キューイング方式
受信タスク
送信タスク
受信
リソース
更新
同期点取得
リソース
......
同期点取得
メッセージング
・プロバイダー
更新
送信
同期点取得
要求タスク
更新
要求送信
同期点取得
応答タスク
要求受信
更新
応答送信
リソース
UOW
リソース
リソース
応答受信
更新
同期点取得
送信
メッセージング
・プロバイダー
受信タスク
受信
更新 リソース
同期点取得
受信
メッセージング
・プロバイダー
応答タスク
要求受信
更新
リソース
応答送信
同期点取得
......
8
メッセージング・キューイング方式を採用した業務処理では非同期処理を前提にしていますので、メッ
セージがキューに入った後いつ相手がそのメッセージを処理するかについての保証はありません。その
ため、その業務が分散トランザクション処理を含んでいる場合は、トランザクションの作業単位をメッセー
ジ・キューを跨って定義することはあまり現実的ではありません。
8
WASV6.1におけるメッセージング環境
‡
‡
‡
‡
JMS(Java Messaging Service)とは・・・
WASV6.1におけるメッセージング環境
メッセージング・プロバイダー
SIBusとメッセージング・エンジンの関係
9
9
<参考>JMS(Java Messaging Service)とは・・・
‹
J2EE標準のメッセージング・インターフェイス
¾
‹
JMSで実装すると、メッセージング・サービスに依存しないアプリケー
ションを構築可能
¾
¾
‹
サン・マイクロシステムズ㈱が中心になって標準化
JMSクライアント環境を提供するメッセージング・サービス=JMSプロバイダー
JMSインターフェイスによりメッセージング・サービスを利用するアプリケーション=
JMSクライアント
メッセージング機能はメッセージング・サービスが独自に実装
JMSプロバイダー
SIBus
JMS
Client
JMS
WMQ
他社メッセージ
ング製品
メッセージング・サービス
JMS
JMS
Client
10
JMSはJ2EE標準のメッセージング・インターフェイスです。標準のインターフェイスでコーディングすることにより、
メッセージング・サービスに依存しないアプリケーションを開発できます。JMSを利用できる環境を提供するメッセージ
ング・サービスを、JMSプロバイダーと呼びます。また、JMSインターフェイスを利用してメッセージング・サービスを利
用するアプリケーションを、JMSクライアントと呼びます。
JMSはインターフェイス定義が中心で、メッセージングの機能については触れていません。その為、メッセージング機
能の実装は、各ベンダーに任されています。
10
WASV6.1におけるメッセージング環境
WebSphere Application Server V6.1利用可能なJMSプロバイダー
„
‹
サービス統合デフォルト・メッセージング・プロバイダー(SIBus)
¾
‹
WebSphere MQ JMS プロバイダー
¾
‹
別途MQのライセンスが必要。
バージョン 5 デフォルト・プロバイダー(組み込みメッセージング)
¾
‹
WASと同一プロセス内で稼動するメッセージング・エンジンを使用。
前のリリースとの後方互換性維持のためのサポート。
汎用 JMS プロバイダー
¾
サード・パーティーのメッセージング・システムを使用するために提供。
WebSphere Cell環境
MQ
JMS
(ローカル接続/
クライアント接続)
Application
Server V6.x
Application
Application
Server V6.x
Application
JMS
JMS
MQリンク
ME
組み込みMQ
WebSphere Cell環境
ME
Application
Server V5.x
Application
JMS
JMS(ローカル接続/
クライアント接続)
3rd. party MQ
SIBusリンク
11
・サービス統合デフォルト・プロバイダー
WebSphere Application Server のサービス統合テクノロジーは、デフォルトのメッセージング・プロバイダー
を介してアクセスされるサービス統合バスを構成した際に、メッセージング・システムとして機能することが
できます。このサポートは、 WebSphere Application Server の一部としてインストールされ、管理コンソー
ルを介して管理され、 WebSphere Application Server ランタイムに完全に統合されます。
・WebSphere MQ JMS プロバイダー
WebSphere Application Server には、WebSphere MQ JMS プロバイダーのサポートも含まれます。サポー
トされている WebSphere MQ のバージョンで使用するために提供されます。
・バージョン 5 デフォルト・プロバイダー
前のリリースとの後方互換性のため、WebSphere Application Server では バージョン 5 のデフォルト・メッ
セージング・プロバイダーもサポートしています。これによって、WebSphere Application Server バージョン
5 の組み込みメッセージング・システムとともに使用するリソースを構成できます。バージョン 5 のデフォル
ト・メッセージング・プロバイダーは、サービス統合バスでも使用できます。バージョン 5 のデフォルト・メッ
セージング・プロバイダーは、バージョン 5 の組み込み WebSphere MQ プロバイダーです。バージョン 5
のリソースを引き続き使用して、組み込みメッセージングを使用する混合バージョン・セル内で、バージョン
5 のノードと通信するアプリケーションで使用できるように、設計されています。
・汎用 JMS プロバイダー
WebSphere Application Server には、汎用 JMS プロバイダーのサポートも含まれます。サード・パー
ティーのメッセージング・システムで使用するために提供されます。メッセージ駆動型 Bean を使用する場
合、メッセージング・システムは ASF ( Application Server Facilities )をサポートする必要があります。
11
メッセージング・プロバイダー
„
ME
メッセージング・エンジン:
WASに組み込まれているメッセージング・プロバイダー
‹
プログラムから通信処理を隠蔽
¾
¾
¾
¾
¾
‹
一般的にキューを介して通信を実施。アプリケーションは、キューを宛先として指
定して、メッセージング・プロバイダーにメッセージを渡す。
宛先までメッセージを届けるのは、メッセージ・プロバイダーの役割。
アプリケーションはメッセージング・プロバイダーが提供するプログラミング・イン
ターフェイス(API)を利用してメッセージを送受信。
通信ロジックを意識せず、業務ロジックだけをコーディングすることで動作。
メッセージ・フォーマットだけを守れば通信可能。
WebSphere MQのような非同期処理を実現
¾
¾
通信相手が稼動していなくても処理を継続可能。
並行処理を実現。
Messaging Engine
[Messaging Provider]
Message Producer
[JMS Client]
API
[JMS]
Destination
API
[JMS]
Message Consumer
[JMS Client]
12
一言で言うと、MEは、メッセージング・プロバイダーです。アプリケーションでメッセージングを行う為のイ
ンフラを実装しており、それを利用する為のAPIを提供しています。
一般的にメッセージングでは、FIFO(First-In First-Out)に基づいて実装されたキューを介して、メッ
セージをやりとりします。このキューのことを、宛先(Destination)と呼びます。これにより、アプリケーション
には通信ロジックを記述する必要がありません。また、送信側アプリケーションと受信側アプリケーションは、
同期を取らずに実行できるので、お互いがそれぞれの処理を継続できます。つまり、非同期処理が可能
になります。
送信アプリケーションと受信アプリケーションでは、やりとりを行う宛先と、メッセージのフォーマットさえ分
かれば、通信が可能です。
12
SIBusとメッセージング・エンジンの関係(1/3)
„
ESB概要(参考)
‹
‹
ESBは、分散システムを構築するためのアプローチであるSOAの通信基盤
IBMのBusiness Integration Reference Architectureでは、各種サービスを
緩やかに連携するための仲介及び通信を行うレイヤーに位置づけられてい
る
¾
サービス間の連携に必要な作業を代わりに行うことで疎結合を実現する
13
SIBusとメッセージング・エンジンの関係を説明する前に、SIBusとSIBusが目指すESBという概念を紹介致します。
ESBは各種サービスを疎結合するための仲介及び通信を行うレイヤーに位置づけられています。同期・非同期通信、
複数のプロトコルをサポートする通信経路です。
各種サービスが抽象的なインターフェースを持つことで、そのサービスの実装や稼動するプラットフォームを意識せず
利用することができます。これはSOAがめざす組み合わせによるシステムの構築への大きな前進と言えます。しかしこ
のままでサービスを連携するにはいくつか考慮点があります。
•まずサービス連携に当たって、連携相手のネットワーク上のロケーションなどの情報が必要です。例えばWebサービ
スの場合、サービス・リクエスターの中でサービス・プロバイダを表すWSDLのロケーションを記述する必要があります。
•またサービス・リクエスターがサービス・プロバイダを呼び出すには、双方が同じトランスポート・プロトコルを使用する
必要があります。
•さらにリクエスターの要求によって、別のサービスへルーティングしたい場合、サービス・リクエスターの中でそのルー
ティングの制御ロジックを記述する必要があります。
上記のように個々のサービスが明確に定義されているインターフェースを持っていても、連携する際、通信レベルで
お互いに依存することになります。ESBの役割は、上記のようなサービス間の連携に必要な作業を個々のサービスの
代わりに行なうことで、サービス間の通信レベルでの依存をできるだけ取り除き、疎結合を実現することです。
13
SIBusとメッセージング・エンジンの関係(2/3)
„
SIBus機能一覧(参考)
‹
‹
‹
‹
‹
メッセージング機能
JMSプロバイダー機能
高可用性機能
負荷分散機能
外部バスとの接続機能
¾
¾
‹
メディエーション機能
¾
¾
‹
SIBusリンク
MQリンク
メッセージ・フォーマット変換
ルーティング
SIBWS機能
¾
セキュリティー機能
14
SIBusは、ESBを実装したもので、以下のような機能を提供します。
・メッセージング機能
SIBusでは、メッセージング・サービスを実装することで、疎結合を実現しています。
・JMSプロバイダー機能
SIBusをJMSプロバイダーとして利用する機能できます。
・高可用性
HAマネージャーと連携して、SIBusのメッセージング・サービスの実体として扱われるメッセージング・エンジ
ン(以下ME)の可用性を高めることができます。
・負荷分散機能
メッセージを送信する際に、複数のキューに振り分けることで、負荷を分散することができます。
・外部バスとの接続機能
前のリリースの組み込みメッセージングでは、MQとチャネル接続できない、といった制約がありました。
SIBusではMQとのチャネル接続が可能です。
・メディエーション機能(Mediation)
メッセージのフォーマット変換や、ルーティングを行うことができます。メディエーションを利用すると、サービ
スの変更を最小限にとどめたり、サービスの繋ぎ替えが可能になります。
・SIBWS機能
WASに標準で付属のSIBus Web Service enablementを導入することで、WebサービスもSIBusに統合で
きます。この機能をSIBWSと呼びます。
14
SIBusとメッセージング・エンジンの関係(3/3)
„
ME
SIBusにおけるメッセージング機能はMEが提供
‹
MEをメッセージング・プロバイダーとして利用する為には、以下の手順でSIBusを構成
2.
バス(Bus)を定義します。
バス・メンバー(Bus Member)としてアプリケーション・サーバー(AS)もしくはクラスターを登録。
3.
バス・メンバーを指定して、宛先(Destination)を作成。
1.
ASをバス・メンバーとして登録すると、サーバー内に1つのMEが作成される。
クラスターをバス・メンバーとして登録すると、高可用性機能やワークロード共用を利用可能な、MEクラスターが作成可能。
-
バス・メンバーとして指定されたASのME内に、メッセージ・ポイント(キュー or トピック)が作成。
-
‹
アプリケーションは次のようにメッセージング機能を利用する
1.
バス名を指定して接続。
2.
宛先に対してメッセージを送信/受信。
バスによって抽象化されているが、実際にはメッセージング・エンジン(ME:Messaging Engine)に対して接続します。
-
宛先によって抽象化してメッセージを送信/受信するが、実際にはメッセージ・ポイント(MP:Message Point)にメッセージ
が届く。
-
Bus Member
Destination
Destination
Application Server
Messaging Engine
Message Point
Bus
Bus Member
Destination
Destination
Application Server Cluster
Clustered Messaging Engine
Message Point
Message Point
Message Point
15
正確には、SIBusがメッセージング・プロバイダーです。SIBusとMEは密接なかかわりがあります。SIBusは
仮想的なメッセージング・プロバイダーで、実際にメッセージング機能をつかさどっているのがMEです。ア
プリケーションは、SIBusのインスタンスであるバスに接続し、宛先を介してメッセージのやり取りを行います。
ただし実際には、アプリケーションはMEに接続して、メッセージ・ポイントを介してメッセージのやり取りを
行っています。
メッセージング・プロバイダーを利用するために、WAS管理者はバスを作成し、バス・メンバーを登録して、
そのバス・メンバー上に宛先を作成します。これにより、バス・メンバーとして登録したサーバー/クラスター
にはMEが生成され、宛先に関連付けられたバス・メンバーのMEにはメッセージ・ポイントが生成されます。
サーバーとMEは、同一プロセス内で動作します。
WAS管理者は抽象化されたバスや宛先だけでなく、実体であるMEやメッセージ・ポイントを意識しなくて
はなりませんが、アプリケーションを開発する上では、バスに接続し宛先にメッセージを送信する、という考
え方に基づいてコーディングできます。
15
<参考>宛先の種類
„
ME
メッセージング・エンジンでは2種類のメッセージ・ポイントが
利用可能です
‹
キュー・ポイント(QP:Queue Point)
¾
¾
¾
‹
バスにキュー宛先を作成すると、MEにキュー・ポイントが生成されます。
1つのメッセージを、1つの受信者が受信します。(PTP:Point To Point)
First In First Out(FIFO)の概念に基づいて、通信を仲介します。
トピック・スペース(Topic:Topic Space)
¾
¾
バスにトピック宛先を作成すると、MEにトピック・スペースが生成されます。
1つのメッセージを、複数の受信者が受信します。(Pub/Sub:Publish/Subscribe)
Producer
Queue Point
Sender
Consumer
Receiver
Subscriber
Topic Space
Publisher
Subscriber
Subscriber
16
バスの宛先には、PTPでやり取りを行う為のキュー宛先と、Pub/Subを行う為のトピック宛先が利用でき
ます。
キュー宛先を作成すると、宛先に関連付けられたバス・メンバーのMEにキュー・ポイントが生成されます。
PTPの場合、メッセージを送る側を送信者(Sender)、メッセージを受け取る側を受信者(Receiver)と呼
びます。
トピック宛先を作成すると、宛先に関連付けられたバス・メンバーのMEにトピック・スペースが生成されま
す。
Pub/Subの場合、メッセージを送る側をパブリッシャー(Publisher)、メッセージを受け取る側をサブスクラ
イバー(Subscriber)と呼びます。
キュー・ポイントやトピック・スペースなど、宛先の実体にあたるオブジェクトを、MEではメッセージ・ポイント
と呼びます。
16
<参考>メディエーション
„
ME
メディエーションとは
‹
宛先に関連付けて、メッセージのルーティング・パスの変更や、データ・フォー
マットの変換を行う機能
¾
¾
1.
2.
3.
4.
メディエーション開発のためのAPIを使用してコーディングする
ビジネスロジックから制御ロジックを分離することが可能になる
アプリケーションが送信したメッセージをMEが受け取ると、メッセージをメディエーション・ポ
イントに格納。
メディエーション・ポイントにメッセージが格納されると、そのメッセージはメディエーションとし
て登録した、メディエーション・ハンドラー・リストに受け渡される。
メディエーション・ハンドラー・リストに指定されている全てのメディエーション・ハンドラーが処
理を完了すると、メッセージはメッセージ・ポイントに格納される。
アプリケーションがメッセージを受信する時は、メッセージ・ポイントからメッセージを取得。
メディエーション・
ハンドラー
メディエーション・
ハンドラー・リスト
メディエーション内のロジックは
ユーザーが開発
メディエーション
3
送信アプリケーション
6
5
4
メディエーション・
ポイント
受信アプリケーション
2
キュー・
ポイント
1
メッセージ・
ポイント
17
メディエーションは、宛先に関連付けることで、その宛先に届いたメッセージのルーティング・パスを変更
したり、メッセージの中身を操作する機能です。
メディエーションが関連付けられた宛先にメッセージを送信すると、メディエーション・ポイントにメッセー
ジが格納されます。通常の受信アプリケーションは、メディエーション・ポイントにあるメッセージは取得でき
ません。メディエーションのみが取得できます。メディエーションに関連付けられたメディエーション・ハンド
ラー・リストが呼び出され、メディエーション・ハンドラーが一つずつ呼び出されます。全ての処理が成功す
ると、メッセージはメッセージ・ポイントに格納されます。ここではじめて、受信アプリケーションがメッセージ
を取得できます。
InfoCenter - 「メッセージ・ヘッダーの使用」
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.websphere.pmc.nd.do
c/tasks/tjy1502.html
InfoCenter - 「メッセージ・ペイロードの使用」
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.websphere.pmc.nd.do
c/tasks/tjy1501.html
17
メッセージング基盤設計
メッセージング基盤の計画
‡
‡
‡
‡
‡
‡
‡
メッセージング基盤の計画
適用業務の分類基準
適用業務パターン
一方向型適用業務の設計/実装のポイント
メッセージ処理順序のFIFO保証に必要な構成/運用
エラー退避キューの検討
要求/応答適用業務の設計/実装のポイント
18
18
メッセージング基盤の計画 (1/4)
„
業務要件の定義
‹
アプリケーション・プロファイルの把握
¾
‹
メッセージ・フローのパターン
¾
¾
¾
¾
‹
‹
‹
既存/新規、種類、数、稼動環境
一方向
要求/応答
Publish/Subscribe
ルーティング(1:1/1:N/N:M/アグリゲーション)
データ変換機能の要否
メッセージ処理順序の保証が必要な単位
メッセージのリカバリー機能、手順
¾
リソース更新との整合性
z
z
¾
¾
‹
UOW範囲/2フェーズ・コミット要否
リスタート・ポイントの保持要否
不正メッセージの検知/修正方法
システム障害発生時に必要なリカバリー機能
19
問題判別に必要な資料取得機能
このページではメッセージング方式によるシステム構築を行う際に、定義すべき業務要件について解説
します。
メッセージ・フローは、対象とする業務により様々で、通常、外部設計局面(または内部設計局面)になら
ないとメッセージ・フローの詳細は確定しません。基盤として整備する必要がありそうなメッセージ・フロー
をパターンとして定義することが、要件定義の第一歩となります。
大方のケースでは、突き詰めると一方向、または要求/応答のいずれかにパターン化することができます。
19
メッセージング基盤の計画 (2/4)
„
システム要件の定義
‹
‹
‹
開発言語、ツール
基盤共通APIの仕様
メッセージ属性
¾
‹
‹
‹
‹
‹
‹
信頼性、ヘッダー設定値、コード変換
稼動サーバー構成
接続ネットワーク構成
冗長構成(可用性向上/負荷分散)の要否
メッセージング・プロバイダー⇔アプリケーション間の接続構成
キュー配置、ネットワーク・リンク構成(→後述)
メディアの容量、配置、冗長構成(→後述)
¾
¾
MQ=キュー・ファイル、ログ・ファイル
ME=データ・ストア、ファイル・ストア
20
このページではメッセージング方式によるシステム構築を行う際に、定義すべきシステム要件について
解説します。
20
メッセージング基盤の計画 (3/4)
„
性能要件の定義
‹
‹
‹
‹
レスポンス・タイム
スループット
1UOWあたりのメッセージ処理数
性能評価のために取得する統計値
¾
„
製品側統計/各処理タイム・スタンプ
可用性要件の定義
‹
‹
計画停止頻度/サービス停止許容時間
最大障害回復時間
21
このページではメッセージング方式によるシステム構築を行う際に、定義すべき性能要件と可用性要件
について解説します。
21
メッセージング基盤の計画 (4/4)
„
運用要件の定義
‹
‹
‹
起動⇒業務開局手順
想定障害項目/障害検知/回復手順
監視項目
¾
¾
¾
‹
ハウス・キーピング
¾
¾
‹
‹
‹
‹
‹
„
キュー滞留状況
チャネル稼動状況
製品のエラー・メッセージ
滞留メッセージのクリア
バックアップ取得→不要ログの削除
業務閉局⇒停止手順
縮退/切戻し手順
システム拡張手順
PTF適用手順
バッチ化/自動化項目
その他:セキュリティ
¾
¾
¾
¾
ユーザー/グループ認証
各種権限設定必要資源/認可の単位
キュー上のメッセージ暗号化要否
ネットワーク上のデータ暗号化要否
22
このページではメッセージング方式によるシステム構築を行う際に、定義すべき運用要件について解説
します。
22
適用業務の分類基準
„
応答の必要性
‹
‹
„
要求側への応答送信を必要とするかどうか
応答データの待ち受けの間、要求側の操作/リソースをロックするかどうか
データ・フロー
‹
‹
応答不要⇒一方向型
応答要⇒要求/応答型
¾
¾
„
処理の即時性
‹
単位処理あたりの開始から完了までに許容される時間
¾
„
複数データ間の処理順序を遵守する必要があるかどうか
¾
遵守不要、FIFO(First In First Out)
受信業務
受信
処理
受信
処理
….
リソース
データ入力元のリソース
¾
DB/ファイル/エンド・ユーザー/プログラム
要求業務
処理
要求送信
リソース更新有無
‹
„
リソース
送信業務
処理
送信
処理
送信
….
データの入力元
‹
„
即時=数秒~数十秒/ディレード(遅延)=数分~数時間/バッチ:半日以上
処理順序
‹
„
同期待:応答データを同期的に待受ける
非同期取得:要求側の都合の良いときに、非同期に取得する
‹
要求受信
処理
応答送信
リソース(DB/ファイルなど)の更新があるかどうか
同期点取得範囲
作業単位(UOW)を合わせる必要がある範囲
応答業務
リソース
応答受信
処理
......
......
リソース
23
システムの設計・実装・保守を行なう上でシステムを通信基盤の観点から業務を見たときのポイントを
チャートに示します。ここに示した分類基準に基づいてシステムを考えていくことで、該当業務が使用する
通信基盤部分に求められる各種要件を押さえることができます。
23
<参考>適用業務パターン
„
前述の分類基準による適用業務パターン
分類基準
パターン名
データ・フロー
応答
即時性
処理順序
入力リソース
リソース更新有無
/同期点取得範囲
一方向型
不要
数分
遵守不要
エンド・ユーザー
リソース更新なし
ブロード・キャスト
不要
数秒~数時 要件に依存 エンド・ユーザー
間
/プログラム
要件に依存
パブリッシュ・
サブスクライブ
不要
数時間
DB/ファイル
ローカル・リソース更新
⇔データ送受信
バッチ転送
不要
数分~数時 DBレコード
間
順
DB
DB更新⇔データ送受信
DBレプリケーション
不要
数分
DB/ファイル
ローカル・リソース更新
⇔データ送受信
オンライン転送
不要
数~数十秒 入力受付順 プログラム
更新なし
イベント連動
同期待
数~数十秒 DB更新完
了順
ローカル・リソース更新
⇔
リモート・リソース更新
オンライン取引
同期待
数~数十秒 入力受付順 エンド・ユーザー
リソース更新なし
オンライン照会
業務処理⇔データ送受
信
非同期応答
要求/応答型
リソースの
レコード順
リソースの
レコード順
エンド・ユーザー
非同期取 数十秒~数 入力受付順 DB/ファイル
得
分
24
前ページでご紹介した観点で業務の特長を見ていくと、業務で使用する通信形態を様々なパターンとし
て分類することができます。それを纏めたのがこのページのチャートです。
データの流れが一方向型か双方向(要求と応答が一対になっているか)で大別できます。それを踏まえ、
応答に対する時間スパンや同期点の調整などが主な分類ポイントになります。
次のページから、一方向/双方向の区分けで見た場合の設計時、および実装時のポイントを示して行き
ます。
24
一方向型適用型業務の設計/実装のポイント
‹
送信者→受信者間にデータを一時保管する場所を確保する
‹
処理順序の遵守が必要である単位を業務要件として決定する
‹
送信者→受信者への確実なデータ転送基盤を整備する
¾
¾
¾
メッセージ・キューイング方式を利用
リソース単位(テーブル/ファイル単位など)/タイミング(静止点間など)
転送経路でのデータ・ロスト/逆転/重複を防ぐための構成/運用が必要
z
z
z
‹
受信者がデータ到着を待つ受身の状態にあるときの動作
¾
¾
受信待受け常駐タスクが必ず必要になる
受信業務への連動方法の選択
z
z
z
‹
運用により受信業務を起動(開局から常駐/タイマー起動/ジョブ・ネット起動)
MQの場合:トリガリング/MDB(WAS ListenerPort機能で実装⇒最大起動リトライ回数設定可能)
MEの場合:MDB(WAS J2C Activation Specificationの実装⇒最大起動リトライ回数設定不可)
処理開始~処理終了までのタイマー
¾
‹
構成:処理順序を遵守したい単位でコンポーネントを単一とする
9 送信キュー⇒ネットワーク・リンク⇒受信キュー(排他使用属性=YES)
メッセージング・プロバイダーのエラー退避キューは設けない
運用:送受信処理を逐次化(一時点で稼動する送信タスク、受信タスクを単一化)する
9 ME/MQ共通:単純リトライでは未確定メッセージの抜けが生じる可能性がある
⇒実装/運用の工夫で逐次化を行う
9 MQ/zキュー共用の場合:ConnTagオプション+単純起動リトライにより逐次化保証が可能
通常タイマーを業務として持たないため、処理状況/時限監視、障害検知/再処理は運用で
行う必要がある
処理結果の確認と業務の役割
¾
¾
25
業務的な静止点の取得(送信側で取得し、受信側へ通知/取得)
送受信者双方のリソースの精査/検算を行う(データ送受信数、データ項目の積算値など)
メッセージングという観点に限定した上で、一方向型メッセージを実現する際のポイントを纏めてみまし
た。
一方向型を採用した場合、業務はデータの伝達を通信基盤に委譲することになりますので、通信基盤
側で相手に確実にデータを送付するための仕組みを実現することになります。この要件はWebSphere
MQやWASのMessaging Engineに代表されるメッセージングの通信基盤ソリューションが得意としている部
分です。
業務によりますが、メッセージの伝達順序をどの程度まで基盤で保証すべきかを検討します。すべての
段階において順序を保証する必要は必ずしもなく、何らかの単位で分割が可能な場合が多いです。この
検討項目は障害時のリカバリーを考える上でリトライのポイントを決定する意味でも重要です。
一般に順序の保証を高めていこうとすると、ひとつのコンポーネント、単一伝達経路で実装する部分の
度合いが高くなりますので実行の並列度は下がります。
25
<参考>メッセージ処理順序のFIFO保証に必要な構成/運用
業務実装
・プライオリティ/メッセージ信頼性レベルを同一にする
・ConnTagの組み込み(MQ/zキュー共用環境)
・送受信双方のリソース整合性検査
・ポイズン・メッセージ発生通知/修正/再入力
・多重障害発生時のリカバリー方法
送信タスク
リソース
メッセージング
・プロバイダー
更新
送信
送信
リンク
ログ/キュー/リソース
送信タスク
リソース
更新
送信
メッセージング
・プロバイダー
送信
リンク
基盤の構成
・単一経路(キュー/ネットワーク・リンク構成)
・エラー退避キュー=なし
・受信キュー排他使用オプション=YES
・TPモニターで同期点処理が終わるまでは再始動を許可しない設定とする
・代替系の構成(ネットワーク/筐体/OS/ミドルウェア)
・メディアの冗長化
メッセージング
・プロバイダー
受信タスク
稼動系
受信
リンク
受信
更新
リソース
ログ/キュー/リソース
メッセージング
・プロバイダー
受信タスク
受信
リンク
代替系
受信
更新
リソース
運用項目
・送受信タスク稼動の逐次化
・コンポーネント稼動状況の監視/障害検知
- 各キューの滞留状況の監視
- リンク稼動状況の監視
・代替系への切り替え/再始動
・処理状況進捗/時限の管理
・ポイズン・メッセージ発生の検知
26
このチャートでは前のページでご紹介したポイントを図として表現しました。
26
エラー退避キュー採否の検討
„
エラー退避キューとは
‹
メッセージ不正でエラーが発生した場合、該当メッセージを退避するためのキュー
‹
機能/動作はメッセージング・プロバイダーの実装に依存
¾
„
エラー退避キューのメッセージ退避原因
‹
メッセージング・プロバイダーのコンポーネントが送信宛先のキューに送信できない
¾
¾
¾
‹
キューの定義不正/FULL/送信抑制
コード変換失敗
ヘッダーのフォーマット/内容不正
メッセージ内容不正により受信アプリケーション処理でエラーが繰り返し発生
¾
¾
¾
¾
„
後続のメッセージ処理を継続するため
データ・フォーマット不正
データ型不正
データ値不正
更新先リソースの永続的なエラー
考慮点
‹
‹
エラー退避キューを設けると、メッセージの抜けが発生する
処理順序の遵守が必須である業務では設定禁止
¾
以下の運用手順でリカバリーする
z 不正なメッセージ発生の検知
z 送信抑制/受信タスク停止
z 滞留メッセージを取得、ファイルへ書出し
z 問題判別
z 修正 (製品ヘッダー不正⇒基盤により修正、データ不正⇒業務により修正)
27
z ファイルからキューへ再入力
不正なメッセージにより後続のメッセージ処理が継続できなくなった場合、該当するメッセージを別の
キューに退避させます。この方法をとった場合、退避させた(抜けてしまった)メッセージをどのようにリカバ
リーしていくか、その対策を運用で実施する必要があります。
基本パターンは不正となったメッセージを何らかの形で通知して、誰かが修正し、再度送信し直すことに
なりますので、この三つの作業をどのように行なうかデザインします。
27
<参考>エラー退避キューの実装
„
ME
MEでの実装
‹
例外宛先
¾
¾
‹
„
MQ
ME単位にデフォルトで自動作成される
z
SIBusリンク、MQリンクなどのMEシステム・タスクが退避先として使用する
キュー宛先ごとの例外宛先も作成可能
z
JMSX.DeliveryCount値が最大デリバリー失敗数を超えた場合、自動で例外宛先に退避
エラー理由などの情報は付加されない
MQでの実装
‹
デッド・レター・キュー
¾
‹
キュー・マネージャー単位にユーザーが作成/指定
z
DEFINE QLOCAL(dlqname)
z
ALTER QMGR DEADQ(dlqname)
バックアウト・キュー
¾
¾
ローカル・キュー単位にユーザーが作成/指定
z
DEFINE QLOCAL(boqname)
z
ALTER QLOCAL(qname) BOQNAME(boqname) BOTHRESH(integer)
ユーザーのエラー処理として、MQMD.BackoutCounがキュー属性BOTHRESH値を超えた場合に、
BOQNAMEで指定したキューにメッセージを退避
‹
MQDLHにエラー理由などの情報が付加される
‹
デッド・レター・ハンドラーによるデッド・レター・メッセージの監視と対応(送信リトライ、フォワード、クリ
アなど)が可能
28
¾
デッド・レター・ハンドラーはMQに付属
¾
¾
エラー・メッセージのMQMDも保存される
MQ運用管理製品でも同様の機能が提供されている
MEとMQでエラー退避キューの実装にどのような相違点があるかを纏めてみました。
MEの場合はメッセージがエラー退避キューに送信された場合になぜそのメッセージが退避キューに流
れてきたのかについての情報が付加されません。それに対してMQで実装する場合はデッド・レター・
キューに渡ったタイミングでそれらの情報が付加され、それらを解析するツールも用意されています。この
点は適用業務に対してどちらの基盤(MQ/ME)を選択するかを考える上でのポイントになります。
28
<参考>デッド・レター・ヘッダー(MQDLH)
MQ
29
このページは、デッド・レター・ヘッダーとして付加される情報になります。
29
<考慮点>ポイズン・メッセージのバックアウト
„
ME上のキュー宛先をリッスンするMDBで、処理をロールバックした際の動き
‹
‹
„
ME
「最大デリバリー失敗数」に達するまで、メッセージの受信 → ロールバックを繰り返す
「最大デリバリー失敗数」に達すると、「例外宛先」にメッセージを退避
メッセージ退避ができない場合の考慮点
‹
‹
‹
メッセージ処理順序のFIFOを守りたい場合 ⇒例外宛先は「なし」に設定
例外宛先がFULLになった場合
⇒例外宛先は「なし」と同じ動作
ポイズン・メッセージが発生した場合
⇒MDB起動⇔Rollback処理のループに陥る(CPUオーバー・ヘッドも大きい)
理由:MEはJCA(Java Connector Architecture)の仕様実装、JCAは起動試行最大数の規定が
ない
¾ 対策:アプリケーション・ハンドリングや運用による回避が必要
※MQをJMSプロバイダーとして選択した場合は、リスナー・ポートの最大試行回数の指定により
MDB起動回数を制限させること可能(エラー・メッセージも出力されるので監視可能)
¾
①
MDBアプリケーション
receive
public void onMessage( ){
例外発生!
繰り返し
ejbctx.setRollbackOnly();
}
②
rollback
30
例外宛先
③
例外宛先へ退避
メッセージの内容やフォーマットが不正などの理由で、何度処理を繰り返してもエラーになってしまい、
バックアウト処理がループしてしまう場合があります。このようなメッセージをポイズン・メッセージと呼びま
す。バックアウト処理のループにより後続メッセージの処理が止まることを避けるために、MDBはポイズン・
メッセージを別のキュー(例外宛先)に退避させる仕組みを提供します。
メッセージの退避を行うには、宛先の「最大デリバリー失敗数」と「例外宛先」プロパティーを指定します。
・MDB内でメッセージのロールバックが行われると、メッセージの「再デリバリー回数」が1つインクリメントさ
れます。
・ロールバックの回数が宛先の「最大デリバリー失敗数」に達すると、メッセージを「例外宛先」に指定した
キューに退避します。
例外宛先は、SIBus全体で同じ宛先を例外宛先として使用することも可能ですし(「システム」 を指定)、
宛先ごとに固有の例外宛先を指定する(「指定」)ことも可能です。
例外宛先に何らかの理由でメッセージの送信が失敗した場合、あるいはメッセージの順序性を保つ等
の理由で例外宛先を指定しない(「なし」に指定)場合には、MDBはループに陥ります。この場合、CPUな
どのリソースを大量に消費するほか、WASのスレッド・ハング検知機能でも検知することができません。
現状ではアプリケーション・ロジックと運用で回避する必要があります。
30
<参考>一方向型業務の設計/実装のポイント (1/2)
パターン名
処理概要/適用業務例
ブロード・
キャスト
z参考情報を予め登録された zリソース更新は伴わない.
関係者に送信する
z業務例
・業務連絡一般
・広告/宣伝
特徴
z宛先へのメッセージ配信保証の
要否は要件に依存.
9権限を持った管理者により、配布リストを管理す
る.
9メッセージ配信保証要件により、メッセージ信頼
性レベルを設定する.
9ブローカー機能はメッセージング製品提供機能を
り送信宛先を選別する制御が必 利用可能.(ME,MQ,WMBで標準提供)
要.
9Pub/Sub方式が適切であるかどうかの見極めが
(ブローカー機能)
重要.
zバブリッシュされた情報は配信
・Pub/Sub向きの業務
ソースとなるので、データ・ロストは
⇒送信宛先が受信者の都合により
許されない.
動的に変わる業務
zサブスクライバーへの配信メッ
(受信者が主体的にサブスクライブ
セージの蓄積/配信保証の要否は
を登録/削除することが基本)
要件に依存.
・Pub/Subに向かない業務
⇒送信宛先の変更がほとんどない業務
9メッセージの抜け/逆転は送信側が振るタイム・
スタンプをもとに受信側で制御する.
パブリッ
シュ・
サブスクラ
イブ
z情報発信者(パブリッシャー) zカテゴリ/キーワード/基準値によ
バッチ転送
z静的なリソース(DB/ファイ
は発信する情報にカテゴリ/
キーワード/基準値を設定し、
送信する.予め登録を行って
いる情報要求者(サブスクラ
イバー)に配信する.
z業務例
・メルマガ配信
・製品/技術情報配信
・特定業務情報配信
・異常値通報
設計/実装のポイント
z単位あたりのデータ量が大量に 9単位あたりのデータ量により、メッセージの分割
ル)のデータを転送する処理. なる場合がある.
を検討する.
z入力リソースのレコード順を遵守 9メッセージ処理順序の保証が必要.
する必要がある.
z業務例
z入力元データがあるので最悪の
・ファイル転送
場合、再送も可能.
・リモート定期帳票印刷
31
前述のパターン分類から一方向型の業務パターンを抽出して、それらの特徴と設計時、および実装時
のポイントを2ページに渡って纏めてみました。
一方向型のパターンでも考慮すべき点は少なくないことがわかると思います。
31
<参考>一方向型業務の設計/実装のポイント (2/2)
パターン名
適用業務例
特徴
設計/実装のポイント
DBレプリケー zマスターDBから利用者/グ z各拠点にDBを分散させる 9マスターDBから抽出/加工したデータはキューにメッ
ション
ループ別に必要な情報を抽 ことにより、マスターDBへの セージとして蓄積する.
出/加工して送信し、受信側 アクセス集中回避、照会レ 9メッセージ信頼性はパーシステントが基本.
でレプリカDBを作成する処 スポンスの向上を図る.
(障害時のリカバリー手順を簡易化するため)
理.
9各拠点サーバーの定時起動タスクにより、センターへ
z入力リソースがあるので再 の接続、メッセージを受信し、レプリカを更新する
送は可能.
z業務例
9データ量を削減するため、差分情報を送信とする
・顧客マスター配信
9受信側の多重障害による回復不能時に備え、全件コ
・製品情報配信
ピー機能も用意する
オンライン転
送
z基幹系取引情報を他シス
イベント連動
zイベント・ドリブンで次工程
テムに転送する処理.業務
の迅速化、経営戦略への反
映を図る.
z業務例
・即時DBレプリケーション
・データ・ウェア・ハウス
z可用性/連続稼動/レスポ
ンス・タイム(情報鮮度)の要
件が厳しい.
z取引量にピーク性がある.
z送受信双方のリソース更
新の整合性を保証する必要
がある.
9可用性向上のため全てのコンポーネントを代替系に
切り替えられる構成とすることが理想.
9メッセージ処理順序の保証が必要.
9リソースの整合性確認のために、業務により静止点
を取得し、検算を行う必要がある.
9障害回復までの時間と処理の追いつきに必要な時
間の関係を負荷テストで把握しておく.
9ログ・ファイル/バック・アップが配置されているメディ
アの多重障害に備え、業務/運用によるリカバリー方法
を準備しておく.
z宛先へのメッセージ配信保 9次工程に渡すデータが大量の場合は、別メディアに
の処理を起動/連動する処 証の要否は要件に依存.
保管し参照情報のみを送る.
理.
z工程終了の時限がある.
9運用によるタイマーの保持、進捗監視が必要.
z業務例
・運用イベントの通知
32
・他業務へのプロセス連動
32
要求/応答型適用業務の設計/実装のポイント
‹
要求データ/応答データの紐付け/宛先管理が必要となる
¾
¾
‹
要求側の応答データ待ち受け時の動作
¾
¾
‹
¾
照会のみ(リソース更新なし)場合⇒単純リトライ
リソース更新を伴う場合
z 接続再開後、要求側から処理状況を問い合わせ、結果によって必要なリカバリーを行う
9 処理済の場合⇒次の取引を開始する
9 処理未済の場合⇒同一取引の処理要求を再送
可用性向上/負荷分散のためのシステム基盤の構成
¾
‹
タイム・アウト時間内に応答データが要求側に届かなれば取引が完了しない
⇒レスポンス・タイム重視の設計
リソース更新を伴う場合
z 要求側は応答を受信するまで処理状況不明(In-doubt)の状態
要求側の応答データ待ち受けがタイム・アウトした場合のリカバリー
¾
‹
データ識別ID、応答識別IDの利用/持ち回り
応答返信宛先の持ち回り
コンポーネントを全て冗長化し、コンポーネント障害が発生した場合は迂回できる構成にする
z ただし、データの滞留/ロスト/重複/逆転が発生する可能性がある
⇒取引を識別するIDの採番、送受信データの通番管理をEnd-To-Endで行う必要がある
アフィニティ
¾
複数回のデータ送受信で取引が成立する場合
z 並列化された応答タスクの中で特定の相手と取引する必要がある
⇒2回目以降の要求データ送信先を指定して送る/取引情報を共有資源に保持する
33
要求/応答型、つまり通信が双方向に渡る場合は一方向型の時よりも更に複雑になります。
要求側では、要求に対する応答データをいつとりに行くか、待っている間にリソースをロックしておくかど
うかという二つの部分で設計が大きく分かれます。
33
<参考>更新/アフィニティ有の要求/応答型の実装例
要求業務
応答業務A
<商品検索>
商品検索キーワード送信
検索結果待受け
待受け
商品検索キーワード受信
検索処理
検索結果送信
待受け
レスポンス・タイム
検索結果受信
<在庫引当>
発注処理開始要求送信
レスポンス・タイム
取引IDn/引当結果受信
取引IDn登録
<発注処理>
発注情報送信
発注結果待受け
取引
マスター
11
12
1
10
2
3
9
8
4
7
6
5
タイマー
アフィニティ
<リカバリー処理>
接続リトライ
応答データ有無確認 → 無し
取引IDn状況照会要求データ送信
照会結果データ待受け
レスポンス・タイム
照会結果データ受信
If (処理済?)
then 取引IDn確定処理
else 取引IDn処理要求再送
......
在庫
マスター
取引
マスター
発注情報受信
発送処理要求送信
取引IDn/
発注者/
決済情報など
発注結果受信タイムアウト
発注処理開始要求受信
在庫引当
取引ID採番=n
取引IDn/引当結果送信
待受け
在庫引当/発注/発送処理確定
発注結果送信
Indoubt
応答業務B
データ待受け
取引状況照会要求データ受信
取引IDn状況照会
照会結果データ送信
......
34
ひとつの業務が複数のアクティビティから構成されている場合、実行されたアクティビティがどのリクエス
トの実行結果の一部なのかを紐付けておくことが必要になります。これを実現するためにはメッセージや
通信基盤の中で紐付け情報を保持しておく必要があります。仮に通信コンポーネントの冗長化を行なっ
ていた場合でも、紐付けデータをコンポーネント間で共有する仕組みがないのであれば、業務を継続する
ためには必ず該当データを持っているコンポーネントと通信を行なう必要があります。この仕組みを実現
する仕組みをアフィニティと呼びます。
34
<参考>要求/応答型業務の設計/実装のポイント
パター
ン
適用業務例
オンライ z要求/応答双方のリ
ン
ソース更新があり、整
合性の一致が必須であ
取引
る処理.
z業務例
・ATM預金入出金/記帳
・各種オンライン商取引
オンライ zリソースの更新は伴
ン
わず、リソースを検索/
照会する業務
照会
z業務例
・口座残高参照
・在庫照会
非同期
応答取
得
z大量応答データ/長時
間処理となり応答の同
期待受けが非現実的で
ある処理.
z業務例
・随時帳票印刷
・人手を介した
プロセス・フロー
特徴
メッセージ・キュー 設計/実装のポイント
イング可否/適否/
実績/理由
z高可用性/連続稼動/レス
ポンス・タイムの要件が厳し
い.
z取引量にピーク性がある.
z実装可能
z実績多数
z考慮点あり
z経路/受信タスク
障害時にキューに
メッセージが滞留
する.
zサービス・レベル/レスポン z冗長化構成では
ス・タイムの要件が厳しい. メッセージ転送途
中で入力順序の
z照会量にピーク性がある.
逆転が発生する可
z検索のキーによっては長 能性がある.
時間処理、または照会結果
が大量になることがある.
z高可用性/連続稼動/レス z適している
ポンス・タイムの要件は限定 z実績多数
的.
9要求側タイムアウトにより滞留したままの
メッセージを削除/退避する仕組み/運用が
必要.
9レスポンス・タイム短縮/スルー・プット向上
/余計な重複処理回避のため、メッセージ属
性はノン・パーシスタントとし、コンポーネント
は全て必要なレベルで冗長化する.
9(経路障害発生時には要求側はタイムアウ
トとなるため、障害回復後メッセージが復活し
ても仕方ない)
9メッセージのロスト/重複/逆転は、両端の
プログラムで取引ID管理/通番カウントアップ
を行うことで防止する.
9要求側は、リソース/操作ロック時間を最小
化するため、要求メッセージ送信のみ行い応
答は待受けない.
9転送経路でのメッセージ・ロストを防ぐため、
zキューに大量
z取引量にピーク性がある. データを一時保管 メッセージはパーシスタント属性とする.
可能であり、転送 9転送途中でのメッセージ逆転を防ぐため、
の整合性を確保で 処理順序を遵守したい単位でコンポーネント
/処理を逐次化する.
きるため
9非同期応答取得機能(要求送信タスク⇒応
答受信タスクへのメッセージ識別情報通知/
35
自動取得タイマー/取得操作機能)を開発/利
用する必要がある.
要求/応答型の実装のポイントと処理の流れについて纏めてみました。
要求/応答型とひとくくりに表現しても、それがデータ更新を伴う取引なのか、照会だけで終わるのか、応
答はすぐもらう必要があるのか、それともバッチ処理などで後でもらえばよいのかなど、やはり様々な検討
ポイントが存在します。
35
メッセージング基盤設計
接続方式,キュー配置,ネットワーク・リンクの検討
‡
‡
‡
‡
接続方式,キュー配置,ネットワーク・リンクの検討
MEの接続,ネットワーク・リンク方式
MQの接続,ネットワーク・リンク方式
サービス統合バス・リンクの考慮点
36
36
接続方式,キュー配置,ネットワーク・リンクの検討 (1/2)
„
アプリケーションと宛先(キュー)の配置を以下の観点で検討
‹
リモート・システム/アプリケーションと非同期で処理をしたい場合
¾
アプリケーションと同一サーバー上にキューを持つ構成にする
<一方向型>
メッセージング・プロバイダー
Producer
メッセージング・プロバイダー
Consumer
ネットワーク・リンク
宛先定義
転送キュー
受信キュー
<要求/応答型>
メッセージング・プロバイダー
メッセージング・プロバイダー
Responder
Requester
要求送信
要求受信
ネットワーク・リンク
宛先定義
転送キュー
要求キュー
応答送信
応答受信
ネットワーク・リンク
応答キュー
転送キュー
37
これまで説明したような考慮点や設計ポイントを踏まえた上で、以降ではメッセージング基盤を利用して
実装していく上でのポイントについて説明します。
(検討の結果、業務に通信基盤を使用することになったということを前提とします)
まず、抽出した要件からアプリケーションとキューの関係を決定します。非同期的なやり取りをしたいとい
う場合は基本的にローカルにキューを配置する構成にします。送ったらおしまいというスタンスで考え、要
求/応答型の場合は一方向通信を二つ構成するイメージになります。
37
接続方式,キュー配置,ネットワーク・リンクの検討 (2/2)
„
アプリケーションと宛先(キュー)の配置を以下の観点で検討
‹
リモート・システム/アプリケーションと同期で処理をしたい場合
¾ アプリケーションは宛先を保持するサーバーに直接接続する
z
アプリケーション⇔メッセージング・プロバイダー間はリモート・クライアント接続にする
メッセージング・プロバイダー
Requester
Responder
要求送信
要求受信
応答受信
リモート・
クライアント接続
要求キュー
応答送信
応答キュー
38
相手と話をしないと処理が進まない、つまりアクティビティーを同期的にやりとりして業務を進めていくよう
な場合は、上記チャートのように一方にのみキューを配置し、キューを持たない方から持つ方に対してリ
モート接続を行なうのが基本となります。
38
MEの接続,ネットワーク・リンク方式 (1/2)
„
ME
ローカル接続
AS
ME
Producer
Consumer
キュー宛先
„
リモート接続
アプリケーション
・クライアント
Producer
AS
ME
Consumer
39
前ページでご紹介した方針を、WASのME(Messaging Engine)で実装した場合の例を示します。
39
MEの接続,ネットワーク・リンク方式 (2/2)
„
ME
ME間転送
‹
同一バス内⇒リモート宛先経由(自動定義)
BUS
AS
AS
Producer
Consumer
(ネットワーク・リンク)
(ネットワーク・リンク)
(リモート宛先)
‹
AS
ME
ME
ME
キュー宛先
(リモート宛先)
別バス間⇒サービス統合バス・リンク(明示定義)
BUS
AS
BUS
AS
ME
Producer
ME
Consumer
サービス統合バス・リンク
外部宛先
(転送キュー)
キュー宛先
40
MEの実装上の特徴として、どのような転送経路やどのようなキューを通って通信が行なわれて最終的に
メッセージが宛先に伝達されるかというのはBusを構成しているME間で自動的に行なわれるという点があ
ります。
バスをまたぐようなケースは、サービス統合バスリンクを明示的定義することで実現できます。
40
MQの接続,ネットワーク・リンク方式 (1/2)
„
MQ
ローカル接続
キュー・マネージャー
Producer
Consumer
ローカル・キュー
„
リモート接続
MQIクライアント
Producer
キュー・マネージャー
エージェント・
タスク
Consumer
ローカル・キュー
41
同様の形態をMQで実現した場合の例を示します。基本的にコンポーネントが違うだけでMEと変わりは
ありません。
41
MQの接続,ネットワーク・リンク方式 (2/2)
„
MQ
キュー・マネージャー間転送
キュー・マネージャー
キュー・マネージャー
送信
MCA
Producer
リモート・キュー定義
転送キュー
チャネル
受信
MCA
Consumer
ローカル・キュー
42
MEと違う点は、複数のキュー・マネージャーを連携させる場合、キューと送受信のためのネットワーク・リ
ンクはユーザーが意識して事前に定義する、もしくはMQの機能を使用して自動的に定義されるものを
使ってユーザーが運用をしていく必要があるところです。
42
サービス統合バス・リンクの考慮点
„
„
サービス統合バス・リンク: バス間を接続しメッセージ転送を行うネットワーク・リンク
サービス統合バス・リンクはメッセージング・エンジン単位に定義し、稼動する
‹
„
„
ME
接続先メッセージング・エンジン名、ホスト名、ポート番号、プロトコルを直接指定
外部宛先を定義 (外部バス (接続先のバス)にある宛先への紐付けのため)
考慮点
‹
‹
‹
サービス統合バス・リンクの定義反映にはWASの再起動が必要
リトライ間隔/回数、バッチ・サイズ等、細かい指定ができない(必要ない)
MQのトランス・ミッション・キューに相当する定義/インタフェースはない
¾
¾
‹
メッセージ転送の仕組みが公開されていない
¾
¾
‹
非同期転送は可能
z
内部的に送信キューを自動定義/保持している
z
リンクで接続障害が発生しても、アプリケーションは送信処理を完了できる
接続先メッセージング・エンジン/ネットワーク障害発生時にメッセージが何件残っているか、
未コミットのメッセージが残っているかなどの確認方法は公開されていない
z
wsadminコマンドで滞留数を照会することは可能ではある
9 送信キューを特定する方法が公開されておらず、Fix適用で実装が変化している
転送のバッチ化、障害検知、再接続、同期情報の保持、In-doubt解決の仕組みなど
パフォーマンス・テスト、負荷をかけた状態でのネットワーク障害テスト必須
リンクの稼動状況は管理コンソールから確認可能
¾
MQのDISPLAY CHSTATUSコマンドで照会できるような詳細項目は公開されていない
43
サービス統合バスリンクを使用する上での考慮点について纏めました。
MQと比較すると、登場し使用されるようになってから日が浅いということもあり、機能や使いやすさの点
ではMQにやや劣るように見える部分があります。このチャートはMQとMEのどちらを利用するかを検討さ
れる際に参考にして下さい。
43
メッセージング基盤設計
メッセージ信頼性の検討
44
44
メッセージ信頼性の検討
„
メッセージ信頼性の考え方
‹
基本
¾
以下の方針/バランスを考慮し選択
アプリケーション/運用によるメッセージ回復/整合性維持
メッセージング・プロバイダーへのシステム・リソース/冗長化
製品ログ/バックアップの人為/多重/SW障害によるロストのリス
クまで想定し、アプリケーション/運用によるリカバリーを実装する
かどうか
信頼性を上げれば、その分必要なシステム・リソースが増大
する
‹
メッセージ・フロー別の考え方
¾
¾
‹
一方向型フロー
z 保証パーシスタント+ログ/キューの冗長化
9 送信後の障害検知は基本的に不可能なので、メッセージ回復/整合性維持を保証し
て欲しい
要求/応答型
z 高信頼性ノン・パーシスタント
9 応答タイム・アウトにより障害検知/再入力は可能
9 通信障害でのメッセージ・ロストは避けたい
9 余計な重複を避けるためプロセス障害後の再始動時には、
タイムアウトとなった取引のメッセージは消して欲しい
z ベストエフォート・ノン・パーシスタント
9 照会業務のみなのでパフォーマンスを重視する (※メッセージExpiryも併用)
その他
¾
監査目的でメッセージの送受信記録をログに残す⇒保証パーシステント
45
メッセージの信頼性とは、つまり通信基盤内におけるメッセージの永続化とほぼ同義です。
メッセージ信頼性も業務内容と要件に併せて検討する必要があります。永続化をしなければ運用面でも
性能面でも楽になりますが、何らかの障害時にメッセージそのものが消失する可能性がでてきますので、
回復手段を運用でカバーする必要が出てきます。それに対してメッセージを永続化するとメッセージ消失
の可能性が減ります。ただし多重障害などのケースがありますので、必ずしも万全とはいえません。永続
化を行なっていてもある程度運用でカバーしないといけない部分もあります。また、永続化によってコスト
の増大やパフォーマンス低下などの影響も発生します。
そのため、トレードオフの要素を踏まえた上でどの程度の永続化強度にするかを検討します。
45
<参考>メッセージ信頼性(詳細)
メッセージの
信頼性
MQ
ME
メッセージ属性
メッセージ処理
JMS
Delivery
Mode
相当する
MQパー
システン
シー
トランザク
ションの
アトミック
性
データ・ス
トア書出
有無
正常稼動
時の破棄
可能性
重複発生
の可能性
計画停止
メッセージ残存
クライアン
ト通信障
害
メッセージ
ング・エン
ジン間通
信障害
メッセージ
ング・エン
ジン/サー
バー障害
ベスト・
エフォート・
ノン・
パーシスタント
ノン・
パーシ
スタント
FAST
メッセー
ジ※1
なし
なし
ある
なし
残存し
ない
残存し
ない
残存し
ない
残存し
ない
高速
ノン・
パーシスタント
ノン・
パーシ
スタント
該当な
し
あり
リソース
不足時
のみ
なし
あり
残存し
ない
残存し
ない
残存す
る
残存し
ない
高信頼性
ノン・
パーシスタント
(デフォルト)
ノン・
パーシ
スタント
ノン・
パーシ
ステント
あり
リソース
不足時
のみ
なし
あり
残存し
ない
残存す
る
残存す
る
残存し
ない
高信頼性
パーシスタント
パーシ
スタント
該当な
し
あり
非同期
書出
なし
あり
残存す
る※2
※3
残存す
る
残存す
る
残存の
可能性
あり※2
保証
パーシスタント
(デフォルト)
パーシ
スタント
パーシ
ステント
あり
同期書
出
なし
なし
残存す
る
残存す
る
残存す
る
残存す
る
MQリンク受信デフォルト
MQリンク受信デフォルト
※1:チャネル属性のNPMSPEED(FAST)指定下のノン・パーシステント・メッセージ
※2:データ・ストアに書出されたメッセージについては回復
※3:メッセージング・エンジン停止処理時にキャッシュ上のメッセージはデータ・ストアに強制書出される
46
チャートの表は、WASV6.1 Information Centerの下記文章を元にメッセージの信頼性について、永続化
のレベルに応じてシステムの挙動にどのような違いがあるかを纏めたものです。
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.websphere.pmc.nd.do
c/concepts/cjj9000_.html
46
<参考>データ・ストア (ME)
„
データ・ストアとは
‹
MEが以下の情報を保持するためのRDBのスキーマ( cf. ファイル・ストア )
¾
¾
¾
„
ME
ME作成時に以下の表を自動作成
ME始動時に排他ロックが確保される
スキーマを分けることにより1つのDBMSに複数のデータ・ストアを保持可能
※ノン・パーシスタント・メッセージのみの場合でも、データ・ストアの作成/運用必須
テーブル名
内容
SIBOWNER
排他使用権があるメッセージング・エンジンのUUID
SIBCLASSMAP
データ・ストア内オブジェクトのカタログ
SIBLISTING
SIBnnnテーブルのカタログ
SIBXACTS
アクティブな2フェーズ・コミットのステータス
SIBKEYS
ME内のオブジェクトの識別子
SIB000
SIB001,SIB002の構成情報
SIB001
高信頼性/保証パーシスタント・メッセージ
SIB002
ME稼動プロセスのヒープに収まりきれないノン・パーシスタント・メッセージ
JDBCプロバイダーの選択
‹
組み込みderby(デフォルト)
‹
その他のJDBC接続をサポートするRDB製品
¾
WASクラスター構成での使用はサポートされない
47
永続化機能によって預かったメッセージを蓄えておくところの実装形態は、MEとMQで変わってきます。
MQは独自のファイル・システムを利用します。MEではファイル・ベースとDBへの格納の二つの形態から
選択します。WASがサポートしているDBはデータ・ストアとして使用が可能です(ただしライセンスや製品
は各自で用意して頂く必要があります)。
47
<参考>データ・ストア・トポロジーの検討 (1/2)
„
ME
データ・ストアの配置(ローカル構成)
¾
メッセージング・エンジンと同一ノード上で稼動
AS
ME
DS
¾
トレード・オフ
メリット
デメリット
・ローカル接続なのでネットワーク・トラフィック
/障害の影響を受けない
・組み込みderbyを利用すれば追加ライセンス
は不要
・ノード障害時、データ・ストアも同時に
障害となるので、MEが他ノードに
フェール・オーバーできない
⇒ フェール・オーバー不要の場合に適する
48
データ・ストアを配備する(トポロジー)上の考慮点について纏めてあります。
WASには組み込みDBとしてderbyがデフォルトで同梱されており、データ・ストア用のDBとしても利用が
可能です。ただし、WASクラスター構成でMEを利用したい場合はderbyは使用できません。
48
<参考>データ・ストア・トポロジーの検討 (2/2)
„
ME
データ・ストアの配置(リモート構成)
¾
メッセージング・エンジン稼動ノードからリモートのDBサーバーに接続
AS
DBサーバー
ME
DS
¾
メリット
トレード・オフ
デメリット
・ノード障害時、MEフェール・オーバーにより ・ネットワーク・トラフィック/障害の影響を
メッセージの回復ができる
受ける
※同一データ・ソースにアクセス必要
※DBMS側のスレッド開放のためDBサー
バー側TCPIP KeepAliveを設定する
⇒ パーシスタント・メッセージ有 & フェール・オーバー要件有の場合は必須
49
ローカル配置されているderbyではDBの信頼性が満たされないというケースでしたら、信頼の置けるDB
で構築するという選択肢をとります。さらにノード障害時の信頼性を高める必要があればこのチャートでご
紹介しているようにDBをリモートに配置することを検討します。
49
メッセージング基盤設計
負荷分散/可用性向上の実装
‡
‡
‡
‡
‡
‡
‡
‡
‡
‡
‡
MEの高可用性(HA:High Availability)機能
MEパーティショニングによる負荷分散/可用性向上
要求/応答型のMEパーティショニングによる負荷分散
ME⇔Responderプロセス分割時の考慮点
MEフェール・オーバーによる可用性向上
サービス統合バス・リンクの可用性
MQクラスターによる負荷分散/可用性向上
MQクラスターとMEパーティショニングの比較
MQクラスターによるアフィニティへの対応方法
ME⇔MQ連携の負荷分散
ME⇔MQ連携の可用性向上
50
50
MEの高可用性(HA:High Availability)機能
„
MEが障害で停止した時に、同一クラスター内の別サーバーにMEを引き継ぐことが可能
‹
‹
„
ME
データ・ストアは、引継ぎ先のサーバーからアクセス可能である必要がある。
パーシスタント・メッセージのみを引き継ぎ可能。
MEクラスターは、HA Managerによって、監視・制御される
‹
HAポリシーとして、メッセージング・エンジンの振る舞いを指定
¾
静的ポリシー
¾
One of N
z
z
¾
‹
‹
‹
1つのクラスタ・メンバーがMEを稼動します。他のクラスター・メンバーは待機。
ノーオペレーション
z
‹
MEを特定のサーバーでのみ稼動。
障害が発生しても、何もしない設定。
HAポリシーの適用範囲は、一致基準(Match criteria)で指定。
ポリシーに該当するコンポーネントをHAグループと呼ぶ。
優先サーバーを設定することで、ME障害時のフェイル・オーバーの優先順位を指定可能。
フェイル・バックを有効にすることで、優先度の高いサーバーが復旧した際に、MEを引き継ぐことが
可能。
Bus
Cluster
AS1
ME1
Data Store
for ME1
ME2
Data Store
for ME2
AS2
ME1
ME2
HA Group 1
HA Group 2
51
ここから負荷分散と可用性向上の話に入っていきます。
MEの高可用性機能を利用する場合、データ・ストアを引き継ぐことで業務の継続性を高めます。
データ・ストアが複数ノードにまたがって引き継ぎ可能である必要があるため、デフォルトのデータ・ストア
であり、同一サーバーからしかアクセスできないderbyは利用できません。
引継ぎ方法は、コア・グループのポリシーに設定します。このポリシーには、メッセージング・エンジンの
振る舞いを指定する他、HAポリシーをどのコンポーネントに適用するかを指定する一致基準、そのコン
ポーネントを稼動させるサーバーの優先順位を指定する優先サーバー、フェイル・バックの有効/無効な
どを設定します。
【メッセージング・エンジン用のポリシーの構成】
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.websphere.pmc.nd.do
c/tasks/tjt0028_.html
51
MEパーティショニングによる負荷分散
„
MEのワークロード共用(パーティショニング)とは
‹
キュー宛先に送信されたメッセージを複数のMEにより保持される各キュー・ポイントに
振分け/転送する機能
¾
„
WAS NDエディション、WASクラスター構成
振分けロジック:ラウンドロビン
‹
„
Information Centerの記述 ⇒「全体にわたりバランスよく分割されます」
振分け動作の原則
‹
送信⇒パーティショニングされる
‹
受信⇒パーティショニングされない
¾
„
WASプロセス/データ・ストアが複数になる ⇒ CPU/メモリー/I/O分散を図ることができる
前提構成
‹
„
ME
宛先/キュー・ポイントごとにパーティショニング有無を指定することはできない
考慮が必要なアプリケーション要件
‹
‹
複数メッセージの送受信処理において、順序性保証が必要な場合はパーティショニン
グ不可
要求/応答型の複数取引においてアフィニティーが存在する場合の考慮点
¾
接続時に宛先ME名を直接指定することはできない
z メッセージ/共有メモリ/DB上にセッション情報を保持する必要がある
52
MEにおける負荷分散のパーティショニングの概要についてご紹介します。パーティショニングを行なうこ
とによってキュー・ポイントが受信側のプロセス毎に生成されます。キュー・ポイントまでメッセージが来た
後にプロセス障害が発生した場合、MQと異なり正常に稼動しているキューに対してメッセージの再送信
は行なわれません。そのため、そのメッセージは障害発生したプロセス自身によって障害回復後に転送
が再開されるという仕組みになっています。
52
<参考>リモート・キュー・ポイントの操作
„
管理コンソール操作
‹
„
サービス統合 > バス > busname > メッセージング・エンジン > mename > リモート・
キュー・ポイント
照会できる項目
‹
‹
‹
„
ME
メッセージ入出力数
滞留メッセージ数
処理状況の照会
滞留メッセージに対する操作
‹
‹
削除
例外宛先への移動
53
リモート・キュー・ポイントの情報の参照と滞留メッセージに対する操作は、WASの管理コンソールから行
なうことができます。
53
ME⇔Responderプロセス分割時の考慮点 (1/3) ME
„
MEとResponderが同一プロセス上で稼動している場合
⇒ 応答メッセージは問題なく受信できる
‹
MQリンク、SIBusリンクがResponderである場合もこの動作
Cell
BUS01
Member00
ME00
Requester
要求送信
Responder
Node
要求受信
Agent
宛先=DestReq01
応答送信
応答受信
宛先=DestRep01
Requester
要求送信
キュー宛先
DestReq01
Member01
ME01
Responder
要求受信
宛先=DestReq01
応答受信
応答送信
宛先=DestRep01
54
要求/応答型の環境でMEのパーティショニングを行う時の考慮点があります。
応答側の業務のJVMプロセスを分割したい場合にMEだけ分割しないということはできません。分割され
てしまいます。
54
ME⇔Responderプロセス分割時の考慮点 (2/3) ME
„
Requesterの応答受信に関する考慮点
Requesterの応答受信は接続先MEの応答宛先を待受ける
Responderの応答送信は接続先ME上の応答宛先となる
‹ メッセージ送信時にME名を直接指定することはできない(接続先MEにより自動振分け
される)
⇒応答メッセージがRequester接続先ME以外のキュー・ポイントに返るケースがある
‹
‹
„
回避案
案1)応答宛先として一時宛先を動的作成し、JMS.ReplyToに利用する
¾ 一時宛先はバス内でユニークなので、応答メッセージはRequester接続先MEに必ず返る
¾ 考慮点
z JMSアプリケーションでの一時宛先の実装方法
9 TemporaryQueueオブジェクトの作成(createTemporaryQueue())/削除(delete())
を記述する必要がある
9 既存JMSアプリケーションでMQをJMSプロバイダーとしている場合⇒修正が必要.
z アプリケーションが必要に応じ動的に作成するため、パフォーマンス上のオーバー・
ヘッドがある
z アプリケーションの終了処理ができなかった場合、ゴミとして残る
案2)接続先のMEを意識したJMSリソース構成、アプリケーション・ロジックとする.
55
55
ME⇔Responderプロセス分割時の考慮点 (3/3) ME
„
応答宛先を事前定義のキュー宛先とした場合の動作
BUS01MEMember00
ME00
APMember01
Responder
Node
要求受信
Agent
宛先=DestReq01
応答送信
宛先=DestRep01
Requester
要求送信
MEMember01
ME01
応答受信
宛先=DestReq01
受信待受け
タイムアウトとなる
メッセージ滞留
„
※
宛先=DestRep01
キュー宛先
DestReq01
応答宛先も
パーティショニ
ングされる
・アプリケーションから直
接キュー・ポイント名
/ME名を指定して送信で
きない
応答宛先を動的作成の一時宛先とした場合の動作
BUS01
MEMember00
ME00
Requester
要求送信
宛先=DestReq01
応答受信
一時宛先=_QDestRepxxx01
Requester
要求送信
応答宛先は
バス内でユニーク
な宛先となる
応答宛先として
一時宛先を
動的に作成する
キュー宛先
DestReqxxx01
宛先=DestReq01
Responder
Node
要求受信
Agent
応答送信
APMember01
MEMember01
ME01
応答受信
APMember00
キュー宛先
DestReqxxx02
Responder
Node
要求受信
Agent
応答送信
56
一時宛先=_QDestRepxxx02
56
MEフェール・オーバーによる可用性向上
„
ME
可用性向上
‹
HAマネージャーによるプロセス障害検知は以下のいずれかのタイミング
¾
¾
¾
‹
設定箇所(管理コンソール)
¾
¾
‹
プロセスダウンにより、ソケットがクローズされた場合
HAマネージャー間のHeartBeatが断絶した場合
OSのTCP/IP KeepAliveのタイムアウトにより、ソケットがクローズされた場合
IBM_CS_FD_CONSECUTIVE_MISSED
IBM_CS_FD_PERIOD_SECS
秒)
ハートビートの失敗数(デフォルト:6回)
ハートビートの送信間隔(デフォルト:30
障害メンバー上で稼動するMEを他メンバーで自動再始動することが可能
¾
¾
データ・ストアを引き継ぐ
z 障害MEのDBMS側エージェント・タスクをリセットするため、DBサーバーに
TCP/IP KeepAliveの設定必要
以下のリソースを回復する
z キュー・ポイント
z 障害前に保持されていたパーシスタント・メッセージ
57
WASのND版では、HAマネージャーによるメッセージング・エンジンのFailover機能が利用できます。
57
MEフェール・オーバーによる可用性向上(図)
ME
Cell
BUS01
Deployment Manager
HAマネージャー
Node
Node Agent
HAマネージャー
Member00
ME=Cluster01.000-BUS01
キュー・ポイント[email protected]
JMSアプリケーション
JMSアプリケーション
JMSアプリケーション
送信
送信
送信
キュー宛先
Dest01
WAS HAフェール・オーバー
Node
JMSアプリケーション
受信
DS
Node Agent
HAマネージャー
Member01
ME=Cluster01.000-BUS01
キュー・ポイント[email protected]
JMSアプリケーション
受信
58
MEのFailoverを実現する場合は、障害発生時に永続化メッセージのためのDBのロックを適切に開放し
て、引き継ぎ先のME(WASプロセス)がDBを使用可能な状態にすることが必要です。適切に開放するた
めにはDBクライアント(もしくはJDBCドライバー)とDBサーバー間の通信にタイムアウトを指定します。
58
サービス統合バス・リンクの可用性
„
サービス統合バス・リンク構成手順概要
‹
外部バスを定義
‹
サービス統合バス・リンクを定義する
‹
接続先バスの情報を設定
¾
¾
¾
¾
¾
„
ME
接続先のバス名
双方のバスで名前を一致させる
外部バス名
リモート・メッセージング・エンジン名
ブート・ストラップ・エンドポイント
z
接続先ME稼動サーバーの
ネットワーク・アドレス
z
ポート番号
z
プロトコル
可用性向上の設定
‹
ブート・ストラップ・エンドポイントの設定
¾
¾
ブート・ストラップ・サーバーなしの場合
z
ME稼動サーバーの
SIB_ENDPOINT_ADDRESSを複数指定
9 設定順に接続を試みる
ブート・ストラップ・サーバーありの
z
ブート・ストラップ・サーバーの
SIB_ENDPOINT_ADDRESSを指定
9 MEのフェール・オーバー先
サーバーへの接続情報が通知
され、再接続される
59
サービス統合バス・リンクの可用性確保の方法としては、MEを複数参加させることで経路を複数もたせ
たり、ブート・ストラップ・サーバーを指定する方法があります。
59
サービス統合バス・リンクの可用性(図)
ME
BUS02
Cluster
BSMember
BSMember
ブート・ストラップ・エンドポイント設定
bootstrap1;7278;BootstrapBasicMessaging,
bootstrap2;7278;BootstrapBasicMessaging,
SIB_ENDPOINT_ADDRESS
(bootstrap1,port=7281)
Bootstrap
AS
Member00
BUS01
ME01
ME00
Producer
別名/外部宛先=Dest01
バス=BUS02
(転送キュー)
サービス統合
バスリンク
BUS01=BUS02
宛先=Dest01
外部バス=BUS01
ルーティング定義タイプ
= 直接-サービス統合バスリンク
外部バス=BUS02
ルーティング定義タイプ= 直接-サービス統合バスリンク
SIB_ENDPOINT_ADDRESS
(yujioatp1,port=7281)
SIB_ENDPOINT_ADDRESS
(mqtp1,port=7276)
ブート・ストラップ・エンドポイント設定
yujioatp1;7278;BootstrapBasicMessaging,
yujioatp2;7278;BootstrapBasicMessaging,
Consumer
WAS HAフェール・オーバー
再
接
続
AS
ME00’
Consumer
宛先=Dest01
SIB_ENDPOINT_ADDRESS
(yujioatp2,port=7281)
60
60
MQクラスターによる負荷分散/可用性向上
„
MQ
MQクラスターとは
‹
複数のキュー・マネージャーをクラスター化し、負荷分散、可用性向上を実現す
る機能
MQCLUS
MQGET(wait)
CorrelId=QMA指定
QM1
QMA
振分け処理
MQXQH.CorrelIdに送
信先チャネル名指定
CLUSSDR
CLUS(MQCLUS)
MQPUT
MQCONN(QM1)
MQOPEN(CLQ)
MQPUT
レポジトリ・
マネージャー
QLC01
CLUSRCVR
レポジトリ・
マネージャー
クラスター
送信キュー
構成/制御情報の交換
レポジトリ・キュー
QMB
レポジトリ・キュー
MQGET(wait)
レポジトリ・
マネージャー
CorrelId=QMB指定
CLUSSDR
レポジトリ・キュー
CLUSRCVR
QLC01
CLUS(MQCLUS)
61
次にMQを利用した場合の可用性機能についてご紹介します。
MQのクラスター機能では、基本的に送信側のキューはひとつです。キューに入れられたメッセージは
キュー・マネージャー毎に配備されているレポジトリー・マネージャーと呼ばれる転送の制御を行なってい
るサブシステムによってクラスター送信キューにPUTされます。各振り分け先に対してクラスター・センダー
とよばれる仕組みがあり、CorrelIdを元に自分の担当する宛先に対するメッセージかどうかを識別していま
す。
クラスターの構成情報や制御情報は、レポジトリー・マネージャーがレポジトリー・キューという専用の
キューを利用してキュー・マネージャー間を交換しています。
61
MQクラスターとMEパーティショニングの比較
MQ
ME
項目
ME
MQ
振分けロジック
記述なし.(ラウンド・ロビンのみ)
ラウンド・ロビン、重み付け、優先付け、ランク付け
振分け処理
タイミング/場所
接続先MEによリモート・キュー・ポイントが宛先キュー・ポイント毎
に動的に作成され、振り分け/宛先キュー・ポイントへの転送が行
われる
リポジトリ・マネージャーにより振分けが行われ、振分先キュー・マ
ネージャーと接続している送信チャネル名をMQXQH.CorrelIdに指
定し、クラスター送信キューにMQPUTする.
送信チャネルはCorrelId指定で自分宛のメッセージをMQGET(wait)
しており即座に送信する.
受信側/ネットワー
ク障害時の動作
振分け処理後のメッセージはリモート・キュー・ポイントに滞留
他キュー・マネージャーに自動リルートされる
送信In-doutの解決
再接続後に自動解決される(手動操作により強制解決も可能)
区分化指定の単位
ME単位(宛先単位には指定不可)
キュー単位にクラスター属性の指定が可能
応答の受信
プロセス分割時、応答メッセージが取得できないことがある.
(応答宛先として一時宛先を作成する、または
JMSコネクション・ファクトリーをME単位に定義し、JNDI名を使い
分けるロジックの実装が必要)
要求メッセージのMQMD.ReplyToQ,ReplyToQMgr名宛に応答メッ
セージを送信すれば、Requesterの待つ応答キューに応答メッセー
ジが届く.
アフィニティ制御
送信先ME名をアプリケーションは直接指定できない
(JMSコネクション・ファクトリーをME単位に定義し、JNDI名を使い
分けるロジックの実装が必要)
要件に応じた送信先キュー・マネージャーの指定が可能
「MQクラスターによるアフィニティへの対応方法」参照
構成/制御情報の
管理/保管場所
記述なし.
各キュー・マネージャーのレポジトリー・キューに保管.
フル・レポジトリーのキュー・マネージャー×2つをマスターを保持.
クラスター・チャネルを通じたリポジトリ・マネージャー間のPub/Sub
で構成情報/制御情報の交換を行っている.
他のキュー・マネージャーは必要とする情報のみを部分レポジト
リーに保持.(90日経過後に未使用情報を削除).
ネットワーク・
リンクの運用
不要(不可)
START/STOP CHLによる制御が可能
(トリガリングによる自動接続も可能)
保守/拡張性
キュー・ポイントの追加情報反映のため送信側サーバーのリス
タートが必要
クラスター・キュー作成時に動的に反映される
SUSPEND/RESUME/RESETコマンドによるキュー・マネージャーの
62
休止/復帰/強制離脱操作が可能.
REFRESHコマンドによる構成情報の再取得が可能.
このチャートではMEのパーティショニングとMQクラスターの違いについて纏めています。
大きな相違点は送信元の振り分け処理の場所と振り分けされた結果です。
振り分けの結果、MEの場合は複数のリモート・キュー・ポイントにメッセージが分かれて入るのに対して、
MQが入る先はひとつということです。MQの場合は宛先のキュー・マネージャーの障害を検知すると、そ
のCorrelIdの付け替えを行なって別の割り振り先にリルートすることができます。また、MQの場合はコマン
ドを発行することで動的に拡張が可能ですが、WASの場合は拡張の際に関連するプロセスの再起動が必
要になります。
62
<参考>MQクラスター負荷分散アルゴリズム
„
MQ
単純なラウンドロビンだけでなく、高度なワークロード・バランスが可能
‹
重み付けラウンドロビン
¾
¾
チャネルのCLWLWGHT属性に設定可能(1から99)
処理能力の高いマシンに多くのメッセージを割り振ることができる
Weight=99
QMA
QLC1
QM1
MQクラスター
QMB
Weight=50
‹
QLC1
プライオリティ制御
¾
¾
チャネル、キューのCLWLPRTY属性に設定可能(0から9)
正常時は一方のキューにメッセージを片寄せして送信、障害時に代替キューに送信先を切り替え
Priority=9
QLC1
QMA
MQクラスター
QM
Priority=9
本番機
QLC1
QMA
Priority=0
QM2
QLC1
MQクラスター
代替機
QM1
Priority=0
QM2
63
QLC1
63
MQクラスターによるアフィニティへの対応方法
„
MQ
要件により、以下の3種類の動作を選択できる
アフィニティの要件
MQOPEN時の指定
送信メッセージ振分け動作
MQOD.ObjectQMgrName指定
MQOO_BINDオプション指定※
アフィニティ無し
どのQMGRも問題ない場合
ブランク
MQOO_BIND_NOT_FIXED
各メッセージ(MQPUT)毎に
振分けされる
アフィニティ有り.
どのQMGRでも良いが、
最初に解決されたキュー・マネージャー
を使い続けたい場合
ブランク
MQOO_BIND_ON_OPEN
宛先QMGRは自動選択され、
以降のメッセージは同一
キュー・マネージャーに送信さ
れる
アフィニティ有り.
特定のQMGRにしか送信
したくない場合
送信したいQMGR名
N/A
ObjectQMgrNameで指定した
キュー・マネージャーに送信さ
れる
1
MQOPEN
MQOO_BIND_NOT_FIXED
MQOD.ObjectName=Q1
MQPUT(1)
MQPUT(2)
※JMSの場合アプリケーションによるオプション指定は不可
(キュー属性DEFBIND(OPEN/NOTFIXED)で制御可能)
WLMによる
振り分け
①
QM1
Q1
②
2
3
MQOPEN
MQOO_BIND_ON_OPEN
MQOD.ObjectName=Q1
MQPUT(1)
MQPUT(2)
宛先決定
= QM2
MQOPEN
MQOD.ObjectQMgrName=QM2 宛先明示指定
MQOD.ObjectName=Q1
MQPUT(1)
MQPUT(2)
QM2
Q1
64
MEと比較するとMQの方がアフィニティの設定ができます。チャートにはアフィニティを有効にしている場
合としていない場合でどのように動作を制御できるかについてご紹介しています。
アフィニティを有効にすると、送信先のキュー・マネージャーの指定ができます。最初に送信した先の
キュー・マネージャーに対してのみメッセージを送信します。
64
<参考>
要求(ME)/応答(MQ)型実装詳細
MQXQH
RemoteQName
=QREQ
RemoteQMgrName=Q
Reauester(JMS)
M01
//初期化、接続
cf.start();//jms/CF
//入力データ受付
//業務処理
//要求メッセージ送信
setJMSReplyTo(jms/DestRep);
send(msg); //to jms/DestReq
//応答メッセージ受信
JMSCorrelationID
=JMSMessageID
//応答識別ID設定
Receive(timeout);
//to jms/DestRep
JMSキュー
名前=Q01
JNDI名=jms/DestRep
バス名=Bus01
キュー名=QREP
JMSキュー
名前=DestReq
JNDI名=jms/DestReq
バス名=Bus01
キュー名=QREQ
JMS接続ファクトリー
名前=CF
JNDI名=jms/CF
バス名=BUS01
(MQRFH2) UserData
リスナー
runmqlsr –m QM01 –t TCP –p 1414
バス
名前=Bus01
メッセージ・エンジン
名前=was01Node01.server1-Bus01
バス名=BUS01
別名宛先
ID=QREQ
バス=BUS01
ターゲットID=QREP@QM01
ターゲット・バス=QM01
Receiverチャネル
DEFINE
CHANNEL(BUS01.QM01)
TRPTYPE(TCP)
Responder(MQ)
MQCONN(QM01)
MQOPEN(QREQ)
MQOPEN(QREP)
MQGET(QREQ)
MQリンク
名前=MQL01
外部バス名=QM01
キュー・マネージャー名=QM01
送信側チャネル
チャネル名=BUS01.QM01
ホスト名=mqserv1
ポート=1414
トランスポート・チェーン
=OutboundBasicMQLink
外部バス
名前=QM01
ルーティング定義タイプ
=直接WebSphere MQリンク
(wait)
MQCC_OK
受信キュー
DEFINE QLOCAL(QREQ)
業務処理
応答メッセージ作成
MsgId=CorId
ObjName=RepToQ
ObjQMName=RepToQMGR
MQPUT(QREP,BUS01)
転送キュー
DEFINE QLOCAL(BUS01)
USAGE(XMITQ)
受信者チャネル
チャネル名=QM01.BUS01
トランスポート・チェーン
=InboundBasicMQLink
キュー宛先
ID=QREP
バス=BUS01
MQXQH
RemoteQName =QREP
RemoteQMgrName=BUS01
WAS(hostname=was01, SIB_MQ_ENDPOINT_ADDRESS=5558)
ME
MQ
MQMD
MsgID=xxx
CorrelId=000
ReplyToQ=QREP
ReplyToQMgr=BUS01
MQMD
MsgID=yyy
CorrelId=xxx
Senderチャネル
DEFINE
CHANNEL(QM01.BUS01)
CHLTYPE(RCVR)
TRPTYPE(TCP)
CONNAME(was01(5558))
XMIQ(BUS01)
(MQRFH2)
UserData
65
QM01(hostname=mqserv01)
メッセージング基盤を利用したアプリケーションを実際に動かしてテストを行なおうとしたときに、チャート
にあるような定義情報が必要になってきます。
65
ME⇔MQ連携の負荷分散
„
„
MQ
ME
外部宛先/別名宛先はパーティショニングできない
MQリンクはMQクラスターには参加できない
⇒現状では、ME⇔キュー・マネージャー間での負荷分散はできない
„
WAS上のJMSアプリケーション⇔MQ間の負荷分散
‹
MQをJMSプロバイダー とし、MQクラスターを利用.
(注:SIBWSが使用する宛先はMQをプロバイダーとすることはできない)
JMSアプリケーション
SIBWS
receive
QM01
ME01
send
QL01
MQリンク
送信
受信
MCA
MQリンク
受信
送信
MCA
内部転送
キュー
受信宛先
MQ
アプリケーション
QL01
MQGET
MQPUT
送信キュー
MQクラスター
MQクラスター
QM02
ME02
MQリンク
送信
受信
MCA
MQリンク
受信
送信
MCA
QL01
MQ
アプリケーション
QL01
受信宛先
MQGET
MQPUT
送信キュー
66
66
ME⇔MQ連携の可用性向上 (1/2)
„
‹
パーシスタント・メッセージの回復
制御情報の引継ぎ
¾
¾
構成情報(宛先定義、WAS/MQクラスター構成、リンク定義など)
リンク転送状況/トランザクション処理状況
引継ぎが必要なシステム・リソース
‹
ネットワーク・アドレス
¾
¾
‹
‹
„
ME
可用性向上のためME/MQ障害が発生した場合、稼動系⇒代替系へのテイク・オー
バーを行う
‹
„
MQ
MQ送信チャネルは接続先アドレスを複数指定できない
ネットワーク障害はネットワーク構成の冗長化で吸収
MQ: キュー・ファイル、ログ・ファイル
ME: データ・ストア、ファイルストア
MQテイク・オーバーの方法
1)サーバー・プラットフォームのHA機能を利用する
¾
Windows MSCS、AIX HACMP、z./OS ARM + VIPA
2)自動化の開発
3)手動で対応
„
MEフェール・オーバーとの関係
‹
MEはWAS HAマネージャーによるフェール・オーバーが可能
¾
ただし、以下の手順の自動化を行う必要がある
z
MEフェール・オーバーの検知⇒フェール・オーバー先サーバーの特定⇒ネットワーク・アドレスの引継ぎ
67
・WASv6.1 SIBusとWebSphereMQを繋ぐMQリンクの高可用性について
http://www-06.ibm.com/jp/domino01/mkt/cnpages1.nsf/page/default-0041D082
67
ME⇔MQ連携の可用性向上 (2/2)
JMS
アプリケーション
ME01
receive
TCPIP
TCPIP
外部/別名
宛先
内部転送
キュー
受信宛先
NIC
NIC
MQリンク
受信
NW
構成
IPyyy
IPxxx
receive
TCPIP
TCPIP
内部転送
キュー
受信宛先
MQGET
MQPUT
送信キュー
NIC
NIC
MQリンク
受信
QM01
受信
MCA
MQリンク
送信
外部/別名
宛先
送信
MCA
ログ/キュー・ファイル
ログ/キュー・ファイル
ME01
send
稼動系
MQ
アプリケーション
受信キュー
NIC
NIC
MEデータ・ストア
JMS
アプリケーション
QM01
受信
MCA
MQリンク
送信
send
ME
MQ
IPyyy
NW
構成
NIC
NIC
IPxxx
代替系
MQ
アプリケーション
受信キュー
送信
MCA
MQGET
MQPUT
送信キュー
68
68
WAS V6.1でのJMSプロバイダー選択のポイント
‡ メッセージング・プロバイダーの選択基準項目
‡ JMSプロバイダー選択のポイント
69
69
メッセージング・プロバイダーの
選択基準項目
„
WAS V6.1では以下のJMSプロバイダーが選択可能
‹
‹
‹
‹
„
ME
MQ
サービス統合デフォルト・メッセージング・プロバイダー(SIBus)
WebSphere MQ JMS プロバイダー
バージョン 5 デフォルト・プロバイダー(組み込みメッセージング)
汎用 JMS プロバイダー
選択基準項目
‹
‹
‹
‹
‹
‹
‹
‹
‹
‹
‹
‹
‹
サポート・プラットフォーム
サポート言語
既存アプリケーションへのインタフェース
サポート・トランスポート
他環境/製品へのブリッジ/アダプター機能
負荷分散機能
V6.x Application Server
可用性向上機能
運用監視機能/インタフェース
ME
ME
¾ 運用管理製品
パフォーマンス
実績
アプリケーション
JMS
必要スキル
MQ
宛先
価格
etc…
バッファー
derby
/DB2 etc.
DBMS
バッファー
ログ
データ
ストア
ログ
キュー
ファイル
70
WAS V6ではJMSプロバイダーとして以下の4つの選択肢があります。
・デフォルト・メッセージング・プロバイダー
サービス統合バスのメッセージング・エンジンにより実装されます。
・WebSphere MQ
WAS V5と同様にJMSプロバイダーとしてMQのキュー・マネージャーを直接利用可能です。
・一般JMSプロバイダー
サード・パーティーのメッセージング・プロバイダー製品を利用する場合に使用します。
・V5 デフォルト・メッセージング
WAS V5 組み込みメッセージングの互換性のための選択肢です。
V5 デフォルト・メッセージング・プロバイダーは、WebSphere MQクライアント・リンクを経由して、サービ
ス統合バスとともに使用することもできます。
メッセージ・ドリブン Bean を使用するには、 JMS プロバイダーは、JMS Application Server Facility
(ASF) 機能をサポートしているか、JCA V1.5 に定義されているインバウンド・リソース・アダプターをサポー
トしている必要があります。
一般にJMSプロバイダーを選択する際に検討すべき項目は以下の観点があります。(サポート・プラット
フォーム、サポート言語、サポート・トランスポート、他環境/製品へのアダプター機能、負荷分散機能、可
用性向上機能、運用監視機能、インタフェース、パフォーマンス、実績、必要スキル、価格、etc…)
WAS V6 JMS 1.1サポートの概要については「WebSphere Application Server V6 Announcement
Workshop」、”WASV6プログラミングモデル Java2 Enterprise Edition 1.4”セッション資料をご参照下さい。
70
JMSプロバイダー選択のポイント
„
‹
MEはWASに同梱されており、ライセンス料は発生しない
WASでの運用管理の統一、HAマネージャーによる可用性向上を図ることができる
WAS内でパーシスタント・メッセージを使う場合の考慮点
‹
„
データ・ストアの冗長化/チューニング/運用/保守必須
既存MQシステムとの連携が多い場合
‹
ME/JMSの制約を考慮
¾
¾
¾
¾
MEはMQクラスターに参加できない
MEはCCSID=5026,5035のキュー・マネージャーとは接続できない
MEはJMSしか利用できないため、機能の制約がある(メッセージIDの設定不可など)
⇒既存MQアプリケーションがメッセージIDの設定を求めている場合問題となる
MEでは、WASコンソール(wsadmin)/JMXによる運用管理の仕組み、手順を新たに作成する必要がある
⇒MQ用の運用管理ツールは利用できない
WAS + ME
API
運用管理
可用性
コスト
実績
ME
WAS内でノン・パーシスタント・メッセージのみを行う場合
‹
„
MQ
JMSのみ
WASコンソールですべて管理可能
データ・ストアの運用管理が必要
HAマネージャーによる切替
(MQリンク再接続にはネットワーク・アドレスの引継ぎ
必要)
MQクラスターには参加できない
MEはWASに同梱
クラスター構成ではDS用RDBライセンスが別途必要
本番使用している例がある
WAS + MQ
JMSとMQ Base Javaを利用可能
WASコンソールでJMSオブジェクトの管理
MQの運用管理が必要
OSのHA機能を利用
MQクラスターの利用
MQのライセンスが別途必要
多数の稼動実績あり
大規模、高パフォーマンスの基幹系システムにも採用
71
WAS内でノン・パーシスタント・メッセージのみを行う場合は、MEで十分に実現する事が出来ます。
WAS内でパーシスタント・メッセージを使う場合は、データ・ストアの冗長化/チューニング/運用/保守必
須であり、SIBusリンクでは送受信のメッセージ転送状況を把握するインタフェースは未公開である点を考
慮する必要があります。
また、既存MQシステムとの連携する場合、ME/JMSの制約がありますので、十分に考慮して下さい。
71
このセッションで学習したこと
„
Messaging(メッセージング)とは
‹
„
WASV6.1におけるメッセージング環境
‹
„
WASV6.1でサポートされるJMSメッセージングについて確認しました。
メッセージング基盤設計
‹
‹
‹
„
メッセージングとはどういうものなのか、その特徴・使用方法について確認し
ました。
メッセージング基盤の計画について確認しました。
接続方式、キュー配置、ネットワーク・リンクについて確認しました。
負荷分散/可用性の向上について確認しました。
WAS V6.1でのJMSプロバイダー選択のポイント
‹
WASV6.1でのMQ/MEの選択指針について確認しました。
Messaging
ME
MQ
ESB
72
72
参考資料
‡ ESB(Enterprise Service Bus)を実装する製品群と役割分担
‡ Hints&Tips
73
73
ESBを実装する製品群と役割分担 (1/2)
„
ESB(Enterprise Service Bus)とは
‹
複数の製品が協調して実装、構成される汎用的なデータ転送/変換基盤
¾
„
要件に応じた最適な製品の組合せ/設計/実装/運用/保守により実現
ESBを実装する各製品の特徴と役割
‹
WebSphere Application Server(WAS)
¾
Web/Java/J2EE/Webサービス環境のアプリケーション実行基盤
z
z
¾
Network Deployment環境による一元管理機能/拡張性の提供
WASクラスタリング構成による高度な負荷分散/可用性機能の提供
Service Integration Bus(SIBus)=WAS内のESB実行基盤
z
Service Integration Bus Web Service enablement(SIBWS)=WASでのWeb Service仲介機能
z
Messaging Engine(ME)=WAS内のメッセージング基盤
Mediation
9
z
9
SOAP/HTTP,SOAP/JMS,EJB/IIOP,JAX/RPC,WSSecurity,WSTransaction,etc
XMLメッセージの変換を行うBeanの呼び出しインタフェース,Mediation用クラスの提供
74
74
ESBを実装する製品群と役割分担 (2/2)
„
ESBを実装する各製品の特徴と役割
‹
WebSphere MQ
¾
負荷分散/高可用性/高信頼性メッセージング基盤
z
z
z
¾
各種環境との接続性
z
z
z
z
z
‹
JMSよりも歴史が長く、機能は豊富
MQクラスターによる高度な負荷分散/可用性/拡張性の提供
MQ/zにおけるログSW二重化,キュー/チャネル共用
MQ API(アセンブラ,C,C++,COBL,PL/I,RPG,NET,VB,JMS,etc)
アプリケーション稼動環境へのブリッジ環境(IMS,CICS,JMS,Notes,Siebel,etc)
ネットワーク・プロトコル変換(TCPIP V4/V6,SNA,etc)
ベンダー提供のMQFAP/MQIによるメッセージング機能(HULFT,日立/富士通ホスト)
WBI Adapterとの連携
WebSphere Message Broker(WMB) MQ基盤⇔標準技術間のデータ・フォー
マット/トランス・ポート変換機能の開発/実行基盤
z
z
SOAP1.1/1.2,WSDL1.1,XML1.0/1.1,XPath1.0,JMS1.1,J2SE1.4,HTTP/HTTPS,etcをサポート
複雑なメディエーション機能の提供
9
‹
タグ/デリミッター区切り⇔固定長/可変長/繰返し⇔XML間の変換
WebSphere Business Integration Adapter(WBI Adapter)
¾
各種パッケージ製品との連携(SAP,People,etc)
75
75
ESB実装イメージ
エンタープライズ・システム
パッケージ・ソフト
SAP,People etc.
既存システム
既存基盤
ベンダー独自仕様
JMS/MQI
既存
資産
MQチャネル
MQブリッジ
WBI Adapter
MQ基盤
業界標準仕様
(SWIFT、EDI関連、
etc)
XML/タグ&デリミッタ/ユーザー独自仕様
取引先
Web
サービス
フォーマット変換、コンテンツ・ベース・ルーティング
SOAP
HTTP/JMS
MQI
WMB/WMQ
SOAP HTTP/JMS
ESB
MQチャネル(MQリンク)
XML形式
SI-Bus
ME
本社/支社
Mediation
ME
ME
SOAP HTTP/JMS
XML形式
SI-Bus
ME
支店/営業所
Mediation
ME
ME
SOAP HTTP/JMS
Web
CGI
JMS/MQI
Bean
HTTP
76
76
アプリケーション構造と接続パターン
„
アプリケーションの再利用性を高め、迅速かつ柔軟に連携させる
‹
‹
コネクティビティやメディエーション(ルーティング、フォーマット変換)ロジック
を分離
アプリケーションのサービス化
Direct Connectivity
Message Queuing Message Brokering
通信ロジック
通信ロジック
コードの構造
メディエーション
通信ロジック
通信ロジック
メデイエーション
制御ロジック
メディエーション
制御ロジック
Service Brokering
メディエーション
制御ロジック
アプリケーション
アプリケーション
アプリケーションに
すべてのロジックが
入る
アプリケーションから
通信ロジックを切り離す
制御ロジック
アプリケーション
アプリケーションから
通信ロジックとルーティング、
フォーマット変換ロジックを
切り離す
アプリケーションは
サービスの集まり
アプリケーションから
ビジネスロジックを減らし、
サービス化する
77
柔軟性と再利用性
77
トランスポート層の検討
„
Webサービスのトランスポートをメッセージ・キューイングで実現
‹
‹
Webサービスは、SOAP形式(XML)のメッセージを使用して通信を行なう
Webサービスの標準では、SOAPを伝送するトランスポートは規定されていない
データ・フォーマット
トランスポート
‹
SOAP
HTTP
JMS
SOAP/HTTP
SOAP/JMS
etc...
トランスポートにJMS(MQ/ME)を使用することで、得られるメリット
¾
¾
メッセージのパーシスタント化による、障害時のメッセージのリカバリー
製品による、Webサービスの負荷分散/可用性向上
z
z
¾
¾
MEパーティショニング
MQクラスター
既存のMQネットワーク(キューやチャネル定義など)との連携
既存のMQアプリケーション/ブリッジとの連携
z
SOAP⇔既存MQアプリケーション変換が必要
9
WMB(WebSphere Message Broker)などを利用
SOAP
Webサービス・
クライアント
Webサービス・
プロバイダー
78
SOAP/MQ
78
<参考>SOAP/MQ
„
„
MQ V6で提供されるSOAP/JMS機能を、「SOAP/MQ」と呼ぶ
Webサービス・フレームワークに対応したSOAP/JMS用ライブラリの提
供
‹
Apache Axisと .Net のWebサービス・フレームワークに対応
¾
¾
‹
各フレームワークの通信部分を置き換える形で実現
Axisと.Net のWebサービス・クライアント/ プロバイダー間の通信も可能
V5.3までSupportPac(MA0R)で提供されていた、MQ独自の機能
¾
WAS の SOAP/JMS とは別機能
Webサービス・クライアント
Webサービス・プロバイダー
SOAP/MQ
SOAP/MQ
リスナー
SOAP/MQ
センダー
Webサービス
クライアント フレームワーク
アプリケーション (Axis/.Net)
Webサービス
サービス
フレームワーク アプリケーション
(Axis/.Net)
参考:SOAP/HTTPとの比較
HTTP
Transport
SOAP/HTTP
HTTP
Transport
79
今回提供される機能
79
WESBとWMB
„
ESBの主要製品
‹
‹
„
WebSphere ESB
WebSphere Message Broker
→新製品
→新バージョン
製品のポジショニング
WebSphere ESB
・Web サービス間の接続とデータ変換の
機能を提供
(J2EE環境内での接続)
SOAP/HTTP, SOAP/JMS,
WebSphere MQ, WebSphere Adapters
WebSphere Message Broker
・Webサービス以外も含むユニバーサル
な接続とデータ変換を提供
(J2EE環境と非J2EE環境の接続)
SOAP/HTTP, SOAP/JMS,
WebSphere MQ, WebSphere Adapters
+more・・・
・XMLフォーマットのみサポート
・XML以外にもユーザー定義フォーマット、
業界標準フォーマットをサポート
・WebSphere ASをベースとして、実行エ
ンジンはJavaで実装されたミドルウェア
・WebSphere MQをベースとして、実行
エンジンはC++で実装されたミドルウェア
Core ESB
Advanced ESB
80
80
WebSphere ESB
„ WebSphere
ESB
‹サポート・プロトコル
¾SOAP/HTTP,
SOAP/JMS, WebSphere MQ (※), WebSphere Adapters
※MQリンクを使用してMQネットワークに接続可能
‹サポート・フォーマット
¾XML
‹標準提供変換機能
¾
¾
¾
¾
¾
¾
¾
Stop Mediation
Fail Mediation
MessageFilter Mediation
XSLT Mediation
DatabaseLookup Mediation
MessageLogger Mediation
CustomSCA Mediation
‹開発環境
¾WebSphere
Integration Developer
81
81
WebSphere Message Broker
„ WebSphere
Message Broker
‹サポート・プロトコル
¾SOAP/HTTP,
SOAP/JMS, WebSphere MQ, WebSphere Adapters, Files,
Telemetry(SCADA), Mobile(MQe), Real Time, Multicast, Tibco RV
‹サポート・フォーマット
¾XML
¾固定長メッセージ:
C structures, COBOL copybook,
業界標準のSWIFT, EDIFact, EDI-X.12, ACORD/AL3, HL7, HIPAA, FIX, TLOG,
¾アダプター系:CICS, VSAM など
¾その他:MIME , Base64(DSTX), GZIP/ZLIB(DSTX),TAR(DSTX)
¾TDS:
‹実装可能な機能(標準提供機能)
¾多くの標準提供ノードを提供(「WMB標準提供ノード一覧」参照)
‹開発環境
¾WebSphere
Message Broker Toolkit
(WebSphere MBに同梱)
82
82
WESBとWMBの比較表
項目
WebSphere ESB
WebSphere Message Broker
特徴
J2EE環境でのWeb Service接続をサポート
J2EE環境とと非J2EE環境を接続.
Webサービスと既存システムの接続.
Webサービスのサポート
●
●
メッセージ変換&プロトコル変換
●
●
高度なルーティング&メッセージ
ロギング
●
●
XMLデータ・フォーマットの変換
●
●
Real-Time Event Processing
●
●
Complex Event Processing
-
●
XMLデータ・フォーマット以外の
変換
-
●
センサーとデバイスのインテグ
レーション
-
●
CICSやVSAMとのネイティブなイ
ンテグレーション
-
●
Real-Time Database Interaction
-
(1テーブルの参照のみ可能.JDBCアダプ
ターを併用すれば、更新などの作業も可能
になる)
●
83
83
<参考>WMB標準提供ノード一覧
役割
外部インターフェース
メッセージ変換
データベース・アクセス
フロー制御
エラー処理
その他
ノード名
説明
MQInput/MQOutput/MQGet
MQとの入出力、N in M outフローが可能。
MQReply
MQOutputのサブセット.MQMD.ReplyToQにメッセージ送信
JMSInput/JMSOutput
JMS1.1プロバイダーとの接続/入出力(MEへのJMSクライアント接続)
MQeInput/MQeOutput
MQEveryPlaceとの入出力
SCADAInput/SCADAOutput
SCADA端末との入出力
HTTPInput/HTTPReply/HTTPRequest
WebServiceとの入出力
MQOptimizedFlow/RealtimeInput/RealTimeOptimizedFlo
w
JMS/JMS(IP)との入出力(Pub/Sub通信のみサポート)
Publication
PubSub通信.MQ、MQEveryPlace、SCADA端末にメッセージ送信
Compute
ESQLによる変換、データベース・アクセス(汎用)
Java Compute
Javaによる変換ロジックの開発が可能
Mapping
GUIマッピングによる変換、データベース・アクセス(読み込みのみ)
Extract
Mappingのサブセット.データベース・アクセスなし
JMSMQTransform/MQJMSTransform
JMSメッセージとMQメッセージの変換
XMLTransform
XSLTによる変換
Database
ESQLによるデータベース・アクセス(汎用)
DataDelete/DataInsert/DataUpdate
GUIマッピングによるデータベース・アクセス(削除専用/挿入専用/更新専用)
Warehouse
メッセージ全体をBLOBフォーマットでデータベースに挿入
Filter
ESQLによる条件判断で処理を分岐
RouteToLabel/Label
Labelノードに処理を移動/処理の移動先
AggregateControl/AggregateRequest/AggregateReply
Aggregator機能(複数宛先への要求送信、応答メッセージを待ち受けて合体)
TimeoutControl/TimeoutNotification
メッセージフローの時刻起動
FlowOrder
分岐フローの実行順序制御
Throw
例外の生成
TryCatch
例外の補足
Trace
メッセージのダンプ
ResetContentDescriptor
メッセージ・パーサーの変更(メッセージの再パース)
Input/Output
サブ・フロー機能(サブフローへの開始点/サブフローの出口点)
Passthrough
サブ・フローの識別
妥当性検査(Validate)
入力メッセージとメッセージ定義の妥当性検査
Check
メッセージ・パーサーのチェック
84
※下線はv6での新規追加ノード
84
<参考>外部宛先と別名宛先の違い
„
共通
‹
定義のみの宛先
¾
¾
„
実体のある宛先をポイントするため
メッセージが格納される実体のある宛先ではない
関係
‹
外部宛先⊆別名宛先
¾
¾
„
ME
別名宛先で上書き可能な属性(※別名宛先でのみ設定可能な属性)
宛先名(※) / サービスの品質 / デフォルト優先順位 / 送信許可 / 受信許可(※) / 応答
宛先(※)
※外部宛先名はキュー宛先名と同一となる
応答宛先バス(※) / デフォルトの転送ルーティングパス(※) / 送信検査をターゲット宛先
に委任(※)
外部宛先で上書き可能な属性
z サービスの品質 / デフォルト優先順位 / 送信許可
使い分け
‹
別名宛先を採用する場合
¾
¾
‹
上記の属性を詳細に設定したい場合
ターゲットの宛先がMQ上のキューを指し示す場合、外部宛先でも可能Information Center
に明記なし)
外部宛先
¾
¾
¾
別名宛先のみで設定できる
上記属性を設定する必要がない場合
同一名称の別SIBus上の宛先を単に示したい場合
85
85
<参考>外部宛先と別名宛先の違い
<別名宛先設定項目>
ME
<外部宛先設定項目>
86
86
<参考>ブートストラップ・サーバー
„
ME
リモート接続先に複数のサーバー/メッセージング・エンジンが稼動している場合
‹
ブートストラップ・サーバーによるメッセージング・エンジンの自動選択が可能
¾
ブートストラップ・サーバーとは
z
ブートストラップのみ担当し、メッセージング・エンジンを稼動させないサーバー
⇒コネクション数分散が可能
<ブートストラップなし>
<ブートストラップあり>
Cell
Cell
BUS01
BUS01
AS
AS
ME
ME
SIB_ENDPINT
_ADDRESS
SIB_ENDPINT
_ADDRESS
AS
SIB_ENDPINT
_ADDRESS
AS
AS
ME
ME
SIB_ENDPINT
_ADDRESS
SIB_ENDPINT
_ADDRESS
1.Bootstrap
1.Bootstrap
↓
2.Connect
1.Bootstrap
↓
2.Connect
2.Connect
2.Connect
AS or
クライアント・
コンテナー
AS or
クライアント・
コンテナー
AS or
クライアント・
コンテナー
AS or
クライアント・
コンテナー
AS or
クライアント・
コンテナー
JMSクライアント
JMSクライアント
JMSクライアント
JMSクライアント
JMSクライアント
87
リモート接続先に複数のサーバーまたはメッセージング・エンジンが稼動している場合、ブートストラッ
プ・サーバーによるメッセージング・エンジンの自動選択が可能です。
ブートストラップ・サーバーとは、ブートストラップのみ担当し、メッセージング・エンジンを稼動させない
サーバーです。ブートストラップ・サーバーなしの構成では、最初に接続したサーバー上のメッセージン
グ・エンジンにそのまま接続されます。ブートストラップ・サーバーありの構成では、ブートストラップ・サー
バーによりコネクション数の負荷分散が行われます。
87
<参考>MQグループ・メッセージによる順序保証
„
‹
‹
„
複数のメッセージにGroupIDを付加し、グループ化して送受信する機能
グループ化の単位は業務要件に依存する
活用方法
‹
„
転送経路を冗長化しても送受信順序の保証が可能
グループ・メッセージの実装
‹
グループ・メッセージのフォーマット
¾
¾
¾
GroupId グループを識別するための一意のID
MsgSeqNumber グループ内でのメッセージの順序番号(論理順序)
MsgFlags MQMF_LAST_MSG_IN_GROUPで最終メッセージを識別(最終メッセージ以外はMQMF_MSG_IN_GROUP)
PMO.Options =
MQPMO_LOGICAL_ORDER
| MQPMO_SYNCPOINT
MQPUT MD.MsgFlags =
MQMF_MSG_IN_GROUP
MQPUT MD.MsgFlags =
MQMF_MSG_IN_GROUP
:
MQPUT MD.MsgFlags =
MQMF_LAST_MSG_IN_GROUP
MQCMIT
„
MQ
グループ・メッセージ機能とは
G=1|N=1
G=1|N=1
G=1|N=2
G=1|N=3
MQクラスター
MQクラスター
GMO.Options = MQGMO_LOGICAL_ORDER
| MQGMO_ALL_MSGS_AVAILABLE
|MQGMO_SYNCPOINT
| MQGMO_WAIT
G=1|N=3
G=1|N=2
while(GroupStatus == MQGS_MSG_IN_GROUP )
MQGET
MQCMIT
考慮点
‹
‹
‹
JMSでは未サポート
最終メッセージが到着してから、グループの受信処理を始める
グループの単位を大きくしすぎるとパフォーマンス・オーバーヘッドとなる
88
88
<参考>MQ接続タグ・オプションによる逐次化
MQ
MQ/zキュー共用環境でのPeer Recovery,Serialized Apllication
„
Group
Attach
CECA
CECB
CF
QMGR
障害
MQCONNX MQG1
MQCNO_SERIALIZE_CONN_TAG_QSG
CEC1
ConnTag = x'aaaaaaaaaaaa'
MQGET
入力キュー
SQL UPDATE
Application
DB
MQPUT
MQCONNX MQG1
MQCNO_SERIALIZE_CONN_TAG_QSG
ConnTag = x'aaaaaaaaaaaa'
MQGET
SQL UPDATE
MQPUT
QMGR
QMGR
出力キュー
CHIN
CHIN
QMGR
MQPUT
MQGET
QMGR
89
89
<参考>MQ接続タグ・オプションによる逐次化
„
Peer Recovery
‹
‹
キュー・マネージャー障害時に,同一キュー共用グループに属する他のキューマネージャーが障害
の検知,UOWの解決を行い,処理を引き継ぐ
MQによりUOWの解決ができない場合
¾
„
MQ
'RESOLVE INDOUBT'コマンドでの強制コミット/バックアウトが可能
z
CICS,IMS,RRSとの間でInboubtとなっている場合
Serialized Application(メッセージ処理順序の逐次化)
‹
キュー単位でFIFOの遵守が必須である場合 ⇒ 入力キュー:アプリケーション = 1:1
MQOO_INPUT_EXCLUSIVEにより共用キューを占有可能
‹
キュー・マネージャー障害時の考慮点
‹
¾
¾
¾
既存のアプリケーションをそのまま移行可能
Peer Recoveryが行われ、他キュー・マネージャー上で起動されるタスクにより処理が継続される.
メッセージがバック・アウトされる間でのWindowでメッセージ・シーケンスの逆転が生じる可能性がある
‹
MQによる逐次化
‹
同一のconnecting tagを指定して、複数のサーバーアプリケーションが稼働している場合
¾
¾
¾
MQCONNX発行時connection tagを指定してキューマネージャーにコネクトする
MQが該当のconnecting tagのUOWを監視しFIFOを守る.
9 Primary アプリケーションがMQCONNX serialize option、connection tagを指定しコネクトする
9 SecondaryアプリケーションにTake Overされた時、Primary アプリケーションの
全てのUOWがバックアウトされないとコネクトは失敗する.
z
MQRC_CONN_TAG_IN_USE (2271, X'8DF')
z
MQRC_CONN_TAG_NOT_USABLE (2350, X'92E')
90
z
MQRC_CONN_TAG_NOT_RELEASED(2344, X'0928') など
90
参考リンク
„
WebSphere AS V6.1 Information Center
‹
„
WebSphere Developer Domain
‹
„
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp
http://www-6.ibm.com/jp/software/websphere/developer/
MQ設計★虎の巻
‹
http://www.ibm.com/jp/software/websphere/developer/mq/toranomaki/index.html
91
91
Fly UP