View
383
Download
0
Category
Preview:
Citation preview
ULSCopyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by
Apache GEODE Meetup Tokyo #1
超高速処理とスケーラビリティを両立するApache GEODE
2016/6/9
ウルシステムズ株式会社http://www.ulsystems.co.jp
mailto:info@ulsystems.co.jp
Tel: 03-6220-1420 Fax: 03-6220-1402
ULSCopyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 1
About Me
山河 征紀
Business
Private
• GEODE歴:9年(Since 2008)• GEODEバグ報告数:nnn 件
• ランナー• 横浜マラソン2016:4h17m• 目標は今年中のサブ4
• アルピニスト• 目標はココ
ULS 2Copyright © 2011-2013 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by
超高速処理とスケーラビリティを両立するApache GEODE
ULSCopyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 3
Apache GEODEとは
ざっくりいうとインメモリーの分散KVS
–データを各マシンのメモリーに分散配置
–大量トランザクションに対する高速処理
–動的なスケーラビリティ
–ミッションクリティカルでの利用
採用実績
–欧米の金融機関
–政府、防衛
ULSCopyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 4
近年様々なデータストアが誕生
選択肢は多種多様に
NoSQL
In-Memory DataGrid
In-Memory Cache
Traditional Database
Columnar Database
ULSCopyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 5
日本はRDB命
ULSCopyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 6
サーバ
サーバ
サーバ
アプリケーションのスケールアウトは容易だが、RDBがボトルネックに
良くあるシステムの課題
JVM
JVM
JVM
アプリケーション
アプリケーション
アプリケーション
RDB
ULSCopyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 7
RDBボトルネック対策
スケールアップ 水平分割
NoSQL キャッシュの利用
×ネットワークを跨いでいる時点で遅い
ULSCopyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 8
アプリケーションと同じメモリー上にデータを保持することで超高速化
Apache GEODEを使用した超高速処理システム
サーバ
サーバ
サーバ
JVM
JVM
JVM
アプリケーション
アプリケーション
アプリケーション
・・・ 無限
のス
ケー
ラビ
リテ
ィ
ULSCopyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 9
メモリーアクセス vs RDBアクセス
ディスクアクセスしようものなら最悪・・・
Event Latency
CPUキャッシュアクセス(L2) 3 ns
メモリーアクセス 120 ns
SSDディスク I/O 150,000 ns
同一データセンター内通信 500,000 ns
ディスク I/O 10,000,000 ns
メモリーアクセスのみ通信+メモリーアクセス・・・
MemorySSDDisk
ULSCopyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 10
メモリー内のデータをどのように分散するか?
アプリケーションが扱うデータは大きく分けて「マスターデータ」と「トランザクションデータ」に分類できる
マスターデータ
トランザクションデータ
• 割と固定的• データ数が急激に増えないもの• 更新が少なく参照が多い
• データの一部が変動する
• 更新処理が多い
• 日毎にデータが増加するもの
特性
顧客情報、商品情報等
取引情報、予約情報等
レプリケーション
パーティション
ULSCopyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 11
レプリケーションとパーティション
データの特性によってレプリケーションとパーティションを使い分ける
パーティションレプリケーション
すべてのマシンで同一のデータを保持する
何れかのマシンにデータが存在する
ULSCopyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 14
全てのサーバに、全てのデータが存在するため高速なデータ取得が可能
レプリケーションデータの読み込み
Full Replication
クライアントA
クライアントC
クライアントB
クライアントD
A B
C
A B
D
A
C D
B
C D
Read A
Read C
Read A
Read C
Read B
Read D
Read B
Read D
D C
B A
凡例
A データ
メモリ空間
ULSCopyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 15
全てのマシンのデータを更新した後、呼び出し元へ応答する
マシン数が多いほど、書き込み性能が劣化する可能性がある
Full Replication
クライアント
A B
C
A B
D
A
C D
B
C D
Write A
D C
B A
②更新
①更新
②更新
②更新
③確認
③確認
③確認
Reply
④応答
レプリケーションデータの書き込み
凡例
A データ
メモリ空間
ULSCopyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 16
接続先のマシンのデータを更新した後、呼び出し元へ応答する
その他のデータ更新は非同期で行われる(更新処理性能は安定するが、一貫性は緩い)
Full Replication
クライアント
A B
C
A B
D
A
C D
B
C D
Write A
D C
B A
②更新
①更新
②更新
②更新
Reply
②応答
レプリケーションデータの書き込み(非同期)
凡例
A データ
メモリ空間
ULSCopyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 17
全マシンが同時にダウンしない限りデータの消失はない
クライアントとの接続については、自動的に切り替わる
Full Replication
クライアント
A B
C
A B
D
A
C D
B
C D
Read A
D C
B A
レプリケーションのフェイルオーバ
凡例
A データ
メモリ空間
ULSCopyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 18
データを分割して保持することで、メモリーを節約することが出来る
データが存在しない場合は、データが配置されたマシンに自動的に問い合わせが行われる
クライアント
A
C
B
Read A
D
Read B
B
C
A
D
パーティションデータの読み込み
凡例
A
A
データ
データのバックアップ
メモリ空間
Read D
BD
問い合わせ
問い合わせ
ULSCopyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 19
データ更新処理はプライマリデータとそのバックアップコピーに対してのみ行なわれる
多数のマシンが存在した場合でも一定した処理速度となる
クライアント
AWrite A
②更新
A
①更新
③確認
Reply
④応答
B
CD
D
B
C
パーティションデータの書き込み
凡例
A
A
データ
データのバックアップ
メモリ空間
ULSCopyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 20
ダウンしたマシンのデータは他のマシンに引き継がれる
クライアントとの接続については、自動的に切り替わる
クライアント
D
A B
C
Read A
C
B
DA
A
Primary
Primary
Primary
Primary
Primary
A
パーティションのフェイルオーバ
凡例
A
A
データ
データのバックアップ
メモリ空間
ULSCopyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 21
レプリケーション/パーティション サマリー
マスターデータ
トランザクションデータ
レプリケーション
パーティション
顧客情報商品情報等
取引情報予約情報等
→データ参照時の性能を最速に
→データ更新、データ参照時の性能を安定させる
→データを分散配置することでメモリ使用量を抑える
Read ○ データ量 ◎
Write ◎同時
接続数◎
Read ◎ データ量 △
Write △同時
接続数◎
性能 拡張性
ULSCopyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 22
データは、Javaのヒープメモリ上にJavaのオブジェクトとして管理される
GEODEにおけるデータ管理
JVM
Cache
RegionKey Value
ABC
GGG
XYG
Region
…
Region
…
• インメモリデータへのエントリポイント• アプリケーションはキャッシュを介して、データへの一連の操作を行う• 任意のリージョンにより構成
• 論理的なデータのグループ(RDBにおけるテーブルのイメージ)• Key-Value形式でのデータ管理• 任意のオブジェクトに対して、一意のKeyを指定• スキーマの概念はなく、任意のオブジェクトを格納
Cache
Region
public class Employee {private int employeeNo;private String firstName;private String lastName;private String deptCode;・・・・・・
}
ULSCopyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 23
Region定義方法
XMLでRegionを定義
<cache>
<region name=“replicateRegion"><region-attributes refid=“REPLICATE“ />
</region>
<region name=“partitionRegion"><region-attributes refid=“PARTITION“ />
</region>
</cache>
ULSCopyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 24
データへの接続形態は2つ
クラスター・トポロジー
• キャッシュへの管理責任が生じる• プロセス間で必要に応じてデータをやり取りする
• クライアントAPI(Java、C++、.NET、REST)を使用して接続することが出来る
• 取得したデータは、それぞれの開発言語のオブジェクトとなる
Peer to Peer接続
Client-Server接続
ULSCopyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 25
リージョンデータへアクセスする際は、以下の何れかのAPIを使用する
データアクセスAPI
取得方法 説明追加/更新/削除
参照
MapインターフェースAPI
put,get,remove等のjava.util.Mapインターフェースを使用したデータアクセス
○ ○
OQL
(Object QueryLanguage)
SQLライクなクエリを使用したデータアクセス
× ○
ULSCopyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 26
MapインターフェースAPI
Java.util.Map感覚でKeyを指定してデータへアクセス
// XMLを指定してCacheを取得Cache cache = new CacheFactory()
.set("cache-xml-file", “cache.xml").create();
// CacheよりexampleRegionを取得Region<Integer, String> region = cache.getRegion(“exampleRegion");
Integer key = 1;
// データ登録region.put(key, message);
// データ取得String value = region.get(key, message);
// データ削除region.remove(key);
ULSCopyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 27
OQL(Object Query Language)
Key以外でのデータアクセスselect *
from /Employee empwhere emp.deptCode = '12B'
public class Employee {private int employeeNo;private String firstName;private String lastName;private String deptCode;・・・・・・
}
パーティションリージョンのOQL処理レプリケーションリージョンのOQL処理
ULSCopyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 28
OQLの実装
OQL専用のクラスを使用してクエリー実行
// XMLを指定してCacheを取得Cache cache = new CacheFactory().set("cache-xml-file", “cache.xml").create();
// CacheよりQueryService取得QueryService queryService = cache.getQueryService();
// Query作成Query query = queryService
.newQuery("select * from /Employee emp where emp.deptCode='12B'");
// Query実行SelectResults result = query.execute();Collection<?> collection = ((SelectResults<?>)result).asList();
for (Object e: collection) {System.out.println(e);
}
ULSCopyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 29
イベント処理
イベント通知を受けたいデータの条件を予め登録しておくことで、Push型イベント通知を受けることが出来る
A B
C D
クライアント 更新
サーバ
クライアント
クライアント
登録したクライアントのみが更新前後のデータをイベントとして取得
Create データの追加
Update データの更新
Destroy データの削除
Invalidate データ無効化
イベント種別
ULSCopyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 30
イベント通知の方法は2つ
イベント通知方法
方法 説明 特徴
Interest
Registration
イベントとして取得したいリージョンのKeyを指定
(正規表現指定可能)
• ContinuousQueryより高速
Continuous
Query
SQLライクなクエリによりイベントの条件を指定
• Key以外でイベントを取得出来る
• InterestRegistrationよりサーバへの負荷が高い
ULSCopyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 31
イベント処理の実装
XMLでイベント処理を行うクラスを設定
<cache>
<region name=“exampleRegion"><region-attributes refid=“PARTITION“ />
<cache-listener><class-name>example.MyCacheListener</class-name>
</cache-listener>
</region>
</cache>
ULSCopyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 32
イベント処理の実装
イベント処理では、イベント種別に応じたCacheListenerのコールバックメソッドが呼ばれる
public class MyCacheListenerimplements CacheListener<String, String>, Declarable {
@Overridepublic void afterCreate(EntryEvent<String, String> event) {
// KeyとValueを標準出力へ出力しますSystem.out.println(event.getKey() + "> " + event.getNewValue());
}
@Overridepublic void afterUpdate(EntryEvent<String, String> event) {・・・・
}
@Overridepublic void afterDestroy(EntryEvent<String, String> event) {・・・・
}}
ULSCopyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 33
今後のテーマ
ユースケース/事例GEODEハンズオン
GEODEその他機能
正式リリースに向けた追加機能
他の分散処理製品との違い
GEODEのインテグレーション
Recommended