超高速処理とスケーラビリティを両立するApache GEODE

32
ULS Copyright © 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:[email protected] Tel: 03-6220-1420 Fax: 03-6220-1402

Transcript of 超高速処理とスケーラビリティを両立するApache GEODE

Page 1: 超高速処理とスケーラビリティを両立するApache GEODE

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:[email protected]

Tel: 03-6220-1420 Fax: 03-6220-1402

Page 2: 超高速処理とスケーラビリティを両立するApache GEODE

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

• アルピニスト• 目標はココ

Page 3: 超高速処理とスケーラビリティを両立するApache GEODE

ULS 2Copyright © 2011-2013 UL Systems, Inc. All rights reserved.

Proprietary & Confidential Powered by

超高速処理とスケーラビリティを両立するApache GEODE

Page 4: 超高速処理とスケーラビリティを両立するApache GEODE

ULSCopyright © 2011-2016 UL Systems, Inc. All rights reserved.

Proprietary & Confidential Powered by 3

Apache GEODEとは

ざっくりいうとインメモリーの分散KVS

–データを各マシンのメモリーに分散配置

–大量トランザクションに対する高速処理

–動的なスケーラビリティ

–ミッションクリティカルでの利用

採用実績

–欧米の金融機関

–政府、防衛

Page 5: 超高速処理とスケーラビリティを両立するApache GEODE

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

Page 6: 超高速処理とスケーラビリティを両立するApache GEODE

ULSCopyright © 2011-2016 UL Systems, Inc. All rights reserved.

Proprietary & Confidential Powered by 5

日本はRDB命

Page 7: 超高速処理とスケーラビリティを両立するApache GEODE

ULSCopyright © 2011-2016 UL Systems, Inc. All rights reserved.

Proprietary & Confidential Powered by 6

サーバ

サーバ

サーバ

アプリケーションのスケールアウトは容易だが、RDBがボトルネックに

良くあるシステムの課題

JVM

JVM

JVM

アプリケーション

アプリケーション

アプリケーション

RDB

Page 8: 超高速処理とスケーラビリティを両立するApache GEODE

ULSCopyright © 2011-2016 UL Systems, Inc. All rights reserved.

Proprietary & Confidential Powered by 7

RDBボトルネック対策

スケールアップ 水平分割

NoSQL キャッシュの利用

×ネットワークを跨いでいる時点で遅い

Page 9: 超高速処理とスケーラビリティを両立するApache GEODE

ULSCopyright © 2011-2016 UL Systems, Inc. All rights reserved.

Proprietary & Confidential Powered by 8

アプリケーションと同じメモリー上にデータを保持することで超高速化

Apache GEODEを使用した超高速処理システム

サーバ

サーバ

サーバ

JVM

JVM

JVM

アプリケーション

アプリケーション

アプリケーション

・・・ 無限

のス

ケー

ラビ

リテ

Page 10: 超高速処理とスケーラビリティを両立するApache GEODE

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

Page 11: 超高速処理とスケーラビリティを両立するApache GEODE

ULSCopyright © 2011-2016 UL Systems, Inc. All rights reserved.

Proprietary & Confidential Powered by 10

メモリー内のデータをどのように分散するか?

アプリケーションが扱うデータは大きく分けて「マスターデータ」と「トランザクションデータ」に分類できる

マスターデータ

トランザクションデータ

• 割と固定的• データ数が急激に増えないもの• 更新が少なく参照が多い

• データの一部が変動する

• 更新処理が多い

• 日毎にデータが増加するもの

特性

顧客情報、商品情報等

取引情報、予約情報等

レプリケーション

パーティション

Page 12: 超高速処理とスケーラビリティを両立するApache GEODE

ULSCopyright © 2011-2016 UL Systems, Inc. All rights reserved.

Proprietary & Confidential Powered by 11

レプリケーションとパーティション

データの特性によってレプリケーションとパーティションを使い分ける

パーティションレプリケーション

