WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS...

57
© 2016 IBM Corporation WebSphere eXtreme Scale 8.6.1

Transcript of WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS...

Page 1: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

WebSphere eXtreme Scale

8.6.1

Page 2: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

ご説明内容

1. イントロダクション

2. WXS の特徴としくみ

3. WXS の導入と基本構成

3.1. WXS を WAS のセッション・パーシスタンス・ストアとして構成する

4. KVS としての WXS

5. HINTS & TIPS

6. まとめ

Page 3: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

1. イントロダクション

Page 4: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

WebSphere eXtreme Scale (WXS) とは

“分散 Key-Value ストア” (KVS) Key オブジェクトと Value オブジェクトの組でデータを格納する

KVS RDB

Java 標準 API + SQLWXS 独自 Java API

事業所番号(PK)

事業所名 都道府県 市区町村

000001 本社 東京都 中央区

000002 幕張 千葉県 千葉市

000003 大阪 大阪府 大阪市

Key Value

000001 本社, 東京都, 中央区

000002 幕張, 千葉県, 千葉市

000003 大阪, 大阪府, 大阪市

Java クライアント・アプリケーション

テーブルマップ

オブジェクトオブジェクトJavaオブジェクト

4

Page 5: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

これまでのソリューションの限界

スケーラビリティ アプリケーション・サーバーのスケール・アウト

データ・ベース・サーバーのスケール・アップ

最終的にはデータベースがボトルネックに

応答性能も競合により悪化。リニアにスケールしない。

IP Sprayer

Web Server/

Web Container EJB Container

比較的高価

アクセス集中

数十ミリ秒~数秒5

Page 6: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

WXS を導入する動機 (1)

メモリー上のデータに高速アクセス データを Java のプロセス上に分散して配置

データのパーティションニング (区画化)

オンデマンドなスケーラビリティ プロセスを追加することでデータを動的に再配置

負荷が集中しないので、リニアにスケールする

数千プロセス・レベルまでスケール

IP Sprayer

Web Container

数ミリ秒

6

Page 7: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

WXS を導入する動機 (2)

データ・グリッド アプリケーション・ロジックをデータ上で実行する

真にリアル・タイムの応答性能を求められるシステムではネットワークにアクセスする時間も回避したい

データをアプリケーションに持ってくるのではなく、「アプリケーションをデータに持っていく」「データ上でアプリケーションを実行する」

Map–Reduce 型の処理形態

IP Sprayer

Web Server/

Web Container

7

Page 8: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

WXS の 4つのユースケース (1)

Key-Value ストアとして WXS 独自 API によるデータの読み書き

RDB と比較して高速なアクセスが可能

WebSphere Application Server (WAS) の HTTP セッション・パーシスタンス・ストアとして DB, メモリ間複製と並ぶ選択肢

WAS / WXS の構成のみで使用可能

WXS 独自 API によるコーティング不要 通常の HTTP セッションの扱いでよい

8

Page 9: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

WXS の 4つのユースケース (2)

JPA L2 キャッシュとして DB アクセスに JPA を使用していれば、コードの変更は不要

WAS インスタンス間で共用できる

高速アクセスが可能

persistence.xml にプロパティーの追加が必要

WAS 動的キャッシュ (DynaCache) プロバイダーとして WAS / WXS の構成のみで使用可能

既存の動的キャッシュのコードの変更は不要

高速アクセスが可能

WAS インスタンス間で共用できる

9

Page 10: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

WXS の導入を検討すべき時期

アプリケーション設計までに KVS として使用する場合

WXS 独自 API でのデータ・アクセスになるため

JDBC でアクセスできるわけではないので、JDBC で書いてしまったら全面書き直しになる

サービス・イン後でも可 WAS のセッション・パーシスタント・ストアとして使用する場合

インフラの構成変更のみで使用可能

動的キャッシュ・プロバイダとして使用する場合 インフラの構成変更のみで使用可能

動的キャッシュを使用するためのアプリケーション構成は別途必要

JPA L2 キャッシュとして使用する場合 DB アクセスに JPA を既に使用していることが前提

