Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Apache Ignite
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
S Kasai
February 22, 2017
Technology
1
110
Apache Ignite
S Kasai
February 22, 2017
Tweet
Share
Other Decks in Technology
See All in Technology
制約が導く迷わない設計 〜 信頼性と運用性を両立するマイナンバー管理システムの実践 〜
bwkw
3
880
FinTech SREのAWSサービス活用/Leveraging AWS Services in FinTech SRE
maaaato
0
120
月間数億レコードのアクセスログ基盤を無停止・低コストでAWS移行せよ!アプリケーションエンジニアのSREチャレンジ💪
miyamu
0
820
IaaS/SaaS管理における SREの実践 - SRE Kaigi 2026
bbqallstars
4
1.7k
GitHub Issue Templates + Coding Agentで簡単みんなでIaC/Easy IaC for Everyone with GitHub Issue Templates + Coding Agent
aeonpeople
1
190
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
1k
Claude_CodeでSEOを最適化する_AI_Ops_Community_Vol.2__マーケティングx_AIはここまで進化した.pdf
riku_423
2
490
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
3.8k
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
42k
20260204_Midosuji_Tech
takuyay0ne
1
130
配列に見る bash と zsh の違い
kazzpapa3
1
110
Webhook best practices for rock solid and resilient deployments
glaforge
1
270
Featured
See All Featured
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
1
1.4k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.1k
Fireside Chat
paigeccino
41
3.8k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
196
71k
Color Theory Basics | Prateek | Gurzu
gurzu
0
190
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
34k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
9.8k
Six Lessons from altMBA
skipperchong
29
4.1k
A designer walks into a library…
pauljervisheath
210
24k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
290
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
130
Everyday Curiosity
cassininazir
0
130
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発見
ありがとうございました!