すべてのマシンで同一のデータを保持する

何れかのマシンにデータが存在する

Page 13: 超高速処理とスケーラビリティを両立するApache GEODE

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 データ

メモリ空間

Page 14: 超高速処理とスケーラビリティを両立するApache GEODE

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 データ

メモリ空間

Page 15: 超高速処理とスケーラビリティを両立するApache GEODE

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 データ

メモリ空間

Page 16: 超高速処理とスケーラビリティを両立するApache GEODE

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 データ

メモリ空間

Page 17: 超高速処理とスケーラビリティを両立するApache GEODE

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

問い合わせ

問い合わせ

Page 18: 超高速処理とスケーラビリティを両立するApache GEODE

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

データ

データのバックアップ

メモリ空間

Page 19: 超高速処理とスケーラビリティを両立するApache GEODE

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

データ

データのバックアップ

メモリ空間

Page 20: 超高速処理とスケーラビリティを両立するApache GEODE

ULSCopyright © 2011-2016 UL Systems, Inc. All rights reserved.

Proprietary & Confidential Powered by 21

レプリケーション/パーティション サマリー

マスターデータ

トランザクションデータ

レプリケーション

パーティション

顧客情報商品情報等

取引情報予約情報等

→データ参照時の性能を最速に

→データ更新、データ参照時の性能を安定させる

→データを分散配置することでメモリ使用量を抑える

Read ○ データ量 ◎

Write ◎同時

接続数◎

Read ◎ データ量 △

Write △同時

接続数◎

性能 拡張性

Page 21: 超高速処理とスケーラビリティを両立するApache GEODE

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;・・・・・・

}

Page 22: 超高速処理とスケーラビリティを両立するApache GEODE

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>

Page 23: 超高速処理とスケーラビリティを両立するApache GEODE

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接続

Page 24: 超高速処理とスケーラビリティを両立するApache GEODE

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ライクなクエリを使用したデータアクセス

× ○

Page 25: 超高速処理とスケーラビリティを両立するApache GEODE

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);

Page 26: 超高速処理とスケーラビリティを両立するApache GEODE

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処理

Page 27: 超高速処理とスケーラビリティを両立するApache GEODE

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);

}

Page 28: 超高速処理とスケーラビリティを両立するApache GEODE

ULSCopyright © 2011-2016 UL Systems, Inc. All rights reserved.

Proprietary & Confidential Powered by 29

イベント処理

イベント通知を受けたいデータの条件を予め登録しておくことで、Push型イベント通知を受けることが出来る

A B

C D

クライアント 更新

サーバ

クライアント

クライアント

登録したクライアントのみが更新前後のデータをイベントとして取得

Create データの追加

Update データの更新

Destroy データの削除

Invalidate データ無効化

イベント種別

Page 29: 超高速処理とスケーラビリティを両立するApache GEODE

ULSCopyright © 2011-2016 UL Systems, Inc. All rights reserved.

Proprietary & Confidential Powered by 30

イベント通知の方法は2つ

イベント通知方法

方法 説明 特徴

Interest

Registration

イベントとして取得したいリージョンのKeyを指定

(正規表現指定可能)

• ContinuousQueryより高速

Continuous

Query

SQLライクなクエリによりイベントの条件を指定

• Key以外でイベントを取得出来る

• InterestRegistrationよりサーバへの負荷が高い

Page 30: 超高速処理とスケーラビリティを両立するApache GEODE

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>

Page 31: 超高速処理とスケーラビリティを両立するApache GEODE

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) {・・・・

}}

Page 32: 超高速処理とスケーラビリティを両立するApache GEODE

ULSCopyright © 2011-2016 UL Systems, Inc. All rights reserved.

Proprietary & Confidential Powered by 33

今後のテーマ

ユースケース/事例GEODEハンズオン

GEODEその他機能

正式リリースに向けた追加機能

他の分散処理製品との違い

GEODEのインテグレーション