インフラの構成変更とアプリケーションの構成変更の両方が必要

どのユースケースでも接続元のWAS と同時期が最善

とはいえ、構成やテストをサービス無停止で実施可能なわけではない

10

Page 11: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

ObjectGrid (WXS の旧称) 6.1 以降の主な新機能

eXtreme I/O (XIO) ORB に代わる高速トランスポート

start(stop)OgServer に代えて start(stop)XsServer コマンドを使用

eXtreme Data Format (XDF) WXS 独自実装シリアライザによる高速動作

C# クライアントのサポートが可能に

eXtreme Memory (XM) ネイティブ・メモリ (Java ヒープ外) 上にデータを格納

GC の束縛からの解放

ニア・キャッシュ無効化 (Near Cache Invalidation) ニア・キャッシュ (WXS クライアント・サイド・キャッシュ) からの無効

データの速やかな削除を可能に

グローバル・インデックス 全パーティションにまたがった索引の作成により、Value オブジェク

トでの検索が高速に11

Page 12: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

WXS 8.6.1 新機能 – Liberty Deployment

WAS Liberty 上で稼働する WXS

インストールが容易

GUI 管理ツールを利用可能 構成ファイル (objectGrid.xml, objectGridDeployment.xml) が不要

REST API によるアクセスが可能 データの読み書き (Java クライアントでの読み書きも可)

管理コマンドの実行

12

Page 13: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

ObjectGrid (WXS の旧称) 6.1 以降の主な非推奨化

ORB トランスポート XIO を推奨

Entity Manager API データ・アクセスは ObjectMap API のみに

REST データ・サービス

REST Gateway は存続

13

Page 14: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

2. WXS の特徴としくみ

Page 15: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

パーティショニング

大量データを分割して配置 単独プロセスには保持できないデータを

分割して保持 負荷の分散にも有効

1トランザクション内で、パーティション (後述) を跨った更新処理は非推奨

デプロイメント・ポリシーで設定 配置ストラテジー

固定区画 (FIXED_PARTITIONS) 全コンテナ分の合計パーティション数を設定 (デフォルト)

コンテナーごと (PER_CONTAINER) コンテナ当たりのパーティション数を設定

パーティション数 配置ストラテジーに応じて、全コンテナ分またはコンテナ当たりのパーティション数

を指定

15

Page 16: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

レプリケーション

データ複製により可用性/拡張性を確保 プライマリ断片がクライアントから全ての更新処理を受け取る

レプリカ断片はデータの変更(更新/挿入/削除)時にデータを受け取る

同期レプリカと非同期レプリカがある

デプロイメント・ポリシーとして、レプリケーション方針を指定

同期レプリカ:トランザクション内でデータを複製 レプリカ数により、パフォーマンスに影響を与える

• 最大レプリカ :確保すべきレプリカの最大数を指定

• 最小レプリカ :データの可用性の観点から必要な最小のレプリカ数

非同期レプリカ:トランザクション終了後にデータを複製• 最大レプリカ :確保すべきレプリカの最大数を指定

• 断片(シャード): 区画ごとのプライマリ、同期レプリカ、非同期レプリカの総称

16

Page 17: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

コンテナ・サーバー障害発生時の挙動

自己回復 可用性確保のため、データのレプリカを同期/非同期で保持しておく

データを保持する断片(シャード)には、プライマリとレプリカがある

レプリカの数や同期方法は構成ファイルで設定

障害発生時には、ポリシーが満たされるよう自動的に対応 レプリカがプライマリへと昇格

必要数のレプリカがない場合は自動的に作成される

p1 p2 p3r2 p4r4

・・・ ・・・ ・・・

r3

障害発生

p1r1

r3 r1

※各MAPのデプロイメント・ポリシーを(非)同期レプリカ=1とした場合

17

Page 18: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

WXS ObjectGrid の基本概念

ObjectGrid

ObjectGridフレームワークのコア・コンポーネント

BackingMap コミットされたデータ(Object)を保持 Loaderプラグインを介し、データベース等との連携処理を行う その他、多様なプラグインを提供

