Comments
Description
Transcript
クラウド時代の ハイパフォーマンス&スケーラブル データストアを考える
クラウド時代の ハイパフォーマンス&スケーラブル データストアを考える 日本アイ・ビー・エム株式会社 ソフトウェア事業 © 2009 IBM Corporation 目次 クラウド・コンピューティング概要 "クラウド的"データストア: WebSphere eXtreme Scale WXSのMap/Reduce機能 WXS応用例: solidDB Cluster 2 © 2009 IBM Corporation クラウド・コンピューティング概要 3 © 2009 IBM Corporation クラウド・コンピューティング – 新たな潮流 “クラウドはIT業界を変革するだろう… 企業運営や個人のワーク・スタイルが劇的に変わるかもしれない” • ITサービス提供・利用形態の新たな潮流 2009 • サービス利用者にとって:柔軟性、使いやすさ、経済活動の新たな機会 • サービス提供者にとって:セルフ・サービス、規模の経済、提供方法の多様化Cloud Computing • ダイナミック・インフラストラクチャが次世代データ・センター構築の成否 Software as a Service 1990 Utility Computing Grid Computing © 2009 IBM Corporation Cloud OS Map Reduce スケール・アウト 分散キャッシュ インメモリDB 仮想化技術 プロビジョニング データ・グリッド スケーラビリティー アベイラビリティー コンシステンシー SaaS Software-as-a-Service PaaS Platform-as-a-Service IaaS Infrastructure-as-a-Service プライベート・クラウド 5 パブリック・クラウド © 2009 IBM Corporation 2つの観点 使う側 –すぐに使える –コストが安い –便利 – ・・・ 提供する側 –スケールしたい –コストを安くしたい – ・・・ 6 © 2009 IBM Corporation 相反する2つの方向性 集中化 分散化 7 © 2009 IBM Corporation 相反する2つの方向性:集中化 背景 – 規模の経済 (Economies of Scale) 事象 – データ・センターの大規模化 – コンピューティング・リソースの最適化 • プール化 ( 集中化と仮想化 ) • プロビジョニング – XaaS • IaaS / PaaS / SaaS 8 © 2009 IBM Corporation CIOの第一のIT課題は運用・管理コストの削減 新規サーバーに対する支出額はほぼ横ばいなのに対し、 設置台数とその管理・運用コストは増加の一途 $300 IT予算 (US$B) 電源・空調関係にサー バー購入費用の約半 分相当が消費され、上 昇傾向にある 電源および空調関連費用 サーバー運用管理費用 $250 40 新規サーバー購入 35 トランザクションの増加に よってサーバー台数が急増 $200 30 $150 25 サーバー台数急増によ り、ワークロード増加と 運用効率の低下が懸 念される 20 $100 15 新規購入費用は横ばい 10 $50 5 $0 9 Source: IDC, Virtualization 2.0: The Next Phase in Customer Adoption, Doc #204904, December 2006 10 導入台数 (百万台) 20 09 20 08 20 07 20 06 20 05 20 04 20 03 20 02 20 01 20 00 20 99 19 98 19 97 19 19 96 0 © 2009 IBM Corporation 大規模化・集中化 10 © 2009 IBM Corporation XaaS SaaS - Software as a Service –ソフトウェアを提供 PaaS - Platform as a Service –ソフトウェア開発 ・稼働プラットフォームを提供 IaaS - Infrastructure as a Service –コンピュータ・システム基盤を提供 11 © 2009 IBM Corporation 相反する2つの方向性 :分散化 背景 – プロセッサ/ハード・ディスク技術革新速度の鈍化 – 膨大なトランザクション量 事象 – スケール・アップからスケール・アウトへ – 分散並列処理 12 © 2009 IBM Corporation スケール・アップからスケール・アウトへ スケール・アップ – 単一のコンピュータ・ノードを増強し、高速化、高機能化を実現 (垂直スケーラビリティ) スケール・アウト – 複数のコンピュータ・ノードでクラスタを組み、高速化を実現 (水平スケーラビリティ) コスト パフォーマンス 13 © 2009 IBM Corporation n層システムにおけるWebアプリケーションのスケール・アウト アプリケーションサーバー層 データ層 データ・アクセスがボトルネックとなる BL Clients BL IP Sprayer BL 永続データストア BL 14 © 2009 IBM Corporation データ層のスケール・アウト戦略 分割単位 スケーラビリティ 表 列 行 15 ○? ○? ○? パフォーマンス △ アクセス頻度 の平準化が 課題 △ アクセス頻度 の平準化が 課題 ○ コンシステンシ 実装例 ACID トランザクション 分散RDB で担保 ACID トランザクション で担保 別途考慮が 必要 正規化済の RDBの表 キー:バリュー 形式分散 キャッシュ © 2009 IBM Corporation n層システムへの分散インメモリ・キャッシュの適用 アプリケーションサーバー層 データ層 データ層のスケール・アウト化 BL Cache Clients BL Cache IP Sprayer BL BL 16 Cache 永続データストア Cache © 2009 IBM Corporation データ層スケール・アウトの課題 コンシステンシー –データの一貫性を保つこと アベイラビリティ –可用性を保つこと スケーラビリティー –処理量増大に応える拡張性を備えること 17 © 2009 IBM Corporation CAP定理 Consistency Availability Tolerance to network Partition http://www.ccs.neu.edu/groups/IEEE/ind-acad/brewer/ http://www.cs.berkeley.edu/~brewer/cs262b-2004/PODC-keynote.pdf 18 © 2009 IBM Corporation ACID特性 トランザクション処理を構成する属性 –Atomicity 原子性 –Consistency 整合性 –Isolation 分離性 –Durability 永続性 19 © 2009 IBM Corporation BASE ACID特性に代わって注目されている特性 –Basically Available •可用性 –Soft-state •緩い状態管理 –Eventual-consistency •最終的には担保される、整合性 20 © 2009 IBM Corporation データ・センターの技術革新 と WebSphere Software WebSphere プロビジョニング 仮想化 CloudBurst Appliance WebSphere Application Server HyperVisor Edition (WAS HV) アプリケーション・サーバー層の スケール・アウト WebSphere Virtual Enterprise データ層のスケール・アウト 21 (WVE) WebSphere – 分散インメモリー・キャッシュの活用 eXtreme Scale – 分散並列処理 (WXS) © 2009 IBM Corporation WebSphere CloudBurst & WAS HV 1. WebSphereが提供するアプライアンス 2.クラウド - ハードウェア・アプライアンス(CloudBurst) お客様企業のオン・プレミスのエンタープライズ・クラウド - CloudBurstの管理機能 - hypervisor (VMware, XEN, System p, z/VM) * - WebSphere Application Server イメージ - ストレージ - WebSphere Application Server パターン - ネットワーク - ソフトウェア・アプライアンス(WebSphere HV) Web 2.0 UI & CLI * 2009年6月現在VMWareのみサポート REST APIs OVF イメージ パターン アプリケーション 3. WebSphere 仮想環境 -要件に合わせてWASイメージやパターンを カストマイズ - 仮想環境をクラウドに配布(ディスペンス)し、開始 - ライフ・サイクルの管理と最適化 © 2009 IBM Corporation 22 WebSphere Virtual Enterprise ¾ Webアプリケーション環境を最適化 ¾ サービスレベルを確保しながら資源を有効利用し保守・管理を効率化 ¾ 異種環境においてもアプリケーションの改変なしでXDの機能を利用可能 一体化・自動 化された環境 WebSphere XDによる稼働環境 サーバー負荷に お得意様 CPU 応じた処理の分散 アプリA 100% 高 自動化・容易化された 保守・管理機能 0% XD CPU アプリA 100% バッチ 優先度 0% XD CPU XD 100% バッチ バッチ 他ベンダー AppServer 低 23 ゲストユーザー ユーザー層別・業務等による 優先度付けに対応したリクエス トの流量制御 負荷状況に応じた バッチのスケジュール管理 サーバーの動的配置 アプリB 他ベンダー AppServer サーバーの停止・ 保守時にもサービ スは継続稼動 CPU 100% CPU アプリB 0% サービスを止めずにアプ リケーション更新、複数 バージョンを同時稼働 100% XD 0% 登録ユーザー 0% アプリB Tomcat © 2009 IBM Corporation クラウド・コンピューティング・アーキテクチャ・モデル サービス要求 および運用 ユーザー, 運用担当者 サービス・プロバイダー クラウド・サービス層 サービス生成 および導入 Service Planning アプリケーション,プロセス,情報サービス (Application, Process and Information Services) サービスの定義 Standards Based Interfaces ソフトウェア・プラットフォーム・サービス (Software Platform Services) Standards Based Interfaces ロール・ベース のアクセス 基盤サービス サービスの 開発と パブリッシング (Infrastructure Services) クラウド管理プラットフォーム層 サービスの実行 と構成管理 サービス・ カタログ ビジネス・サポート・サービス (BSS) Standards Based Interfaces 運用 コンソール 運用サポート・サービス (OSS) サービスの 報告と分析 © 2009 IBM Corporation クラウド・コンピューティング・アーキテクチャ・モデル サービス要求 および運用 ユーザー, 運用担当者 サービス・プロバイダー クラウド・サービス層 サービス生成 および導入 Service Planning アプリケーション,プロセス,情報サービス (Application, Process and Information Services) サービスの定義 Standards Based Interfaces WebSphere WebSphere WebSphere ソフトウェア・プラットフォーム・サービス (Software eXtreme PlatformScale Services) Virtual Enterprise CloudBurst Standards Based Interfaces ロール・ベース のアクセス 基盤サービス サービスの 開発と パブリッシング (Infrastructure Services) クラウド管理プラットフォーム層 サービスの実行 と構成管理 サービス・ カタログ ビジネス・サポート・サービス (BSS) Standards Based Interfaces 運用 コンソール 運用サポート・サービス (OSS) サービスの 報告と分析 © 2009 IBM Corporation "クラウド的"データストア: WebSphere eXtreme Scale 26 © 2009 IBM Corporation WebSphere eXtreme Scale(WXS) オーバービュー データキャッシュによる高速なデータアクセス サーバ側での処理実行と結果取得 データパーティショニングによる高いスケーラ データのレプリケーションによる永続化 ビリティ ビルトインされたHA機構 分割されたデータの位置を認識したリクエス 動的クラスタによるシステム稼動時の ト・ルーティングと結果集約 ノードの追加・削除 WXSクラスタ レプリカ リクエスト Request Router 処理リクエスト を各パーティション にルーティング 27 回復 Loader Loader Loader Loader DGAgent DB 区分化することに よりデータ競合を 回避 © 2009 IBM Corporation ObjectGrid データをJavaのプロセス上に分散して配置 – メモリー上のデータに高速アクセス (<3ms @100ktps) – データのレプリケーションとパーティションニング オンデマンドなスケーラビリティ ・・・ ・・・ – プロセスを追加することでデータを動的に再配置 • 負荷が集中しないので、リニアにスケールする • 数千プロセス・レベルまでスケール IP Sprayer Web Container 28 数ミリ秒 © 2009 IBM Corporation 自律的な回復 – 可用性確保のため、データのレプリカを同期/非同期で保持 • データを保持する区画(シャード)には、プライマリとレプリカがある • レプリカの数や同期方法は構成ファイルで設定 – 障害発生時には、ポリシーが満たされるよう自動的に対応 • レプリカがプライマリへと昇格 • 必要数のレプリカがない場合は自動的に作成される r3 障害 発生 p1 r3 p1 r1 ・・・ r1 p2 r4 ・・・ r2 p3 p4 ・・・ ※各MAPのデプロイメント・ポリシーを(非)同期レプリカ=1とした場合 29 © 2009 IBM Corporation WXSの基本トポロジー ローカル構成 – ASプロセス内にObjectGridインスタンスを作成 • プロセス内で完結した構成 //OGManagerの取得 ObjectGridManager ogMgr = ObjectGridManagerFactory.getObjectGridManager(); WAS WAS WAS OG OG OG //OGインスタンスの作成 ObjectGrid og = ogMgr.createObjectGrid(“myGrid"); クライアント・サーバー構成 – データを保持するObjectGrid(サーバー)に、クライアントが接続 • Catalog Server経由で接続 //OGManagerの取得 ObjectGridManager ogMgr = ObjectGridManagerFactory.getObjectGridManager(); //カタログ・サービスへの接続 String corbaloc = “catalogServer1:2809:catalogServer2:2809” ClientClusterContext ccc = ogMgr.connect(corbaloc, null, null); //OGインスタンスの取得 ObjectGrid og = ogMgr.getObjectGrid(ccc, “myGrid"); どこ? Catalog Server Catalog Server OG OG OG1 OG OG Client Client OG 30 WAS または Standalone Java OG OG OG 直接アクセス© 2009 IBM Corporation システム構成例:ローカル構成 AppServer JVM App WXS API Partition Grid Containe r Loader (JDBC/JPA) AppServer JVM App 31 WXS API Grid Containe r © 2009 IBM Corporation システム構成例:クライアントサーバー構成 AppServer JVM App WXS API Near Cache Grid Client AppServer JVM App 32 WXS API Grid JVM Partition Grid Containe r Loader (JDBC/JPA) Grid JVM Grid Client Grid Containe r © 2009 IBM Corporation システム構成例:2nd Level Cache AppServer JVM App JPA API Near Cache JPA (EJB3) JPA Cache Plug-in AppServer JVM App Hibernate API Hibernat e Cache Plug-in Hibernate 33 Grid Client Near Cache Grid Client Grid JVM Partition Grid Containe r Grid JVM Grid Containe r © 2009 IBM Corporation レプリケーション(複製) データ複製により可用性を確保 – プライマリ区画:全ての更新処理を行う – レプリカ区画:データの変更(更新/挿入/削除)時にデータの更新を受け取る • • • Session Primar y 同期 Replica 同期レプリカと非同期レプリカがある レプリカからプライマリのデータを読みに行くことはない replicaReadEnabled=trueを設定することで、参照処理はレプリカにルーティング可能 非同期 – デプロイメント・ポリシー構成ファイル内で複製方針を指定 Replica Replica • 同期モード:トランザクション内でデータを複製 – レプリカ数により、パフォーマンスに影響を与える • • 最大レプリカ :確保すべきレプリカの最大数を指定 最小レプリカ :データの可用性の観点から、処理に必要な最小のレプリカ数 9 9 起動時、最小レプリカが満たされるまでは、区画(シャード)はActiveとならない 通常時、障害により最小レプリカが満たされない間は、区画(シャード)はデータ更新処理を受け付けない(ドミノ・モード)。※参照処理は処理 される • 非同期モード:トランザクション終了後、データを複製 • 最大レプリカ :確保すべきレプリカの最大数を指定 □デプロイメント・ポリシー構成ファイル 34 <deploymentPolicy... > <objectgridDeployment objectgridName=“myGrid01”> <mapSet name=“mapSet1” numberOfPartitions=“0“ minSyncReplicas=”1” maxSyncReplicas=“1” maxAsyncReplicas=“2”> <map ref=“myMap01” /> </mapSet> </objectgridDeployment> </deploymentPolicy> © 2009 IBM Corporation 可用性(コア・グループ/ゾーニング) コア・グループ – WebSphere AppServerの高可用機能(HAManager)と同様の仕組み • デフォルト20サーバー毎のコア・グループに自動的に分割される • 各コア・グループでリーダーが選出される – – リーダーに選出されたサーバーでは、Peer Managerが稼動 リーダーが代表して、グループ内メンバーに関するヘルス状態とイベントに関して、カタログ・サーバーとやりとりを行う ゾーニング – 自然災害や電源障害に備え、遠隔地データ・センター間でのレプリケーションをサポート OG OG coregroup1 OG coregroup2 OG OG OG OG OG coregroup3 35 OG ・・・ ・・・ OG OG ・・・ ・・・ OG Zone01 Zone02 <東京> <大阪> OG Catalog Master Server Catalog Server OG ・・・ ・・・ OG OG OG OG OG OG Catalog Server OG OG OG Catalog Server OG OG OG OG ・・・ OG OG OG ・・・OG ・・・ ・・・ ・・・OG OG coregroup4 ・・・OG OG coregroup5 OG coregroup6 © 2009 IBM Corporation セキュリティ 認証機能 – クライアント・サーバー間、およびサーバー同士での認証 – ID/Password、証明書、Kerberos token 認可機能 – JAASベースの認可機構を提供(拡張可能) – Map/ObjectGrid/Agentなど、きめ細かい認可をサポート 暗号化 – クライアント・サーバー間でのTLS/SSL接続をサポート 36 © 2009 IBM Corporation WXSの基本概念 各コンポーネントの機能概要 ObjectGrid ObjectGrid ObjectGridフレームワークの核となるコンポーネント SessionとBackingMapの連携処理を担い、Session内で共有するオ ブジェクト(Transaction IDやConnectionオブジェクト)などを保持する SLOT機能も提供 ¾ セキュリティ機能などのプラグインも提供 ¾ ObjectGridフレームワーク のコア・コンポーネント Session トランザクション処理を可能にする ※ObjectGridのオブジェクトにアクセスするため には、必ずSessionを取得する必要がある ※複数のスレッドからSessionを共有することはで きない ObjectMap ObjectMap ObjectMap BackingMapへの インターフェース 名前による紐付け BackingMap BackingMap BackingMap コミットされたデータを 保持 37 ¾ Session ¾ ¾ エントリーのトランザクショナルな処理を可能にする 複数エントリー操作の一括コミット、一括ロールバック ObjectMap アプリケーションからBackingMapへアクセスする際のインター フェースとなる(MAPの名前によるBackingMapとの紐付け) ¾ Mapの拡張として、getForUpdate / getAll / putAll などのメソッドも 提供 ¾ java.util.Mapインターフェースの拡張であるJavaMapも提供 ¾ 製品提供のEvictor機能の提供 ¾ BackingMap ¾ ¾ ¾ コミットされたデータ(Object)を保持 Loaderプラグインを介し、データベース等との連携処理を行う その他、多様なプラグインを提供 © 2009 IBM Corporation Loader plug-inによるデータロードと永続化 設定可能なデータロードのタイミング (1)プリロード Grid Container 起動時に指定されたデー タをあらかじめロード Application JVM App WXS API Near Cache Grid Client Grid JVM Partition (2)オンデマンド クライアントからのリクエスト発生時にロー ドし、キャッシュ Grid Containe r Loader (JDBC/JPA) Application JVM App WXS API Grid JVM Grid Client Grid Containe r データ永続化のポリシー (1)Write Thru Grid Container上でのデータ更新を即座 にDBへ書き戻す (2)Write Behind データ更新を一定期間バッファリングし、 まとめてDBへ書き戻す 38 © 2009 IBM Corporation DB側での更新を考慮したキャッシュの処理 Ext. App (2) Application JVM App WXS API Grid JVM Near Cache Application JVM App WXS API Partition Grid Containe r Grid Client Grid Client (1) Grid JVM Grid Containe r Grid Client Trigger (3) Grid Client (1) 一定時間毎にポーリング timestamp / 更新IDを利用 (2) DB更新PGによる通知 JMS Queue 39 (4) (3) DBトリガーによる通知 (4) JMSによる通知 Grid ContainerからClientへ通知 © 2009 IBM Corporation アプリケーション・プログラミング概要 ObjectMap API – java.util.Mapライクなインターフェースを通じて、KeyとValue(データ)のペアとして操作 – LowレベルAPIで、処理は高速 EntityManager API – JPAライクなインターフェースで、オブジェクト間の関連を格納可能 – Tupleオブジェクト形式に収納してBackingMapに格納 – ObjectGrid QueryによるSQLライクな照会機能 並列分散データ処理 – データグリッド・エージェントAPI • 各区画データに対する処理を、並列して実行 FIFOアクセス – ObjectMap APIのgetNextKey()によるFIFO実現手法 – データグリッドを「キュー」として利用 40 © 2009 IBM Corporation データの格納・取得・更新・削除 ~SessionとObjectMap~ データのへのアクセス方法 Session session = objectGrid.getSession(); ObjectMap map = session.getMap("MyDataMap"); Integer key = new Integer(999); session.begin(); map.insert(key, new MyData("Hello world!")); session.commit(); 1. Sessionオブジェクトの取得 2. ObjectMapの取得 3. セッションの開始 4. データの操作(ObjectMap) • 格納: insert • 取得: get/getAll/getForUpdate/getAllForUpdate • 更新: update • 削除: remove • その他: put (更新 or 格納)、touch(アクセス履歴の更新) ① ② ③ ④ ⑤ 5. セッションのコミット アプリケーション 41 insert(key, value) get(key) ObjectGrid Session ObjectMap key value BackingMap Loader update(key, value) remove(key) © 2009 IBM Corporation オブジェクトの取得・更新・削除 ~クライアント・サンプルコード~ // ****初期化 ~ サーバー接続 ***** ObjectGridManager objectGridManager = ObjectGridManagerFactory.getObjectGridManager(); String corbaloc = “catalogServer1:2809:catalogServer2:2809” ClientClusterContext clientClusterContext = objectGridManager.connect(corbaloc, null, null); ObjectGrid objectGrid = objectGridManager.getObjectGrid(clientClusterContext, "MyObjectGrid"); // **** session&ObjectMap取得 **** Session session = objectGrid.getSession(); ObjectMap map = session.getMap("MyDataMap"); // **** sessionを開始し、エントリーを操作 **** try{ Integer key = new Integer(999); /* Insert */ session.begin(); map.insert(key, new MyData("Hello world!")); session.commit(); /* Get&Update */ session.begin(); MyData target = (MyData)map.get(key); target.message="Hello New world!!"; map.update(key, target); session.commit(); /* Remove */ session.begin(); map.remove(key); session.commit(); } catch(Exception ex){ session.rollback(); } // ***サーバー接続クローズ **** objectGridManager.disconnect(clientClusterContext); 42 © 2009 IBM Corporation オブジェクトの格納・取得・更新・削除 ~ロック・ストラテジー~ 次の3つのロック・ストラテジーが、各BackingMapに関して選択可能 ロックは、対象エントリーに対して保持 – Optimistic(デフォルト) • アクセス時のみ、ロックを保持 • コミット時に更新オブジェクトのバージョンを確認、矛盾する場合は例外を発生 – 参照: OptimisticCallbackプラグイン • get/getAll/getForUpdate/getAllForUpdate: アクセス時に共有ロックを獲得 • put/putAll/remove/removeAll/insert/update/touch:コミット時に排他ロックを獲得 – Pessimistic • アクセス時から、トランザクション終了までロックを保持 • get/getAll: 共有ロックを獲得 • getForUpdate/getAllForUpdate: 更新ロックを獲得 • put/putAll/remove/removeAll/insert/update/touch:排他ロックを獲得 – None ロック間の互換性 • ロックを保持しない ロック待ちタイムアウト – BackingMapはロック待ちのタイムアウト値 を持ち、初期化前であれば変更可能 43 ロックの S(共有) U(更新) X(排他) 種類 ロック 強度 S(共有) 可 可 不可 弱 U(更新) 可 不可 不可 通常 X(排他) 不可 不可 不可 強 © 2009 IBM Corporation WXSを使ってみる(1) 評価版のダウンロード – http://www.ibm.com/developerworks/downloads/ws/wsdg/ (IBMサイトへのユーザー登録が必要) 44 © 2009 IBM Corporation WXSを使ってみる(2) JDK1.5以上を導入しておく 評価版(zipファイル)をダウンロードし、展開する ※以後、展開先を<OG_HOME>と表記 <OG_HOME>¥gettingstarted¥env.batを修正 – 環境に合わせてJAVA_HOMEを修正する Catalog Serverを起動する – <OG_HOME>¥gettingstarted¥runcat.bat Grid Containerを起動する – <OG_HOME>¥gettingstarted¥runcontainer.bat <コンテナ名> 45 © 2009 IBM Corporation xsadmin <OG_HOME>¥bin¥xsadmin.bat – ObjectGridのモニタリングツール(サンプル) – Catalog ServerのMBeanに接続し、各種情報を表示 主なオプション 46 -containers コンテナーのリストを表示 -primaries プライマリーを表示 -unassigned 未割当の区画を表示 -mapsizes すべてのマップのサイズを表示 -hosts ホスト一覧を表示 -mbeanservers MBeanサーバーのエンドポイントを表示 © 2009 IBM Corporation 構造を持つオブジェクトの操作 ~EntityManager~ オブジェクト間の関連を含むエンティティ をBackingMapに格納 Department KT123 Employee 12345 "Takashi Itoh" Employee 67890 "Hiroshi Yamamoto" Department Map KT123 Technical Support ・・・ Mapを意識しない、JPAライクなコーディングが可能 Employee Map 12345 Takashi Itoh 67890 Hiroshi Yamamoto @Entity(accessType=AccessType.FIELD) public class Department{ @Id public String departmentID; @OneToMany(targetEntity = Employee.class, cascade = CascadeType.PERSIST) public java.util.List<Employee> members = new java.util.ArrayList(); public String DepartmentName; EntityManager entityManager = objectGrid.getSession().getEntityManager(); ・・・ EntityTransaction transaction = entityManager.getTransaction(); } transaction.begin(); Department department=new Department("A123", "Technical Support"); department.members.add(new Employee("11111", "Takashi", "Itoh")); entityManager.persist(department); transaction.commit(); © 2009 IBM Corporation Entity ManagerによるオブジェクトのCRUD 新規エンティティの追加: persist transaction.begin(); Employee employee = new Employee("123", "Takashi", "Itoh"); entityManager.persist(employee); transaction.commit(); エンティティの検索:find Employee employee = (Employee)entityManager.find(Employee.class, "123"); エンティティの削除:remove taransaction.begin(); Employee employee = (Employee)entityManager.find(Employee.class, "123")); entityManager.remove(foundEmployee ); transaction.commit(); エンティティの更新 transaction.begin(); Employee employee = (Employee)entityManager.find(Employee.class, "123"); foundEmployee.hireDate = (new GregorianCalendar(1992,4,1)).getTimeInMillis(); transaction.commit(); © 2009 IBM Corporation オブジェクトの集合操作 ~ObjectGrid Query~ tran.begin(); Query query = em.createQuery("SELECT e FROM Employee e WHERE e.firstName like :fname"); query.setParameter("fname", “Tomo%"); Iterator<Employee> results = query.getResultIterator(); while(results.hasNext()){ Employee employee = results.next(); System.out.println("Result : "+employee.firstName+" "+employee.lastName); } tran.commit(); ObjectGrid Query: EJB2.1規定のEJB QLベースのオブ ジェクト照会言語をサポート ¾ 主なサポート機能 集約関数 AVG COUNT MAX MIN SUM 49 条件記述 BETWEEN IN IS NULL MEMBER OF EXISTS IS EMPTY LIKE 並べ替え ORDER BY グループ化 GROUP BY HAVING 結合 INNER JOIN OUTER JOIN © 2009 IBM Corporation WXSのMap/Reduce機能 50 © 2009 IBM Corporation DataGrid Agent アプリケーション・ロジックをデータ上で実行する 真にリアル・タイムの応答性能を求められるシステムではネットワークにアクセスする 時間も回避したい – データをアプリケーションに持ってくるのではなく、 「アプリケーションをデータに持っていく」 「データ上で、アプリケーションを実行する」 DataGrid Agent ・・・ – ・・・ IP Sprayer Web Server/ Web Container 51 © 2009 IBM Corporation 並列分散データ処理 ~MapGridAgent~ MapGridAgent – 全て/指定された条件のパーティションに対し処理を行い、処理結果を取得したい場合 に使用 interface MapGridAgent{ java.lang.Object process(Session s, ObjectMap map, java.lang.Object key); java.util.Map processAllEntries(Session s, ObjectMap map); } – AgentManagerのcallMapAgent( )メソッドで実行 • パーティションをホストする各JVM上でprocess()が実行され、結果をMapで戻す • callMapAgent(MapGridAgent agent, java.util.Collection key) – 各パーティションで、指定されたkeyに対して process()が呼ばれる • callMapAgent(MapGridAgent agent) – 各パーティションでprocessAllEntries()がまず呼び出される このメソッド内で、クエリーなどを利用して 処理対象の絞込みを行いMapを返す – processAllEntries()で抽出した各キーに対して process()が呼び出される GridAgent Partition #0 BackingMap GridAgent process( ) AgentManager GridAgent Partition #1 BackingMap process( ) 52 © 2009 IBM Corporation 並列分散データ処理 ~ReduceGridAgent~ ReduceGridAgent – 全て/指定された条件のエントリーから、単一の処理結果(平均、最大値など)を返す interface ReduceGridAgent{ java.lang.Object reduce(Session s, ObjectMap map, java.util.Collection keyList); java.lang.Object reduce(Session s, ObjectMap map); java.lang.Object reduceResults(java.util.Collection results); } – AgentManagerのcallReduceAgent( )メソッドで実行 • callReduceAgent(ReduceGridAgent agent, java.util.Collection key) – 各パーティションで、指定されたkeyを対象に reduce(s,map,keyList)が呼ばれる – 最後に、クライアント側で reduceResults(Collection results)が呼ばれる • callReduceAgent(ReduceGridAgent agent) この区画では最大値は a GridAgent – 各パーティションで、全てのエントリーを対象にreduce(s,map)が呼ばれる – 最後に、クライアント側で reduceResults(Collection results)が呼ばれる GridAgent AgentManager BackingMap reduce( ) GridAgent Partition #1 BackingMap reduceResults( ) 全体での最大値は b Partition #0 reduce( ) この区画では最大値は b 53 © 2009 IBM Corporation WXS応用例:solidDB Cluster 54 © 2009 IBM Corporation 応用例)WXS + solidDB = solidDB Cluster 多数のインメモリDB(solidDB)を、強力なクラスタ基盤(WXS)で統合した ソリューション お客様の課題 solidDB Clusterによる解決 – 高速・高スケーラビリティ – インメモリDB+マトリクス状クラスタ – 高信頼化 – 自動障害回復 – ノンストップオペレーション – 動的クラスタ – ベンダーロックイン回避 – SQL/JDBCとMap/EntityManagerの両方に 対応 Appサーバ solidDB HTTPサーバ solidDB 負荷分散装置 Appサーバ HTTPサーバ solidDB solidDB solidDB solidDB solidDB solidDB solidDB 負荷分散装置 solidDB Cluster WXS スケールアウト+クラスタ+HA スケールアップ+BigBox+HA 高速・高スケーラビリティ ○ 高速・高スケーラビリティ 高信頼 ○ 高信頼 ノンストップオペレーション ○ ノンストップオペレーション ベンダーロックイン回避 ○ ベンダーロックイン回避 55 スケールアウト+クラスタ+HA スケールアウト+クラスタ+HA 高速・高スケーラビリティ ○ 高速・高スケーラビリティ ○ ○ 高信頼 ○ 高信頼 ○ ○ ノンストップオペレーション ○ ノンストップオペレーション ○ ○ ベンダーロックイン回避 ○ ベンダーロックイン回避 ○ © 2009 IBM Corporation BASE solidDB Clusterの利点: 独自技術による非同期レプリケーションの高性能化 既存技術の問題点 マスターDBのレプリカ処理が重くなり,レプリカDB数に対してスケールしない DBクラスタと別機構となり,動的クラスタ管理機構と連動できない solidDB Clusterのレプリケーション機構 独自の伝播型レプリケーションにより,高いスケーラビリティと 高速なレプリケーションを提供 Master DB 2ライン伝播の場合 クラスタ構成と連動したレプリケーション Replica DB solidDB 既存のレプリケーション機構 Master DB 数十バイトのレ コード1000件を8 サーバに転送する のに約350ミリ秒 Replica DB solidDB Replica DB solidDB Replica Replica Replica ReplicaReplica Replica Replica DB DB DB DB DB DB DB Replica DB solidDB 56 Replica DB solidDB Replica DB solidDB Replica DB solidDB Replica DB solidDB © 2009 IBM Corporation solidDB Clusterの利点:動的クラスタ クラスタ全体を停止せずにノ ード・プロセスの追加・削除 が可能 アプリケーションサーバ DBキャッシュ機能と連動し, クライアントが自動的に新し いノードにも接続し,負荷分 散 solidDB Cluster JDBC Driver solidDB 停止 solidDB solidDB solidDB solidDB solidDB solidDB solidDB solidDB solidDB 追加 非同期レプリケーション機能 と連動し,バックエンドDBの データ更新も即座に反映 solidDB Cluster WXS DBMS 57 © 2009 IBM Corporation さらなる機能:データグリッド機能によるデータ集約処理の実現 Java+SQL Grid Agent Java+SQL Map-Reduce並列処理 – 検索処理の場合,複数のレプ リカサーバで負荷分散させ,多 数のMap-Reduce処理の実行 が可能 solidDB Cluster Client Driver (JDBC/GridAgent) Grid Agent Grid Agent solidDB Cluster WXS 更新結果の集約とDB書き込み – データ分割させたsolidDB群で 更新処理を負荷分散 – 複数のsolidDB群で分割された データを集約してバックエンド DBへの書き込み solidDB Cluster Client Driver (JDBC) Java+SQL 更新 Grid Agent GridAgentはsolidDBデータベースと 同じプロセスで処理を実行するため, 非常に高速にDBアクセス可能 58 Grid Agent Grid Agent Grid Agent Grid Agent Grid Agent Grid Agent solidDB Cluster WXS 集約結果 書き込み DB © 2009 IBM Corporation まとめ クラウド的なインフラに適したデータストアの特性 – スケーラビリティ、アベイラビリティが重要 WebSphere eXtreme Scale – スケーラブル・エンタプライズ・データストア • 自律的な可用性と動的なスケーラビリティ • トランザクション/セキュリティのサポート WebSphere eXtreme Scaleの適用 – キャッシュ – 分散オブジェクトストア – 既存のソフトウェアとの組み合わせ • O/R マッパー (Hibernate/OpenJPA) • インメモリRDB (solidDB) 59 © 2009 IBM Corporation 情報源 WebSphere Extended Deployment 製品紹介ページ (日本語) http://www-06.ibm.com/jp/software/websphere/ft/was/xd/v61/ (英語) http://www-306.ibm.com/software/webservers/appserv/extend/ WebSphere Developer Domain(技術情報) http://www.ibm.com/developerworks/jp/websphere/category/wxd/index.html オンライン・マニュアル http://www-306.ibm.com/software/webservers/appserv/extend/library/ 製品サポート情報ページ http://www-306.ibm.com/software/webservers/appserv/extend/support/ WXS フル機能評価版ダウンロード ※起動後、8時間経過まで継続利用可 http://www.ibm.com/developerworks/downloads/ws/wsdg/learn.html IBM Redbooks "User's Guide to WebSphere eXtreme Scale" http://www.redbooks.ibm.com/abstracts/sg247683.html WXS Wiki http://www.ibm.com/developerworks/wikis/display/objectgrid/Getting+started 60 © 2009 IBM Corporation 近日開催予定セミナーのご案内 6/3 (水) 10:00-12:00 – これでわかるsolidDB: インメモリーDBとsolidDB Cluster (WebSphere eXtreme Scale) @渋谷 ソフトウェア・コンピテンシー・センター – http://www-06.ibm.com/itsolutions/jp/solutions/leveraginginformation/events/iodseminar/sem6.html 6/11(木) 10:00-12:00 – SOA Technology Days 「【3-1】 超高速トランザクションへの対応」 @箱崎事業所 711セミナールーム – ibm.com/jp/bk/soatd/ または http://www-06.ibm.com/itsolutions/jp/solutions/businessflexibility/events/soa_techdays/index.html 6/16 (火) ※1日開催、午前は上記セミナーの再演となります – (仮) 一日でわかる分散オブジェクト・キャッシュとインメモリーDB @渋谷 ソフトウェア・コンピテンシー・センター – 申し込みページオープン前のため、ご参加を希望される場合はアンケート用紙 に「6/16セミナー受講希望」とご記入いただき、ご連絡先をご記入ください。 61 © 2009 IBM Corporation © IBM Corporation 2009. All Rights Reserved. ワークショップ、セッション、および資料は、IBMまたはセッション発表者によって準備され、それぞれ独自の見解を反映したものです。それらは情報提供の目的のみで提供されており、いかなる参加 者に対しても法律的またはその他の指導や助言を意図したものではなく、またそのような結果を生むものでもありません。本プレゼンテーションに含まれている情報については、完全性と正確性を 帰するよう努力しましたが、「現状のまま」提供され、明示または暗示にかかわらずいかなる保証も伴わないものとします。本プレゼンテーションまたはその他の資料の使用によって、あるいはその 他の関連によって、いかなる損害が生じた場合も、IBMは責任を負わないものとします。 本プレゼンテーションに含まれている内容は、IBMまたはそのサプライヤーやライセンス交付者からいかなる 保証または表明を引きだすことを意図したものでも、IBMソフトウェアの使用を規定する適用ライセンス契約の条項を変更することを意図したものでもなく、またそのような結果を生むものでもありま せん。 本プレゼンテーションでIBM製品、プログラム、またはサービスに言及していても、IBMが営業活動を行っているすべての国でそれらが使用可能であることを暗示するものではありません。本プレゼ ンテーションで言及している製品リリース日付や製品機能は、市場機会またはその他の要因に基づいてIBM独自の決定権をもっていつでも変更できるものとし、いかなる方法においても将来の製 品または機能が使用可能になると確約することを意図したものではありません。本資料に含まれている内容は、参加者が開始する活動によって特定の販売、売上高の向上、またはその他の結果 が生じると述べる、または暗示することを意図したものでも、またそのような結果を生むものでもありません。 パフォーマンスは、管理された環境において標準的なIBMベンチマークを使用した測定と予測に基づいています。ユーザーが経験する実際のスループットやパフォーマンスは、ユーザーのジョブ・ス トリームにおけるマルチプログラミングの量、入出力構成、ストレージ構成、および処理されるワークロードなどの考慮事項を含む、数多くの要因に応じて変化します。したがって、個々のユーザーが ここで述べられているものと同様の結果を得られると確約するものではありません。 記述されているすべてのお客様事例は、それらのお客様がどのようにIBM製品を使用したか、またそれらのお客様が達成した結果の実例として示されたものです。実際の環境コストおよびパフォー マンス特性は、お客様ごとに異なる場合があります。 以下は、International Business Machines Corporationの米国およびその他の国における商標。IBMの全商標のリストについては、 www.ibm.com/legal/copytrade.shtmlをご覧ください。 AIX, CICS, CICSPlex, DB2, DB2 Universal Database, i5/OS, IBM, the IBM logo, IMS, iSeries, Lotus, OMEGAMON, OS/390, Parallel Sysplex, pureXML, Rational, RCAF, Redbooks, Sametime, Smart SOA, System i, System i5, System z , Tivoli, WebSphere, z/OS. JavaおよびすべてのJava関連の商標およびロゴは Sun Microsystems, Inc.の米国およびその他の国における商標。 Microsoft, Windows, Windows NT および Windowsロゴは Microsoft Corporationの米国およびその他の国における商標。 Intel, Intelロゴ, Intel Inside, Intel Insideロゴ, Intel Centrino, Intel Centrinoロゴ, Celeron, Intel Xeon, Intel SpeedStep, Itanium, Pentium は Intel Corporationまたは子会社の米国およびその 他の国における商標または登録商標。 UNIXはThe Open Groupの米国およびその他の国における登録商標。 Linuxは、Linus Torvaldsの米国およびその他の国における商標。 その他の会社名、製品名およびサービス名等はそれぞれ各社の商標。 © 2009 IBM Corporation