(講義3) 並列システム概説 - RIKEN R-CCS · キャッシュのデータ格納構造 • アクセスするデータがキャッシュ上:ヒット – ヒット率を上げる必要
WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS...
Transcript of WebSphere eXtreme Scale 8.6 - IBM...persistence.xml にプロパティーの追加が必要 WAS...
© 2016 IBM Corporation
WebSphere eXtreme Scale
8.6.1
© 2016 IBM Corporation
ご説明内容
1. イントロダクション
2. WXS の特徴としくみ
3. WXS の導入と基本構成
3.1. WXS を WAS のセッション・パーシスタンス・ストアとして構成する
4. KVS としての WXS
5. HINTS & TIPS
6. まとめ
© 2016 IBM Corporation
1. イントロダクション
© 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
© 2016 IBM Corporation
これまでのソリューションの限界
スケーラビリティ アプリケーション・サーバーのスケール・アウト
データ・ベース・サーバーのスケール・アップ
最終的にはデータベースがボトルネックに
応答性能も競合により悪化。リニアにスケールしない。
IP Sprayer
Web Server/
Web Container EJB Container
比較的高価
アクセス集中
数十ミリ秒~数秒5
© 2016 IBM Corporation
WXS を導入する動機 (1)
メモリー上のデータに高速アクセス データを Java のプロセス上に分散して配置
データのパーティションニング (区画化)
オンデマンドなスケーラビリティ プロセスを追加することでデータを動的に再配置
負荷が集中しないので、リニアにスケールする
数千プロセス・レベルまでスケール
IP Sprayer
Web Container
数ミリ秒
6
© 2016 IBM Corporation
WXS を導入する動機 (2)
データ・グリッド アプリケーション・ロジックをデータ上で実行する
真にリアル・タイムの応答性能を求められるシステムではネットワークにアクセスする時間も回避したい
データをアプリケーションに持ってくるのではなく、「アプリケーションをデータに持っていく」「データ上でアプリケーションを実行する」
Map–Reduce 型の処理形態
IP Sprayer
Web Server/
Web Container
7
© 2016 IBM Corporation
WXS の 4つのユースケース (1)
Key-Value ストアとして WXS 独自 API によるデータの読み書き
RDB と比較して高速なアクセスが可能
WebSphere Application Server (WAS) の HTTP セッション・パーシスタンス・ストアとして DB, メモリ間複製と並ぶ選択肢
WAS / WXS の構成のみで使用可能
WXS 独自 API によるコーティング不要 通常の HTTP セッションの扱いでよい
8
© 2016 IBM Corporation
WXS の 4つのユースケース (2)
JPA L2 キャッシュとして DB アクセスに JPA を使用していれば、コードの変更は不要
WAS インスタンス間で共用できる
高速アクセスが可能
persistence.xml にプロパティーの追加が必要
WAS 動的キャッシュ (DynaCache) プロバイダーとして WAS / WXS の構成のみで使用可能
既存の動的キャッシュのコードの変更は不要
高速アクセスが可能
WAS インスタンス間で共用できる
9
© 2016 IBM Corporation
WXS の導入を検討すべき時期
アプリケーション設計までに KVS として使用する場合
WXS 独自 API でのデータ・アクセスになるため
JDBC でアクセスできるわけではないので、JDBC で書いてしまったら全面書き直しになる
サービス・イン後でも可 WAS のセッション・パーシスタント・ストアとして使用する場合
インフラの構成変更のみで使用可能
動的キャッシュ・プロバイダとして使用する場合 インフラの構成変更のみで使用可能
動的キャッシュを使用するためのアプリケーション構成は別途必要
JPA L2 キャッシュとして使用する場合 DB アクセスに JPA を既に使用していることが前提
インフラの構成変更とアプリケーションの構成変更の両方が必要
どのユースケースでも接続元のWAS と同時期が最善
とはいえ、構成やテストをサービス無停止で実施可能なわけではない
10
© 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
© 2016 IBM Corporation
WXS 8.6.1 新機能 – Liberty Deployment
WAS Liberty 上で稼働する WXS
インストールが容易
GUI 管理ツールを利用可能 構成ファイル (objectGrid.xml, objectGridDeployment.xml) が不要
REST API によるアクセスが可能 データの読み書き (Java クライアントでの読み書きも可)
管理コマンドの実行
12
© 2016 IBM Corporation
ObjectGrid (WXS の旧称) 6.1 以降の主な非推奨化
ORB トランスポート XIO を推奨
Entity Manager API データ・アクセスは ObjectMap API のみに
REST データ・サービス
REST Gateway は存続
13
© 2016 IBM Corporation
2. WXS の特徴としくみ
© 2016 IBM Corporation
パーティショニング
大量データを分割して配置 単独プロセスには保持できないデータを
分割して保持 負荷の分散にも有効
1トランザクション内で、パーティション (後述) を跨った更新処理は非推奨
デプロイメント・ポリシーで設定 配置ストラテジー
固定区画 (FIXED_PARTITIONS) 全コンテナ分の合計パーティション数を設定 (デフォルト)
コンテナーごと (PER_CONTAINER) コンテナ当たりのパーティション数を設定
パーティション数 配置ストラテジーに応じて、全コンテナ分またはコンテナ当たりのパーティション数
を指定
15
© 2016 IBM Corporation
レプリケーション
データ複製により可用性/拡張性を確保 プライマリ断片がクライアントから全ての更新処理を受け取る
レプリカ断片はデータの変更(更新/挿入/削除)時にデータを受け取る
同期レプリカと非同期レプリカがある
デプロイメント・ポリシーとして、レプリケーション方針を指定
同期レプリカ:トランザクション内でデータを複製 レプリカ数により、パフォーマンスに影響を与える
• 最大レプリカ :確保すべきレプリカの最大数を指定
• 最小レプリカ :データの可用性の観点から必要な最小のレプリカ数
非同期レプリカ:トランザクション終了後にデータを複製• 最大レプリカ :確保すべきレプリカの最大数を指定
• 断片(シャード): 区画ごとのプライマリ、同期レプリカ、非同期レプリカの総称
16
© 2016 IBM Corporation
コンテナ・サーバー障害発生時の挙動
自己回復 可用性確保のため、データのレプリカを同期/非同期で保持しておく
データを保持する断片(シャード)には、プライマリとレプリカがある
レプリカの数や同期方法は構成ファイルで設定
障害発生時には、ポリシーが満たされるよう自動的に対応 レプリカがプライマリへと昇格
必要数のレプリカがない場合は自動的に作成される
p1 p2 p3r2 p4r4
・・・ ・・・ ・・・
r3
障害発生
p1r1
r3 r1
※各MAPのデプロイメント・ポリシーを(非)同期レプリカ=1とした場合
17
© 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
© 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
© 2016 IBM Corporation
3. WXS の導入と基本構成
© 2016 IBM Corporation
WXS 構成の種類 (1) スタンドアロン vs WAS統合
スタンドアロン サポートされる単体 JVM 上で稼働
WAS 統合 WAS プロセス上で WXS を稼働させる
WAS プロファイルを WXS 拡張 (Augment) する
おすすめ!
21
© 2016 IBM Corporation
WXS 構成の種類 (2) ローカル vs クライアント・サーバー
ローカル アプリケーション・サーバー・プロセス内に WXS コンテナを構成
プロセスはアプリケーション・サーバーと WXS コンテナの兼用になる
アプリケーション・サーバー・プロセス内で完結する構成 アプリケーション・サーバー上のアプリケーションは同一プロセス内の WXS コンテ
ナのみに接続可能
クライアント・サーバー WXS コンテナ・サーバーと WXS クライアントは別プロセス
データの格納先コンテナはカタログ・サーバーが管理
WXS クライアントはカタログ・サーバーに目的のデータの格納先を問い合わせる
WAS
WXS
WAS
WXS
WAS
WXS
おすすめ!
22
© 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
© 2016 IBM Corporation
WAS & WXS 基本構成 – WXS サーバー・セル (1)
WAS と WXS サーバーを同じマシンにインストール
パッケージ名に注意 ×: IBM WebSphere eXtreme Scale Client
WXS クライアントのみ
○: ... for WebSphere Application Server WAS 統合構成用
24
© 2016 IBM Corporation
WAS & WXS 基本構成– WXS サーバー・セル (2)
WXS 拡張プロファイルを作成する
あとは通常の WAS ND と同様にセルを構成する コンテナ・サーバーとして構成する AS はクラスターにしておく。
クラスターの構成は必須ではない25
© 2016 IBM Corporation
WAS & WXS 基本構成 – WXS サーバー・セル (3)
すべてのプロセスに XIO_ADDRESS ポートを追加する 同一のマシンに複数 WAS プロセスを構成する場合は、ポート番号の
衝突に注意する。
26
© 2016 IBM Corporation
WAS & WXS 基本構成 – WXS サーバー・セル (4)
カタログ・サービス・ドメインにカタログ・サーバーを構成する
・名前を付ける・カタログ・サーバーを指定する(今回はノード・エージェント (NA)
2つ、設定行を増やすには「新規」をクリック)
・クライアント・ポートを指定する(競合しなければ任意の番号で可)
・適用→保存→NA再起動
27
© 2016 IBM Corporation
WAS & WXS 基本構成 – WXS サーバー・セル (5)
2種類の構成ファイルを作成する。 objectGrid.xml
objectGridDeployment.xml
作成した構成ファイルを WAR の META-INF ディレクトリに格納してアセンブル、エクスポートする。
作成した WAR をコンテナ・サーバー・クラスターにデプロイする。
クラスターを起動する。
28
© 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
© 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
© 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
© 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
© 2016 IBM Corporation
WAS & WXS 基本構成 – WXS クライアント・セル (1)
WAS と WXS サーバーを同じマシンにインストール
パッケージ名に注意 ○: IBM WebSphere eXtreme Scale Client
WXS クライアントのみ
○: ... for WebSphere Application Server WAS 統合構成用
33
© 2016 IBM Corporation
WAS & WXS 基本構成 – WXS クライアント・セル (2)
サーバー・セルと同様に、WXS 拡張プロファイルを作成する。
または、既存のすべての WAS プロファイルを WXS 拡張する。
あとは通常の WAS ND と同様にセルを構成する
34
© 2016 IBM Corporation
WAS & WXS 基本構成 – WXS クライアント・セル (3)
カタログ・サービス・ドメインにカタログ・サーバーを構成する
・サーバー・セルのカタログ・サービス・ドメインと同じ名前を付ける。・カタログ・サーバーは WXS クライア
ント・セル内にないので、リモート・サーバーを選択する。
・リスナー・ポートにカタログ・サーバーのXIO_ADDRESSを指定する。
35
© 2016 IBM Corporation
3.1. WXS を WAS のセッション・パーシスタンス・ストアとして構成する
© 2016 IBM Corporation
WAS & WXS セッション・パーシスタンス構成 (2)
WXS クライアント・セルで以下の構成を行う。
「セッション管理」で「オーバーフローを許可する」をチェック。
37
© 2016 IBM Corporation
WAS & WXS セッション・パーシスタンス構成 (2)
アプリケーション・サーバーに設定する例
38
© 2016 IBM Corporation
WAS & WXS セッション・パーシスタンス構成 (3)
この時点で、DB やメモリ間複製でのセッション・パーシスタンス構成は自動的に無効化される。
39
© 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
© 2016 IBM Corporation
4. KVS としての WXS
この節に掲げるサンプル・コードは、実アプリケーションにおいては不適切なことがあります(例外処理など)。実際のアプリケーション開発では、要件に応じて必要な処理を必ず検討するようにして下さい。サンプル・コードをそのまま使用したことによる不具合などについて、筆者は責任を負うものではありません。
© 2016 IBM Corporation
WXS クライアント開発の準備
ビルド・パスに WXS クライアント JAR を指定する
スタンドアロン・クライアントの場合 ogclient.jar
WXS スタンドアロン・サーバー またはクライアントと共に導入される
WAS 統合クライアントの場合 wsogclient.jar
WAS 統合 WXS サーバー または クライアントと共に導入される
42
© 2016 IBM Corporation
ValueKey
ValueKey
外部
データソース
クライアント サーバーL
oa
de
r
get
insert
update
Catalog
サーバー
クラスター情報の取得
ObjectMapインターフェースを通じてエントリー操作
Sessionのコミットで更新を反映
一度得た値を保持
(ニア・キャッシュ)
必要ならLoader
を通じて外部データソースにアクセス
クライアント・サーバー構成でのデータ・アクセス概要
43
© 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
© 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
© 2016 IBM Corporation
5. Hints & tips
© 2016 IBM Corporation
巨大オブジェクトを使わない
巨大オブジェクトの乱用はパフォーマンス低下の原因になり得る。
巨大オブジェクト = フィールドを多数持つオブジェクト
たった 1つのフィールドにアクセスしたい場合でも、グリッドへの読み書きはオブジェクトごと。
とはいえ、小さすぎるオブジェクトも Java ヒープの無駄遣いにつながることも。
47
© 2016 IBM Corporation
可能な限り key で探す
MapIndexPlugin と ObjectQuery を使用すると、Value オブジェクトのフィールドでエントリを検索することができる。
ObjectQuery でのエントリの検索は遅い。
パフォーマンス低下の原因になり得る。
可能な限り key オブジェクトでエントリを get する設計とする。
ObjectQuery はあくまで「最後の手段」。
48
© 2016 IBM Corporation
トランザクションは同一区画で完結させる
複数区画にまたがるトランザクションは非推奨となった。 そもそも遅い操作なので、パフォーマンスの観点から使用するべきで
ない。
key オブジェクトの特定のフィールドの内容によって、エントリを同一区画に格納するために、PartitionableKey インターフェースを使用することができる。 例) 同一の支店に所属する社員のエントリを、同一の区画に格納し
たい。
49
© 2016 IBM Corporation
Loader#preloadMap() は使用しない
WXS – DB 連携の際に使用する Loader プラグインには、WXS グリッド起動時に DB からグリッドへ初期データをロードする preloadMap() メソッドがある。
preloadMap() は非効率なため、使用しない。
初期データのロードにはクライアント・ローダーを使用する。
DBLoader
DBLoader
preloadMap()
クライアント・ローダー
Session#beginNoWriteThrough()
50
© 2016 IBM Corporation
スケール感を意識する (1)
下の 2つは一般に異なる ユニット・テストで 1マップの 1エントリの読み書きが 1つのクライアン
トからできる
実アプリケーションで複数マップの多数エントリの読み書きが複数クライアントからできる
ロックの存在 グリッドへのすべてのアクセスはトランザクション
ロック・ストラテジーは Optimistic(デフォルト), Pessimistic, None から選択可能 BackingMap ごとに設定
ほとんど読み取り、たまに書き込みなら Optimistic
かなりの書き込みが発生するなら Pessimistic が適することも
読み取りのみなら None (書き込みが発生するマップでは決して設定してはならない)
1オブジェクトのサイズと個数に従って Java ヒープの消費が増大する
51
© 2016 IBM Corporation
スケール感を意識する (2)
結合テストは早く始めて繰り返す
xscmd ユーティリティでグリッドの状況を常に把握する
Java ヒープの消費量も GC ログなどで実測して把握する
52
© 2016 IBM Corporation
コンテナ・サーバー停止前の “teardown”
レプリケーションが構成されている環境でコンテナ・サーバーを停止しようとすると、非常に長い時間を要したり、正常に完了しないことがある。 WXS は停止したコンテナ・サーバーに配置されていたシャードに障害
が発生したとみなし、回復処理を実行するため。
パーティション数が大きいと、現象はより顕著になる。
コンテナ・サーバーの停止前に、WXS グリッドを停止しておく。 xscmd の teardown コマンドを発行
xscmd.[sh | bat] –cep … -c teardown
53
© 2016 IBM Corporation
6. まとめ
© 2016 IBM Corporation
まとめ
WXS は Key-Value 型の分散データ・ストアである。
4つのユースケースがある。
パーティショニングにより拡張性に優れる。
レプリケーションにより可用性を向上している。
スタンドアロン構成と WAS 統合構成がある。
ローカル構成とクライアント・サーバー構成がある。
WAS 統合構成では WAS プロファイルを WXS 拡張する。
クライアント・サーバー構成ではカタログ・サーバーとコンテナ・サーバーがある。
WXS グリッドを WAS セッション・パーシスタント・ストアとして構成するには、WXS サーバー側でグリッドを構成し、WXS クライアント側となる WAS で eXtreme Scale セッション・パーシスタンス構成を行う。
WXS グリッドを KVS として使用する場合は、WXS 独自のObjectMap API を使用してデータを読み書きする。
55
© 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
© 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やその関連会社の米国およびその他の国における商標または登録商標です。