ObjectGrid ObjectGridフレームワークの核となるコンポーネント SessionとBackingMapの連携処理を担い、Session内で共有するオブジェクト(Transaction IDやConnectionオブジェクト)などを保持するSLOT機能も提供 セキュリティ機能などのプラグインも提供

Session エントリーのトランザクショナルな処理を可能にする 複数エントリー操作の一括コミット、一括ロールバック

ObjectMap アプリケーションからBackingMapへアクセスする際のインターフェースとなる(MAPの名前によるBackingMapとの紐付け) Mapの拡張として、getForUpdate / getAll / putAll などのメソッドも提供 java.util.Mapインターフェースの拡張であるJavaMapも提供 製品提供のEvictor機能の提供

Session

トランザクション処理を可能にする※ObjectGridのオブジェクトにアクセスするためには、必ずSessionを取得して開始する必要がある※スレッド間でSessionを共有することはできない

ObjectMap

BackingMap

ObjectMapObjectMap

BackingMapへのインターフェース

BackingMapBackingMap

コミットされたデータを保持

名前による紐付け

18

Page 19: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

ObjectGrid の代表的なプラグイン (機能拡張)

BackingMapの代表的なプラグイン

Evictor• Map上の古くなったエントリーを所定のアルゴリズムで削除する

Loader• Map上のデータとデータベース/ファイルとの橋渡しを行う

MapEventListener• Evictorによるエントリーの削除やLoaderによるpreloadの完了などMap

に対するイベントの通知を受け取る

MapIndexPlugin• Map内オブジェクトのインデックス機能を提供する

ObjectGridの代表的なプラグイン

ObjectgridEventListener• トランザクションの開始・コミットなどのイベントの通知を受け取る

TransactionCallback• Session (WXS トランザクション) と DB トランザクションの橋渡しを行う

ObjectGrid

Session

ObjectMap

トランザクション処理を可能にする

BackingMapへのインターフェース

ObjectGridフレームワークのコア・コンポーネント

BackingMap

コミットされたデータのメモリー内キャッシュ

19

Page 20: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

3. WXS の導入と基本構成

Page 21: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

WXS 構成の種類 (1) スタンドアロン vs WAS統合

スタンドアロン サポートされる単体 JVM 上で稼働

WAS 統合 WAS プロセス上で WXS を稼働させる

WAS プロファイルを WXS 拡張 (Augment) する

おすすめ!

21

Page 22: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

WXS 構成の種類 (2) ローカル vs クライアント・サーバー

ローカル アプリケーション・サーバー・プロセス内に WXS コンテナを構成

プロセスはアプリケーション・サーバーと WXS コンテナの兼用になる

アプリケーション・サーバー・プロセス内で完結する構成 アプリケーション・サーバー上のアプリケーションは同一プロセス内の WXS コンテ

ナのみに接続可能

クライアント・サーバー WXS コンテナ・サーバーと WXS クライアントは別プロセス

データの格納先コンテナはカタログ・サーバーが管理

WXS クライアントはカタログ・サーバーに目的のデータの格納先を問い合わせる

WAS

WXS

WAS

WXS

WAS

WXS

おすすめ!

22

Page 23: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

WAS & WXS 構成の例

WAS 統合 / クライアント・サーバー構成 この例での WAS は Network Deployment

WXS サーバーと WXS クライアント (WXS にデータを読み書きする WAS) は別セルとして構成

DM

NA

AS

NA

AS

マシン C1 マシン C2

WXS クライアント・セル

DM

NA(カタログ・サーバー)

AS(コンテナ・サーバー)

マシン S1 マシン S2

WXS サーバー・セル

NA(カタログ・サーバー)

AS(コンテナ・サーバー)

カタログ・サーバーには専用の AS を構成することが推奨されています。

今回は機能検証が目的のため、ノード・エージェントにカタログ・サーバーを兼ねさせています。

以下のユースケースでは WAS Base ライセンスでWXS を利用可。・HTTP セッション・パーシスタンス・動的キャッシュ・プロバイダ

23

Page 24: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

