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
82
Apache Ignite
S Kasai
February 22, 2017
Tweet
Share
Other Decks in Technology
See All in Technology
DMM.com アルファ室採用案内資料
hsugita
1
160
チームでロジカルシンキングに改めて向き合っている話 〜学習環境と実践⽅法〜
sansantech
PRO
3
2.7k
AWSに詳しくない人でも始められるコスト最適化ガイド
yuhta28
1
250
プロトタイピングによる不確実性の低減 / Reducing Uncertainty through Prototyping
ohbarye
5
390
Grafana x PagerDuty Better Together
jacopen
0
100
自己改善からチームを動かす! 「セルフエンジニアリングマネージャー」のすゝめ
shoota
6
800
開発生産性大幅アップ!Postman VS Code拡張機能
nagix
2
390
JSON攻略法.pdf
miyakemito
8
5.1k
GrafanaMeetup_AmazonManagedGrafanaのアクセス制御機能とマルチテナント環境下でのアクセス制御について
daitak
0
250
require(ESM)とECMAScript仕様
uhyo
3
780
Google Cloud Next '24でブログを10本書いた方法と勉強会を沸かせた方法
yasumuusan
0
310
Databricks における 『MLOps』
databricksjapan
2
170
Featured
See All Featured
Ruby is Unlike a Banana
tanoku
96
10k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
241
1.2M
Writing Fast Ruby
sferik
621
60k
Bootstrapping a Software Product
garrettdimon
PRO
302
110k
Six Lessons from altMBA
skipperchong
21
3k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
121
39k
Design by the Numbers
sachag
274
18k
Embracing the Ebb and Flow
colly
80
4.1k
Designing for Performance
lara
601
67k
Building a Modern Day E-commerce SEO Strategy
aleyda
17
6.4k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
322
20k
Into the Great Unknown - MozCon
thekraken
10
1k
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発見
ありがとうございました!