---
title: Apache Igniteインメモリーデータ処理プラットフォーム：特徴＆利活用
tags: 
author: [Yahoo!デベロッパーネットワーク](https://www.docswell.com/user/ydnjp)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/63JKVDRM7D.jpg?width=480
description: 本セッションでは、Apache Igniteインメモリーデータ処理プラットフォームをご紹介し、そのインメモリ技術を採用した活用シナリオをいくつか取り上げます。
published: April 09, 19
canonical: https://www.docswell.com/s/ydnjp/ZQ4VXK-2019-04-09-124546
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/63JKVDRM7D.jpg)

Apache Igniteインメモリーデータ
処理プラットフォーム
特徴＆利活用
2019年4月8日
Roman Shtykh
ヤフー株式会社
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

# Page. 2

![Page Image](https://bcdn.docswell.com/page/4LE3MR82J5.jpg)

自己紹介
• エンジニア @ ヤフー
• PMC &amp; Committer @ Apache Ignite
• Committer @ Apache RocketMQ, MyBatis
• twitter: @rshtykh
業務経験：
• 組込ソフトウェア
• 情報検索
• ストリームデータ処理
• ビッグ・データ
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

# Page. 3

![Page Image](https://bcdn.docswell.com/page/V8ED6YM67G.jpg)

Agenda
• Apache Igniteの紹介
• 売れた商品をリアルタイムで取得するサービスの刷新
• 広告配信システムの負荷最適化
• Q&amp;A
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 3

# Page. 4

![Page Image](https://bcdn.docswell.com/page/4V7PY6QZ78.jpg)

Agenda
• Apache Igniteの紹介
• 売れた商品をリアルタイムで取得するサービスの刷新
• 広告配信システムの負荷最適化
• Q&amp;A
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 4

# Page. 5

![Page Image](https://bcdn.docswell.com/page/L2JVG35MJQ.jpg)

Apache Ignite
• メモリを中心に据えた分散
• データベース
• キャッシュ
• データ処理
プラットフォーム
• インメモリスピードでペタバイトスケールのトランザクション、
アナリティクスやストリーム処理を可能とする
Financial
Services
Telco
Travel &amp;
Logistics
E-Commerce
Pharma &amp;
Healthcare
IoT
SQL
Key/Value
Transactions
Compute
Services
Streaming
ML
Memory-Centric Storage
Ignite Native Persistence
(Flash, SSD, Intel 3D XPoint)
Third-Party Persistence
(RDBMS, HDFS, NoSQL)
https://apacheignite.readme.io
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

# Page. 6

![Page Image](https://bcdn.docswell.com/page/Z5EG836XEL.jpg)

Apache Ignite
• 2014年からASF https://github.com/apache/ignite
• GridGain社から寄贈
• 2015年からTop Level Project
• Contributor : 204人 (2018年2月上旬の時点)
• 活発なメーリングリスト
• バージョン : 2.7.0
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

# Page. 7

![Page Image](https://bcdn.docswell.com/page/V4JQ9545JP.jpg)

Apache Ignite
高性能分散インメモリープラットフォーム
• スケーラビリティ・高パフォーマンス・耐障害性
• データは複数マシーンに分散される
• 動的なノード（リソース）追加・削除
• リニアなスケーラビリティ
• 冗長化（耐障害性）
• SPOFはない
• 低レイテンシー
• 並列処理（高パフォーマンス）
• データ局所性尊重
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

# Page. 8

![Page Image](https://bcdn.docswell.com/page/DK74X9QV71.jpg)

Apache Ignite
多機能分散インメモリープラットフォーム
Data Grid
Compute Grid
Service Grid
Data
Ingestion/
Streaming
Distributed
SQL
Messaging
&amp; Events
Distributed
Data
Structures
RDBMS
Integration
Spark
Integration
In-memory
File System
In-memory
MapReduce
Java/C++/.NET
REST/Redis/
Memcached
Machine
Learning
Native
Persistence
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

# Page. 9

![Page Image](https://bcdn.docswell.com/page/PLJ1NKP47G.jpg)

Apache Ignite
• Key/value API
• JCache (JSR 107)
• SQL
• ANSI-99準拠
• ACID compliance
• メモリやディスク
• Off-heap
• Native persistence
• 迅速な再起動
• lazyワームアップ
• RDBMS/NoSQLデータストアインテグレーション
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

# Page. 10

![Page Image](https://bcdn.docswell.com/page/8GJW4D2ZE2.jpg)

クライアント&amp;サーバー
• サーバーノード
• データやコンピュート処理のコンテナ
• スタンドアローンプロセスとして起動
• クライアントノード
• クラスターへの
エントリーポイント
• アプリのなかから実行
Compute &amp;
Data Nodes
DURABLE MEMORY
DURABLE MEMORY
ON-DISC
ON-DISC
Ignite
Cluster
DURABLE MEMORY
DURABLE MEMORY
ON-DISC
ON-DISC
ON-DISC
Client
Connectors
https://ignite.apache.org
Public &amp; Private
Clouds
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 10

# Page. 11

![Page Image](https://bcdn.docswell.com/page/W4EZ2GDLJ3.jpg)

クラスター内のデータ配置
• 高スケーラビリティ
• データ更新のコストは低い
Partitioned Cache
JVM1
JVM2
Local Client
Primary
Backup
Primary
Backup
Remote
Client
Near
Cache
Client JVM
JVM3
JVM4
Primary
Backup
Primary
Backup
https://apacheignite.readme.io/docs/cache-modes
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

# Page. 12

![Page Image](https://bcdn.docswell.com/page/KY76VY1MEV.jpg)

クラスター内のデータ配置
• 可用性重視
• データ更新のコストは高い
• いつ利用する？
• READリクエストは80%以上
• 且つデータセットは大きくない
Replicated Cache
JVM1
JVM2
Local Client
Primary
Backup
Primary
Backup
Remote
Client
Near
Cache
Client JVM
JVM3
JVM4
Primary
Backup
Primary
Backup
https://apacheignite.readme.io/docs/cache-modes
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

# Page. 13

![Page Image](https://bcdn.docswell.com/page/5G75DG4Q74.jpg)

Durable Memory
ストレージ層の選択
• Off-heap
• デフォルト
• 各ノードでメモリを大きくとりたい
• Java full GCを避ける
• On-heap
• Swap
• HDD, SSD等を永続化レイヤに
• DBへのwrite-through/write-backも可能
ヒープ
オフヒープ
デフォルトメモリ
選択メモリ
durable memory
ディスク
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

# Page. 14

![Page Image](https://bcdn.docswell.com/page/V9J28YVWJR.jpg)

Apache Ignite
Durable Memory
• RAMはキャッシュレイヤーではなく、ストレージである
• 永続化(ディスク)OFF:
• 分散インメモリーデータベース・データグリッド
• 永続化(ディスク)ON:
• 分散データベース
Predictable Memory
Consumption
Fully Transactional WAL
(write Ahead Log)
Instantaneous Restarts
Memory-Centric Storage
DURABLE MEMORY
DURABLE MEMORY
DURABLE MEMORY
ON-DISK
ON-DISK
ON-DISK
Server Node
Server Node
Server Node
Automatic
Defragmentation
Off-heap Removes
Noticeable GC Pauses
Stores Superset of
Data
https://ignite.apache.org
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

# Page. 15

![Page Image](https://bcdn.docswell.com/page/5DEY6G397M.jpg)

Apache Ignite
Durable Memory
Predictable Memory
Consumption
Fully Transactional WAL
(write Ahead Log)
Instantaneous Restarts
Memory-Centric Storage
DURABLE MEMORY
DURABLE MEMORY
DURABLE MEMORY
ON-DISK
ON-DISK
ON-DISK
Server Node
Server Node
Server Node
Automatic
Defragmentation
Off-heap Removes
Noticeable GC Pauses
Stores Superset of
Data
https://ignite.apache.org
• memory-first
• 全データはディスクに保存、そのサブセットをメモリに格納する
• RAMにあるデータは必ずディスクにも存在する
• メモリ使用量設定可能
• メモリ断片化によりパフォーマンス低下を防ぐため、自動デフラグ
• データやインデックスにオフヒープ利用
• 大量データをGC SWTなしで取り扱える
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

# Page. 16

![Page Image](https://bcdn.docswell.com/page/2VJNZGVDJ8.jpg)

Apache Ignite
Durable Memory
Predictable Memory
Consumption
Fully Transactional WAL
(write Ahead Log)
Instantaneous Restarts
Memory-Centric Storage
DURABLE MEMORY
DURABLE MEMORY
DURABLE MEMORY
ON-DISK
ON-DISK
ON-DISK
Server Node
Server Node
Server Node
Automatic
Defragmentation
Off-heap Removes
Noticeable GC Pauses
Stores Superset of
Data
https://ignite.apache.org
• ノード耐障害性
• 即効リスタート（データのプリロードは必要ない）
• SQLクエリー実行のため、全データをメモリに持ち込む必要ない
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

# Page. 17

![Page Image](https://bcdn.docswell.com/page/GYE9ZW68E3.jpg)

CassandraやRedisではどう？
Cassandra
• Diskを使う
• インメモリーオプション
• 全データセットはインメモリーであるべき...
Redis
• インメモリー
• 永続化は可能だが、スナップショット形式のため、
リクエスト毎ファイルに書き込む設定にすれば安全だが、
パフォーマンスが悪化する
256 Threads
https://dzone.com/articles/apachereg-ignite-and-apachereg-cassandra-
benchmark
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

# Page. 18

![Page Image](https://bcdn.docswell.com/page/5GE81NZZJD.jpg)

Apache Ignite
Collocated処理
従来、処理はクライアントに転送されクライアント側で
行われる
• データベース→クライアントのデータ移動の方式は
スケールしない
• 一方、Igniteではcollocated処理が可能なため、
データ移動の極小化ができる
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

# Page. 19

![Page Image](https://bcdn.docswell.com/page/MLELQPD1JR.jpg)

Apache Ignite
Collocated処理
Client-Server処理
Co-located処理
Processing Node
Data Node
Data Node
Data 1
Data 2
1. リクエスト
2. 遠隔ノードからデータ取得
3. 取得データセットの処理
Client Node
Data Node
Data Node
1. リクエスト
2. データノードにて処理
3. その結果のマージ
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

# Page. 20

![Page Image](https://bcdn.docswell.com/page/54JM14P57W.jpg)

Apache Ignite
Collocated処理
• Collocated Processing
• データとデータ
• 同じクエリー内にアクセスされる場合
• 処理とデータ
データ並列性！
同じタスクは分解されたデータ(複数のデータ)に対する処理を平行している
http://www.cs.umd.edu/class/fall2013/cmsc433/lectures/concurrency-basics.pdf
• コンピュテーションモデルはシンプル
• データ移動最低限
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

# Page. 21

![Page Image](https://bcdn.docswell.com/page/ZPJRLW1ZJ9.jpg)

Cassandraではどう？
単独でdata localityを活用できない。
Sparkと組み合わせてdata localityを利用する
• No ETL!
• Cassandra -&gt; Spark RDD movement
UDF
• 利用に制限がかかる
• 例えば、アップデートステートメントでのUDFは許されていない
update demodb.budgets set extra=concat(prov,city) where prov=&#039;ON&#039;;
• 処理はcoordinatorノードで実行されるため、(通常のRDBMSのストアドプロシージャと同じ
く)全クラスターの処理能力パワーを使えない。また、データローカル処理になるとは限らな
い。
→ Read-before-write antipattern
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

# Page. 22

![Page Image](https://bcdn.docswell.com/page/NPEXWPY1JX.jpg)

Redisではどう？
サーバーサイドでロジックを実行する概念
(Luaスクリプト)はあるが
• スクリプトはサーバープロセスをブロックするケースがありうる
(CPU-intensive処理不向き)
• 実行ノードは他のノードに処理を渡せない
• 可能な処理に制限がある
• 例えば、一つのスクリプトでデータ取得し、
そのキーを使った削除は不可 ← 要別オペレーション
• 再起動すれば消える
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

# Page. 23

![Page Image](https://bcdn.docswell.com/page/63EKVD3MJD.jpg)

非JVM言語・プロトコルサポート
• C++ &amp; C#
• Thin clients
• Node.js
• PHP
• Python
• C++
• Java
• Memcached (binary)
• REST API
• Redis (現時点STRING処理のみ)
• PDO (PHP Data Objects)
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

# Page. 24

![Page Image](https://bcdn.docswell.com/page/4L73MRG2E5.jpg)

ベンチマーク
ベンチマークツール
https://github.com/apacheignite/yardstick-ignite
Yardstick
Benchmark Compound Results
https://github.com/gridgain/yardstick
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

# Page. 25

![Page Image](https://bcdn.docswell.com/page/V87D6Y16JG.jpg)

ベンチマーク
目安で、4vCPUのVM3台
• KVS APIで20~35万req/s
• SQL APIで5~10万req/s
(縦軸: スループット(operations/s) 横軸: 測定開始からの経過時間(秒))
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 25

# Page. 26

![Page Image](https://bcdn.docswell.com/page/4VJPY65ZJ8.jpg)

Why Apache Ignite?
• RDBMSにない
• 高スケーラビリティ
• 処理速度(メモリー中心アーキテクチャ)
• NoSQLストアにない
• SQL
• ACIDトランザクション
• +Co-located処理
• メモリ利用時のデータ容量のリミット
• インメモリDBにない
• ネイティブ永続化
• Apache Ignite活用の価値
• RDBMSの機能(整合性、スキーマの柔軟性など)やBASEシステムの
パフォーマンスの組み合わせ
• Co-located処理の活用 → 高パフォーマンスシステム実現
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

# Page. 27

![Page Image](https://bcdn.docswell.com/page/L2EVG3PMEQ.jpg)

Ignite利用イメージ
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 27

# Page. 28

![Page Image](https://bcdn.docswell.com/page/Z57G83PX7L.jpg)

Ignite利用イメージ
Ignite as a Cache
SQL利用の場合、データロードが必要
PUT/GET
• 負荷軽減
• READキャッシュ
キャッシュのみなら、勿体無い
+分散コンピュート
Write-behind
Read-thru
Write-thru
scaling?
RDBMS
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

# Page. 29

![Page Image](https://bcdn.docswell.com/page/V4EQ9525EP.jpg)

Ignite利用イメージ
Ignite as a DBMS
PUT/GET
SQL
• 永続化 ○
• SQL ○
• 分散join
• Transactions ○
• 分散コンピュート ○
LFS
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

# Page. 30

![Page Image](https://bcdn.docswell.com/page/DKJ4X9LVJ1.jpg)

Agenda
• Apache Igniteの紹介
• 売れた商品をリアルタイムで取得するサービスの刷新
• 広告配信システムの負荷最適化
• Q&amp;A
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 30

# Page. 31

![Page Image](https://bcdn.docswell.com/page/PLE1NKL4JG.jpg)

売れた商品をリアルタイムで取得
• レガシーシステム構成
MySQL + memcached
API
memcached
RDBMS
Data pipeline
Purchase events
• 課題
• 長期間キャッシュ =&gt; データの陳腐化
• データやクエリーの増加によるデータベースの性能向上が必要
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 31

# Page. 32

![Page Image](https://bcdn.docswell.com/page/8GEW4DVZ72.jpg)

なぜIgnite候補にあがる？
• スケールアウトできるクラスター構成
• 容易なノード追加・削除が可能
• インメモリー
• 性能向上が期待できる
• SQL機能を持つ
• 既存のクエリーには大きな変更なし
• 多言語サポート
• Node.js, Python, PHP, C#, Java thinクライアント
https://ignite.apache.org/features/streaming.html
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 32

# Page. 33

![Page Image](https://bcdn.docswell.com/page/W47Z2G4LE3.jpg)

Apache Ignite SQL
• DDL &amp; DML
• 分散JOIN
collocation
• トランザクション
MVCC (snapshot isolation)
• index in RAM/disk
CREATE TABLE City (
id LONG PRIMARY KEY, name VARCHAR)
WITH &quot;template=replicated&quot;
https://ignite.apache.org/features/sql.html
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 33

# Page. 34

![Page Image](https://bcdn.docswell.com/page/KYJ6VY3M7V.jpg)

Apache Ignite SQL
分散 (co-located) JOIN
1. リクエスト
2. ローカルデータに対する処理
3. その結果のマージ
https://ignite.apache.org
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

# Page. 35

![Page Image](https://bcdn.docswell.com/page/5GJ5DGLQJ4.jpg)

売れた商品をリアルタイムで取得
• システム構成
Ignite利用
• 5億レコード以上
• 20ノード
• x000req/sec
• インメモリーモード
+バックアップの設定
API
thin client
SQL
Ignite
Data pipeline
Purchase events
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 35

# Page. 36

![Page Image](https://bcdn.docswell.com/page/4LE3MRLZJ5.jpg)

• チューニング・注意のポイント
• インデックスを利用し、なるべくヒープにデータを持たずに
処理を行う
• (デ)シリアライズのコストを避ける
• Index hint活用
• ノードの追加でパフォーマンス向上を得られない場合もある
• ネットワークオーバヘッド
• 主キーは、hash index.
セカンダリーインデックスは、B+ツリー
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 36

# Page. 37

![Page Image](https://bcdn.docswell.com/page/V8ED6YN47G.jpg)

売れた商品をリアルタイムで取得
• 「いい買物の日」トラフィックの半分
• ピーク時にx000rps捌けて
CPU、ネットワークなどのリソース消費は数
パーセントしかない
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

# Page. 38

![Page Image](https://bcdn.docswell.com/page/4V7PY65V78.jpg)

売れた商品をリアルタイムで取得
• パフォーマンス面の改善
• 前段にmemcachedによる長期間のキャッシュを
取り除けた
• 性能的な余裕ができ、キャパシティの問題でAPI利用
を断ってたサービスも提供できるようになった
• 検索条件の追加など、性能面から機能制限を掛けて
いたものを開放できる目処が立った
• Node.jsクライアント早期導入
• コミュニティ貢献
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 38

# Page. 39

![Page Image](https://bcdn.docswell.com/page/L2JVG3PRJQ.jpg)

Agenda
• Apache Igniteの紹介
• 売れた商品をリアルタイムで取得するサービスの刷新
• 広告配信システムの負荷最適化
• Q&amp;A
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 39

# Page. 40

![Page Image](https://bcdn.docswell.com/page/Z5EG83P6EL.jpg)

広告配信システムの負荷最適化
• 広告配信システムの負荷に応じて、システムパラメーターを自動的に
調節する。
• Ignite活用
• リアルタイム処理
• グローバルデータビュー
• ストリーム処理PF + KVSとして用いる
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 40

# Page. 41

![Page Image](https://bcdn.docswell.com/page/V4JQ9522JP.jpg)

広告配信システムの負荷最適化
• 投入されるデータによって、Igniteに格納されているデータ
に対するリアルタイム処理
Kafka
01101010
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 41

# Page. 42

![Page Image](https://bcdn.docswell.com/page/DK74X9LP71.jpg)

広告配信システムの負荷最適化
• 投入されるデータによって、Igniteに格納されているデータ
に対するリアルタイム処理
Kafka
01101010
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 42

# Page. 43

![Page Image](https://bcdn.docswell.com/page/PLJ1NKLX7G.jpg)

広告配信システムの負荷最適化
• 投入されるデータによって、Igniteに格納されているデータ
に対するリアルタイム処理
Kafka
01101010
http
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 43

# Page. 44

![Page Image](https://bcdn.docswell.com/page/8GJW4DVKE2.jpg)

Q&amp;A
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 44