WAS & WXS 基本構成 – WXS サーバー・セル (1)

WAS と WXS サーバーを同じマシンにインストール

パッケージ名に注意 ×: IBM WebSphere eXtreme Scale Client

WXS クライアントのみ

○: ... for WebSphere Application Server WAS 統合構成用

24

Page 25: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

WAS & WXS 基本構成– WXS サーバー・セル (2)

WXS 拡張プロファイルを作成する

あとは通常の WAS ND と同様にセルを構成する コンテナ・サーバーとして構成する AS はクラスターにしておく。

クラスターの構成は必須ではない25

Page 26: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

WAS & WXS 基本構成 – WXS サーバー・セル (3)

すべてのプロセスに XIO_ADDRESS ポートを追加する 同一のマシンに複数 WAS プロセスを構成する場合は、ポート番号の

衝突に注意する。

26

Page 27: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

WAS & WXS 基本構成 – WXS サーバー・セル (4)

カタログ・サービス・ドメインにカタログ・サーバーを構成する

・名前を付ける・カタログ・サーバーを指定する(今回はノード・エージェント (NA)

2つ、設定行を増やすには「新規」をクリック)

・クライアント・ポートを指定する(競合しなければ任意の番号で可)

・適用→保存→NA再起動

27

Page 28: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

WAS & WXS 基本構成 – WXS サーバー・セル (5)

2種類の構成ファイルを作成する。 objectGrid.xml

objectGridDeployment.xml

作成した構成ファイルを WAR の META-INF ディレクトリに格納してアセンブル、エクスポートする。

作成した WAR をコンテナ・サーバー・クラスターにデプロイする。

クラスターを起動する。

28

Page 29: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

WAS & WXS 基本構成 – WXS サーバー・セル (6)

objectGrid.xml の例 設定内容の詳細は以下リンク先を参照

http://www.ibm.com/support/knowledgecenter/ja/SSTVLU_8.6.1/com.ibm.websphere.extremescale.doc/rxsogref.html

objectGridDeployment.xml の例 設定内容の詳細は以下リンク先を参照

http://www.ibm.com/support/knowledgecenter/ja/SSTVLU_8.6.1/com.ibm.websphere.extremescale.doc/rxsdplcyref.html

<?xml version="1.0" encoding="UTF-8"?>

<objectGridConfig xmlns="http://ibm.com/ws/objectgrid/config"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://ibm.com/ws/objectgrid/config ../xsds/objectGrid.xsd ">

<objectGrids>

<objectGrid name="Grid02">

<backingMap name="Map02" copyMode="COPY_TO_BYTES" nearCacheEnabled="false"/>

</objectGrid>

</objectGrids>

</objectGridConfig>

<?xml version="1.0" encoding="UTF-8"?>

<deploymentPolicy xmlns="http://ibm.com/ws/objectgrid/deploymentPolicy"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://ibm.com/ws/objectgrid/deploymentPolicy ../xsds/deploymentPolicy.xsd ">

<objectgridDeployment objectgridName="Grid01">

<mapSet name="MapSet02" numberOfPartitions="31" minSyncReplicas="1" developmentMode="false">

<map ref="Map02"/>

</mapSet>

</objectgridDeployment>

</deploymentPolicy>

29

Page 30: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

xscmd ユーティリティ (1)

WXS グリッドの設定・操作・モニターのためのコマンドライン・ユーティリティ xsadmin ユーティリティは 7.1.1 で安定化された

基本的な使用方法 xscmd.[sh | bat] –cep <カタログ・サービス・エンドポイント> -c <xscmd

コマンド> [その他のオプション]

カタログ・サービス・エンドポイント <カタログ・サーバー・ホスト名またはIPアドレス>:<カタログ・サーバーXIOポート>

“,” 区切りで複数指定可能

接続先エンドポイントはランダムに選択される

使用例 xscmd.sh –cep wxs01:4811,wxs02:4811 –c showMapSizes

30

Page 31: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

xscmd ユーティリティ (2)

よく使用される xscmd コマンド showMapSizes

シャードごとのコンテナへの配置状況とエントリ数、使用バイト数を表示

