Apache Igniteインメモリーデータ処理プラットフォーム:特徴&利活用

0.9K Views

April 09, 19

スライド概要

本セッションでは、Apache Igniteインメモリーデータ処理プラットフォームをご紹介し、そのインメモリ技術を採用した活用シナリオをいくつか取り上げます。

profile-image

2023年10月からSpeaker Deckに移行しました。最新情報はこちらをご覧ください。 https://speakerdeck.com/lycorptech_jp

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

(ダウンロード不可)

関連スライド

各ページのテキスト
1.

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

2.

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

3.

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

4.

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

5.

Apache Ignite • メモリを中心に据えた分散 • データベース • キャッシュ • データ処理 プラットフォーム • インメモリスピードでペタバイトスケールのトランザクション、 アナリティクスやストリーム処理を可能とする Financial Services Telco Travel & Logistics E-Commerce Pharma & 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.

6.

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.

7.

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

8.

Apache Ignite 多機能分散インメモリープラットフォーム Data Grid Compute Grid Service Grid Data Ingestion/ Streaming Distributed SQL Messaging & 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.

9.

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.

10.

クライアント&サーバー • サーバーノード • データやコンピュート処理のコンテナ • スタンドアローンプロセスとして起動 • クライアントノード • クラスターへの エントリーポイント • アプリのなかから実行 Compute & 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 & Private Clouds Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 10

11.

クラスター内のデータ配置 • 高スケーラビリティ • データ更新のコストは低い 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.

12.

クラスター内のデータ配置 • 可用性重視 • データ更新のコストは高い • いつ利用する? • 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.

13.

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.

14.

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.

15.

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.

16.

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.

17.

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.

18.

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

19.

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.

20.

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.

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

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

23.

非JVM言語・プロトコルサポート • C++ & 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.

24.

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

25.

ベンチマーク 目安で、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

26.

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.

27.

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

28.

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.

29.

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

30.

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

31.

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

32.

なぜ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

33.

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

34.

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

35.

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

36.

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

37.

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

38.

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

39.

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

40.

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

41.

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

42.

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

43.

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

44.

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