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
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
usermode linux without MMU - fosdem2026 kernel devroom
thehajime
0
230
Embedded SREの終わりを設計する 「なんとなく」から計画的な自立支援へ
sansantech
PRO
3
2.3k
Greatest Disaster Hits in Web Performance
guaca
0
190
StrandsとNeptuneを使ってナレッジグラフを構築する
yakumo
1
100
コスト削減から「セキュリティと利便性」を担うプラットフォームへ
sansantech
PRO
3
1.4k
Azure Durable Functions で作った NL2SQL Agent の精度向上に取り組んだ話/jat08
thara0402
0
160
データの整合性を保ちたいだけなんだ
shoheimitani
8
3.1k
プロポーザルに込める段取り八分
shoheimitani
1
190
レガシー共有バッチ基盤への挑戦 - SREドリブンなリアーキテクチャリングの取り組み
tatsukoni
0
210
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
5
1.6k
クレジットカード決済基盤を支えるSRE - 厳格な監査とSRE運用の両立 (SRE Kaigi 2026)
capytan
6
2.7k
SREが向き合う大規模リアーキテクチャ 〜信頼性とアジリティの両立〜
zepprix
0
430
Featured
See All Featured
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
Color Theory Basics | Prateek | Gurzu
gurzu
0
200
Side Projects
sachag
455
43k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
64
Docker and Python
trallard
47
3.7k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
117
110k
Navigating Weather and Climate Data
rabernat
0
100
The Cost Of JavaScript in 2023
addyosmani
55
9.5k
The Cult of Friendly URLs
andyhume
79
6.8k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.4k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
180
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発見
ありがとうございました!