showPlacement コンテナへのシャードの配置状況を表示

findByKey マップ内の key オブジェクトを検索

-rv オプションで value オブジェクトの内容を表示

引数や表示に使用される文字列は、それぞれのオブジェクトの toString() 表現

xscmd コマンドの一覧は以下を参照 http://www.ibm.com/support/knowledgecenter/ja/SSTVLU_8.6.1/co

m.ibm.websphere.extremescale.doc/rxsxscmdlist.html

31

Page 32: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

xscmd ユーティリティ (3)

ヒント

現象 WAS 9.0 + WXS 8.6.1 + IBM Java 1.8.0 SR3 で xscmd が正常に稼働しない

回避策 xscmd を実行するマシンで以下の手順を実施

<WAS_ROOT>/properties/orb.properties 内のjavax.rmi.CORBA.UtilClass=com.ibm.ws.orb.WSUtilDelegateImpl プロパティー行をコメントアウトまたは削除する

32

Page 33: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

WAS & WXS 基本構成 – WXS クライアント・セル (1)

WAS と WXS サーバーを同じマシンにインストール

パッケージ名に注意 ○: IBM WebSphere eXtreme Scale Client

WXS クライアントのみ

○: ... for WebSphere Application Server WAS 統合構成用

33

Page 34: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

WAS & WXS 基本構成 – WXS クライアント・セル (2)

サーバー・セルと同様に、WXS 拡張プロファイルを作成する。

または、既存のすべての WAS プロファイルを WXS 拡張する。

あとは通常の WAS ND と同様にセルを構成する

34

Page 35: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

WAS & WXS 基本構成 – WXS クライアント・セル (3)

カタログ・サービス・ドメインにカタログ・サーバーを構成する

・サーバー・セルのカタログ・サービス・ドメインと同じ名前を付ける。・カタログ・サーバーは WXS クライア

ント・セル内にないので、リモート・サーバーを選択する。

・リスナー・ポートにカタログ・サーバーのXIO_ADDRESSを指定する。

35

Page 36: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

3.1. WXS を WAS のセッション・パーシスタンス・ストアとして構成する

Page 37: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

WAS & WXS セッション・パーシスタンス構成 (2)

WXS クライアント・セルで以下の構成を行う。

「セッション管理」で「オーバーフローを許可する」をチェック。

37

Page 38: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

WAS & WXS セッション・パーシスタンス構成 (2)

アプリケーション・サーバーに設定する例

38

Page 39: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

WAS & WXS セッション・パーシスタンス構成 (3)

この時点で、DB やメモリ間複製でのセッション・パーシスタンス構成は自動的に無効化される。

39

Page 40: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

WAS & WXS セッション・パーシスタンス構成 (3)

セッション管理構成とチューニング・パラメーターはデプロイメント・マネージャー (DM) が稼働するマシンのsplicer.properties に記述する。 <DMプロファイル_root>/config/cells/<セル名>/nodes/<ノード名>/servers/<サーバー名>/splicer.properties

上のパスの各 splicer.properties を編集して、ノード同期を用いて各ノードに構成を伝搬させる。

splicer.properties について詳しくは以下を参照 http://www.ibm.com/support/knowledgecenter/ja/SSTVLU_8.6.1/

com.ibm.websphere.extremescale.doc/rxssplice.html

# Generated by writeSplicerFile() at Tue Aug 16 11:58:47 JST 2016

useURLEncoding=false

useCookies=true

objectGridType=REMOTE

reuseSessionId=true

webSphereCatalogDomain=CatalogServiceDomain

objectGridName=Grid01

replicationInterval=10

sessionTableSize=1000

fragmentedSession=true

sessionManagementType=XSRemoteSessionManagement

40

Page 41: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

4. KVS としての WXS

この節に掲げるサンプル・コードは、実アプリケーションにおいては不適切なことがあります(例外処理など)。実際のアプリケーション開発では、要件に応じて必要な処理を必ず検討するようにして下さい。サンプル・コードをそのまま使用したことによる不具合などについて、筆者は責任を負うものではありません。

