Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Apache Ignite
Search
S Kasai
February 22, 2017
Technology
120
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Apache Ignite
S Kasai
February 22, 2017
Other Decks in Technology
See All in Technology
Railsで挑む大量データ永続化 〜600億件を永続化するための設計とボトルネックとの戦い〜
occhi
1
580
スキマバイトという雇用形態は存在しないので、雇用期間1日のアルバイト契約を事業者とワーカーが結ぶ手続きを支えるのがタイミーなんです
akitoshiga
0
200
QA4AI 2026-Oct 生成AI時代の品質保証
tokuty
1
860
Optunaの最新リリースv5.0について
pfn
PRO
0
120
Tofu-Controller lightning talk @ Containerday 2026
gionn
0
100
JAWSUG TOHOKU 青森支部 「LoGoチャット」のAWS移行で 乗り越えたこと
taketakekaho
0
330
遠藤な_めぐろLT #38 「社内のAI活用推進」@麻布台_20261009
endonanana
0
130
Conditional PED-ANOVA: Hyperparameter Importance in Hierarchical & Dynamic Search Spaces
pfn
PRO
0
130
ストレスなくAIと付き合いたい!こんなときどうしてる?
namiki64
3
490
アウトプット初心者、半年間のふりかえり
4o1sobblue
0
430
大型犬好きによるPugの紹介
yamanoku
1
160
今さら理解するウェブフォントver.2026
takanorip
3
770
Featured
See All Featured
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
20k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
480
Tell your own story through comics
letsgokoyo
1
1.1k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.7k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
540
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.7k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
1k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8.1k
We Have a Design System, Now What?
morganepeng
55
8.4k
Test your architecture with Archunit
thirion
2
2.4k
Transcript
Apache Igniteを 半年使ってみえてきたもの CyberAgent, Inc. All Rights Reserved 葛⻄ 聖
ࣗݾհ 葛西 聖 MDH エンジニア 主なお仕事 DMPとか担当 ScalaでSparkとかFinchとか使うお仕事 モットー イメージできたらだいたいできる
ུ֓ • Apache Igniteとは • IDマッピングを載せてみた • IgniteでFull GCを解消 •
まとめ
Apache Igniteとは CHAPTER : 01
"QBDIF*HOJUFͱ キャッシュ以外にもMapReduce、SQL、Hadoopのアクセラレータ等、機能盛りだくさん。 OffHeap(Javaの管理外メモリ領域)を使うことでGCを発生させずに大量のデータを 扱うことが可能。 今回はキャッシュとして使ってます。 Apache Ignite In-Memory Data Fabric
hHps://ignite.apache.org/
"QBDIF*HOJUFͱ&$্ͰͷΫϥελ࡞ྫ
IDマッピングをのせてみた CHAPTER : 02
*%ϚοϐϯάΛͷͤͯΈͨ 要望 • DMPバッチで作成しているIDマッピングのデータをad Request時に使いたい
*%ϚοϐϯάΛͷͤͯΈͨ*%Ϛοϐϯάͱʁ
*%ϚοϐϯάΛͷͤͯΈͨ 要望 • DMPバッチで作成しているIDマッピングのデータをad Request時に使いたい 対応案 • IDマッピングはHBaseに置いてあるので都度アクセスすれば一応使える →HBaseの負荷が高騰するので現実的ではない
*%ϚοϐϯάΛͷͤͯΈͨ 要望 • DMPバッチで作成しているIDマッピングのデータをad Request時に使いたい 対応案 • IDマッピングはHBaseに置いてあるので都度アクセスすれば一応使える →HBaseの負荷が高騰するので現実的ではない •
ElasPCacheにのせる →障害発生時マスタの昇格に時間がかかりすぎる
*%ϚοϐϯάΛͷͤͯΈͨ 要望 • DMPバッチで作成しているIDマッピングのデータをad Request時に使いたい 対応案 • IDマッピングはHBaseに置いてあるので都度アクセスすれば一応使える →HBaseの負荷が高騰するので現実的ではない •
ElasPCacheにのせる →障害発生時マスタの昇格に時間がかかりすぎる • Igniteをキャッシュとして使う →OffHeapを使えば大量のデータをのせられる!HBase不要? (DMPバッチもSparkなので)データの投入はIgnite-sparkを使う
*%ϚοϐϯάΛͷͤͯΈͨɹॳظߏ
*%ϚοϐϯάΛͷͤͯΈͨ 運用開始一週間後・・・・ • sparkでデータ投入中にArrayIndexOutOfBoundsExcepPonが発生、 ノードが落ちる
*%ϚοϐϯάΛͷͤͯΈͨ 運用開始一週間後・・・・ • sparkでデータ投入中にArrayIndexOutOfBoundsExcepPonが発生、 ノードが落ちる • プロセスの再起動で一応動くが時間経過で落ちる
*%ϚοϐϯάΛͷͤͯΈͨ 運用開始一週間後・・・・ • sparkでデータ投入中にArrayIndexOutOfBoundsExcepPonが発生、 ノードが落ちる • プロセスの再起動で一応動くが時間経過で落ちる →IgnieのLRU制御がInteger.MAXまでだった為、 Integer.MAXを超えるデータの入れ替え時にNodeが落ちてしまう
*%ϚοϐϯάΛͷͤͯΈͨ 運用開始一週間後・・・・ • sparkでデータ投入中にArrayIndexOutOfBoundsExcepPonが発生、 ノードが落ちる • プロセスの再起動で一応動くが時間経過で落ちる →IgnieのLRU制御がInteger.MAXまでだった為、 Integer.MAXを超えるデータの入れ替え時にNodeが落ちてしまう →1台落ちると生き残ったNodeでカバーしようとしてNode間でデータをコピー
LRU制御でひっかかり例外発生、落ちるというダメぽループ →最悪データがロスト
*%ϚοϐϯάΛͷͤͯΈͨ 運用開始一週間後・・・・ • sparkでデータ投入中にArrayIndexOutOfBoundsExcepPonが発生、 ノードが落ちる • プロセスの再起動で一応動くが時間経過で落ちる →IgnieのLRU制御がInteger.MAXまでだった為、 Integer.MAXを超えるデータの入れ替え時にNodeが落ちてしまう →1台落ちると生き残ったNodeでカバーしようとしてNode間でデータをコピー
LRU制御でひっかかり例外発生、落ちるというダメぽループ →最悪データがロスト ※Ver1.8で解決してる模様
*%ϚοϐϯάΛͷͤͯΈͨ 対応 • 本来のデータはあくまでHBaseに置いておく • Igniteはあくまでキャッシュとして使う
*%ϚοϐϯάΛͷͤͯΈͨɹ࠷ऴߏ
*%ϚοϐϯάΛͷͤͯΈͨ 対応 • 本来のデータはあくまでHBaseに置いておく • Igniteはあくまでキャッシュとして使う
*%ϚοϐϯάΛͷͤͯΈͨ 対応 • 本来のデータはあくまでHBaseに置いておく • Igniteはあくまでキャッシュとして使う →現在まで安定稼動中
*%ϚοϐϯάΛͷͤͯΈͨ 教訓 • データの見積もりは余裕をもってしたつもりだが、 地雷(bug)を踏んでしまった • issueはマメにチェックしましょう • Cluster毎落ちるとかリスク高すぎ •
そういう意味ではHBaseすごい • キャッシュとして使う分にはIgnite優秀
IgniteでFull GCを解消 CHAPTER : 03
*HOJUFͰ'VMM($Λղফ とあるAPIサーバのログをみたら24分毎にFull GCが発生していた
*HOJUFͰ'VMM($Λղফ とあるAPIサーバのログをみたら24分毎にFull GCが発生していた
*HOJUFͰ'VMM($Λղফ とあるAPIサーバのログをみたら24分毎にFull GCが発生していた 原因 マスタをAPIサーバのメモリ上に保持していた為、リフレッシュ時にFull GC発生
*HOJUFͰ'VMM($Λղফ とあるAPIサーバのログをみたら24分毎にFull GCが発生していた 原因 マスタをAPIサーバのメモリ上に保持していた為、リフレッシュ時にFull GC発生 マスタをIgniteにのせかれば良いんじゃね?
*HOJUFͰ'VMM($Λղফ とあるAPIサーバのログをみたら24分毎にFull GCが発生していた 原因 マスタをAPIサーバのメモリ上に保持していた為、リフレッシュ時にFull GC発生 マスタをIgniteにのせかれば良いんじゃね? →Full GCはなくなったがレイテンシーは悪化
*HOJUFͰ'VMM($Λղফ とあるAPIサーバのログをみたら24分毎にFull GCが発生していた 原因 マスタをAPIサーバのメモリ上に保持していた為、リフレッシュ時にFull GC発生 マスタをIgniteにのせかれば良いんじゃね? →Full GCはなくなったがレイテンシーは悪化 →単純にマスタをIgniteに乗せかえるとRCPが増える
最低1msだとしてもループ内で参照していたりするとアウト!
*HOJUFͰ'VMM($Λղফ とあるAPIサーバのログをみたら24分毎にFull GCが発生していた 原因 マスタをAPIサーバのメモリ上に保持していた為、リフレッシュ時にFull GC発生 マスタをIgniteにのせかれば良いんじゃね? →Full GCはなくなったがレイテンシーは悪化 →単純にマスタをIgniteに乗せかえるとRCPが増える
最低1msだとしてもループ内で参照していたりするとアウト! →すぐに使える状態でIgniteにのせておく
*HOJUFͰ'VMM($Λղফɹߏ
*HOJUFͰ'VMM($Λղফ とあるAPIサーバのログをみたら24分毎にFull GCが発生していた 原因 マスタをAPIサーバのメモリ上に保持していた為、リフレッシュ時にFull GC発生 マスタをIgniteにのせかれば良いんじゃね? →Full GCはなくなったがレイテンシーは悪化 →単純にマスタをIgniteに乗せかえるとRCPが増える
最低1msだとしてもループ内で参照していたりするとアウト! →すぐに使える状態でIgniteにのせておく
*HOJUFͰ'VMM($Λղফ とあるAPIサーバのログをみたら24分毎にFull GCが発生していた 原因 マスタをAPIサーバのメモリ上に保持していた為、リフレッシュ時にFull GC発生 マスタをIgniteにのせかれば良いんじゃね? →Full GCはなくなったがレイテンシーは悪化 →単純にマスタをIgniteに乗せかえるとRCPが増える
最低1msだとしてもループ内で参照していたりするとアウト! →すぐに使える状態でIgniteにのせておく →cacheMode=REPLICATEDだとIgniteのNode間通信で帯域を食いつぶす
*HOJUFͰ'VMM($Λղফ3&1-*$"5&%ͷ߹
*HOJUFͰ'VMM($Λղফ とあるAPIサーバのログをみたら24分毎にFull GCが発生していた 原因 マスタをAPIサーバのメモリ上に保持していた為、リフレッシュ時にFull GC発生 マスタをIgniteにのせかれば良いんじゃね? →Full GCはなくなったがレイテンシーは悪化 →単純にマスタをIgniteに乗せかえるとRCPが増える
最低1msだとしてもループ内で参照していたりするとアウト! →すぐに使える状態でIgniteにのせておく →cacheMode=REPLICATEDだとIgniteのNode間通信で帯域を食いつぶす
*HOJUFͰ'VMM($Λղফ とあるAPIサーバのログをみたら24分毎にFull GCが発生していた 原因 マスタをAPIサーバのメモリ上に保持していた為、リフレッシュ時にFull GC発生 マスタをIgniteにのせかれば良いんじゃね? →Full GCはなくなったがレイテンシーは悪化 →単純にマスタをIgniteに乗せかえるとRCPが増える
最低1msだとしてもループ内で参照していたりするとアウト! →すぐに使える状態でIgniteにのせておく →cacheMode=REPLICATEDだとIgniteのNode間通信で帯域を食いつぶす →cacheMode=PARTITIONED、データをlz4で圧縮しておく
*HOJUFͰ'VMM($Λղফ1"35*5*0/&%ͷ߹
*HOJUFͰ'VMM($Λղফ とあるAPIサーバのログをみたら24分毎にFull GCが発生していた 原因 マスタをAPIサーバのメモリ上に保持していた為、リフレッシュ時にFull GC発生 マスタをIgniteにのせかれば良いんじゃね? →Full GCはなくなったがレイテンシーは悪化 →単純にマスタをIgniteに乗せかえるとRCPが増える
最低1msだとしてもループ内で参照していたりするとアウト! →すぐに使える状態でIgniteにのせておく →cacheMode=REPLICATEDだとIgniteのNode間通信で帯域を食いつぶす →cacheMode=PARTITIONED、データをlz4で圧縮しておく
*HOJUFͰ'VMM($Λղফ リリース後レイテンシーが大幅に改善 →無事年を越せました
まとめ CHAPTER : 04
·ͱΊ • 事前にユースケースを洗い出しましょう • Cache Modeは用途に合わせて適切に • Valueが大きくなる場合は帯域を圧迫しないか確認しておく • 使いたい機能のissueがないか確認
• メトリクスとろうと思ったらtypo発見
ありがとうございました!