Page 42: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

WXS クライアント開発の準備

ビルド・パスに WXS クライアント JAR を指定する

スタンドアロン・クライアントの場合 ogclient.jar

WXS スタンドアロン・サーバー またはクライアントと共に導入される

WAS 統合クライアントの場合 wsogclient.jar

WAS 統合 WXS サーバー または クライアントと共に導入される

42

Page 43: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

ValueKey

ValueKey

外部

データソース

クライアント サーバーL

oa

de

r

get

insert

update

Catalog

サーバー

クラスター情報の取得

ObjectMapインターフェースを通じてエントリー操作

Sessionのコミットで更新を反映

一度得た値を保持

(ニア・キャッシュ)

必要ならLoader

を通じて外部データソースにアクセス

クライアント・サーバー構成でのデータ・アクセス概要

43

Page 44: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

WXS クライアントの基本操作 サンプル・コード

package com.ibm.test;

import com.ibm.websphere.objectgrid.ClientClusterContext;

import com.ibm.websphere.objectgrid.ObjectGrid;

import com.ibm.websphere.objectgrid.ObjectGridException;

import com.ibm.websphere.objectgrid.ObjectGridManager;

import com.ibm.websphere.objectgrid.ObjectGridManagerFactory;

import com.ibm.websphere.objectgrid.ObjectMap;

import com.ibm.websphere.objectgrid.Session;

import com.ibm.websphere.objectgrid.plugins.TransactionCallbackException;

public class Test01 {

public static void main(String[] args) throws TransactionCallbackException, ObjectGridException {

ObjectGridManager ogm = ObjectGridManagerFactory.getObjectGridManager(); // ObjectGridManager の取得ClientClusterContext ccc = ogm.connect(“wxs861-1:4811,wxs861-2:4811”, null, null); // カタログ・サーバーへ接続ObjectGrid og = ogm.getObjectGrid(ccc, “Grid02”); // ObjectGrid の取得Session session = og.getSession(); // Session の取得ObjectMap om = session.getMap(“Map02”); // ObjectMap の取得

Integer key = new Integer(1); // key オブジェクトの作成String value = new String(“Hello, world!”); // value オブジェクトの作成

session.begin(); // Session の開始om.insert(key, value); // エントリの挿入session.commit(); // Session のコミット

session.begin(); // Session の開始Object obj = om.get(key); // key に関連づけられた value の取得session.commit(); // Session のコミット

System.out.println("key = " + key.toString() + ", value = " + obj.toString());

om.remove(key); // エントリの削除// Session#begin() / commit() を発行しない場合、暗黙的に Session が発行される

}

}

44

Page 45: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

WAS 統合 WXS クライアントでのサンプル・コードpackage com.ibm.test;

import com.ibm.websphere.objectgrid.CatalogDomainInfo;

import com.ibm.websphere.objectgrid.ClientClusterContext;

import com.ibm.websphere.objectgrid.ObjectGrid;

import com.ibm.websphere.objectgrid.ObjectGridException;

import com.ibm.websphere.objectgrid.ObjectGridManager;

import com.ibm.websphere.objectgrid.ObjectGridManagerFactory;

import com.ibm.websphere.objectgrid.ObjectMap;

import com.ibm.websphere.objectgrid.Session;

import com.ibm.websphere.objectgrid.plugins.TransactionCallbackException;

public class WXSTestBean {

public WXSTestBean() {

super();

}

public WXSTestBean(StringBuffer sb) throws TransactionCallbackException, ObjectGridException {

ObjectGridManager ogm = ObjectGridManagerFactory.getObjectGridManager();

CatalogDomainInfo di = ogm.getCatalogDomainManager().getDomainInfo("CatalogServiceDomain");

ClientClusterContext ccc = ogm.connect(di.getClientCatalogServerEndpoints(), di.getClientSecurityConfiguration(), null);

ObjectGrid og = ogm.getObjectGrid(ccc, "Grid02");

Session session = og.getSession();

ObjectMap om = session.getMap("Map02");

Integer key = new Integer(1);

String value = new String("Hello, world!");

session.begin();

om.insert(key, value);

session.commit();

session.begin();

Object obj = om.get(key);

session.commit();

sb.append("key = " + key.toString() + ", value = " + obj.toString());

om.remove(key);

}

}

カタログ・サービス・ドメイン名からCatalogDomainInfo を取得

CatalogDomainInfo からカタログ・サーバーのエンドポイントを取得

45

Page 46: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

5. Hints & tips

Page 47: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

巨大オブジェクトを使わない

巨大オブジェクトの乱用はパフォーマンス低下の原因になり得る。

巨大オブジェクト = フィールドを多数持つオブジェクト

たった 1つのフィールドにアクセスしたい場合でも、グリッドへの読み書きはオブジェクトごと。

とはいえ、小さすぎるオブジェクトも Java ヒープの無駄遣いにつながることも。

47

Page 48: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

可能な限り key で探す

MapIndexPlugin と ObjectQuery を使用すると、Value オブジェクトのフィールドでエントリを検索することができる。

ObjectQuery でのエントリの検索は遅い。

パフォーマンス低下の原因になり得る。

可能な限り key オブジェクトでエントリを get する設計とする。

ObjectQuery はあくまで「最後の手段」。

48

Page 49: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

トランザクションは同一区画で完結させる

複数区画にまたがるトランザクションは非推奨となった。 そもそも遅い操作なので、パフォーマンスの観点から使用するべきで

ない。

key オブジェクトの特定のフィールドの内容によって、エントリを同一区画に格納するために、PartitionableKey インターフェースを使用することができる。 例) 同一の支店に所属する社員のエントリを、同一の区画に格納し

たい。

49

Page 50: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

Loader#preloadMap() は使用しない

WXS – DB 連携の際に使用する Loader プラグインには、WXS グリッド起動時に DB からグリッドへ初期データをロードする preloadMap() メソッドがある。

preloadMap() は非効率なため、使用しない。

初期データのロードにはクライアント・ローダーを使用する。

DBLoader

DBLoader

preloadMap()

クライアント・ローダー

Session#beginNoWriteThrough()

50

Page 51: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

スケール感を意識する (1)

下の 2つは一般に異なる ユニット・テストで 1マップの 1エントリの読み書きが 1つのクライアン

トからできる

実アプリケーションで複数マップの多数エントリの読み書きが複数クライアントからできる

ロックの存在 グリッドへのすべてのアクセスはトランザクション

ロック・ストラテジーは Optimistic(デフォルト), Pessimistic, None から選択可能 BackingMap ごとに設定

ほとんど読み取り、たまに書き込みなら Optimistic

かなりの書き込みが発生するなら Pessimistic が適することも

読み取りのみなら None (書き込みが発生するマップでは決して設定してはならない)

1オブジェクトのサイズと個数に従って Java ヒープの消費が増大する

51

Page 52: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

スケール感を意識する (2)

結合テストは早く始めて繰り返す

xscmd ユーティリティでグリッドの状況を常に把握する

Java ヒープの消費量も GC ログなどで実測して把握する

52

Page 53: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

コンテナ・サーバー停止前の “teardown”

レプリケーションが構成されている環境でコンテナ・サーバーを停止しようとすると、非常に長い時間を要したり、正常に完了しないことがある。 WXS は停止したコンテナ・サーバーに配置されていたシャードに障害

が発生したとみなし、回復処理を実行するため。

パーティション数が大きいと、現象はより顕著になる。

コンテナ・サーバーの停止前に、WXS グリッドを停止しておく。 xscmd の teardown コマンドを発行

xscmd.[sh | bat] –cep … -c teardown

53

Page 54: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

6. まとめ

Page 55: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

まとめ

WXS は Key-Value 型の分散データ・ストアである。

4つのユースケースがある。

パーティショニングにより拡張性に優れる。

レプリケーションにより可用性を向上している。

スタンドアロン構成と WAS 統合構成がある。

ローカル構成とクライアント・サーバー構成がある。

WAS 統合構成では WAS プロファイルを WXS 拡張する。

クライアント・サーバー構成ではカタログ・サーバーとコンテナ・サーバーがある。

WXS グリッドを WAS セッション・パーシスタント・ストアとして構成するには、WXS サーバー側でグリッドを構成し、WXS クライアント側となる WAS で eXtreme Scale セッション・パーシスタンス構成を行う。

WXS グリッドを KVS として使用する場合は、WXS 独自のObjectMap API を使用してデータを読み書きする。

55

Page 56: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

参考にしたもの

WebSphere eXtreme Scale 8.6.1 Knowledge Center http://www.ibm.com/support/knowledgecenter/ja/SSTVLU_8.6.1/co

m.ibm.websphere.extremescale.doc/kc_welcome-xs.html

Redbook: WebSphere eXtreme Scale v8.6 Key Concepts and Usage Scenarios http://www.redbooks.ibm.com/abstracts/sg247683.html

Redbook: WebSphere eXtreme Scale Best Practices for Operation and Management http://www.redbooks.ibm.com/abstracts/sg247964.html

developerWorks 日本語版: WebSphere eXtreme Scale http://www.ibm.com/developerworks/jp/websphere/category/wxd/

wxs.html

56

Page 57: WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS 動的キャッシュ(DynaCache) プロバイダーとして ... ニア・キャッシュ(WXS

© 2016 IBM Corporation

ワークショップ、セッション、および資料は、IBMまたはセッション発表者によって準備され、それぞれ独自の見解を反映したものです。それらは情報提供の目的のみで提供されており、いかなる参加者に対しても法律的またはその他の指導や助言を意図したものではなく、またそのような結果を生むものでもありません。本講演資料に含まれている情報については、完全性と正確性を期するよう努力しましたが、「現状のまま」提供され、明示または暗示にかかわらずいかなる保証も伴わないものとします。本講演資料またはその他の資料の使用によって、あるいはその他の関連によって、いかなる損害が生じた場合も、IBMは責任を負わないものとします。 本講演資料に含まれている内容は、IBMまたはそのサプライヤーやライセンス交付者からいかなる保証または表明を引きだすことを意図したものでも、IBMソフトウェアの使用を規定する適用ライセンス契約の条項を変更することを意図したものでもなく、またそのような結果を生むものでもありません。

本講演資料でIBM製品、プログラム、またはサービスに言及していても、IBMが営業活動を行っているすべての国でそれらが使用可能であることを暗示するものではありません。本講演資料で言及している製品リリース日付や製品機能は、市場機会またはその他の要因に基づいてIBM独自の決定権をもっていつでも変更できるものとし、いかなる方法においても将来の製品または機能が使用可能になると確約することを意図したものではありません。本講演資料に含まれている内容は、参加者が開始する活動によって特定の販売、売上高の向上、またはその他の結果が生じると述べる、または暗示することを意図したものでも、またそのような結果を生むものでもありません。 パフォーマンスは、管理された環境において標準的なIBMベンチマークを使用した測定と予測に基づいています。ユーザーが経験する実際のスループットやパフォーマンスは、ユーザーのジョブ・ストリームにおけるマルチプログラミングの量、入出力構成、ストレージ構成、および処理されるワークロードなどの考慮事項を含む、数多くの要因に応じて変化します。したがって、個々のユーザーがここで述べられているものと同様の結果を得られると確約するものではありません。

記述されているすべてのお客様事例は、それらのお客様がどのようにIBM製品を使用したか、またそれらのお客様が達成した結果の実例として示されたものです。実際の環境コストおよびパフォーマンス特性は、お客様ごとに異なる場合があります。

IBM、IBM ロゴ、ibm.com、WebSphereは、世界の多くの国で登録されたInternational Business Machines Corporationの商標です。他の製品名およびサービス名等は、それぞれIBMまたは各社の商標である場合があります。現時点での IBM の商標リストについては、www.ibm.com/legal/copytrade.shtmlをご覧ください。

Windowsは Microsoft Corporationの米国およびその他の国における商標です。JavaおよびすべてのJava関連の商標およびロゴは Oracleやその関連会社の米国およびその他の国における商標または登録商標です。