Gunosy AdServerのデータ周りの話
by
Satoshi
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Gunosy 広告技術部 印南@satoshi03 GUNOSYのAD SERVERのデータ周りの話
Slide 2
Slide 2 text
自己紹介 • 印南聡志(いんなみ さとし) • Gunosyのアドエンジニア • 2014年6月 入社 • Gunosyのアド配信サーバ周り全般担当 • 言語 • Go • Python • URL • Qiita : http://qiita.com/satoshi03 • Github : https://github.com/satoshi03
Slide 3
Slide 3 text
今日のお話 地雷
Slide 4
Slide 4 text
地雷1
Slide 5
Slide 5 text
Redis アクセス詰まり…
Slide 6
Slide 6 text
よくある話 「RedisはR/W速いから ガンガン読んで ガンガン書こう!」
Slide 7
Slide 7 text
結果 アクセス増で突然の死
Slide 8
Slide 8 text
配信サーバ Redis 配信サーバ READ WRITE
Slide 9
Slide 9 text
ReadはSlave増やせばOK WriteはMasterにしかNG(※1) Write多いとスケールできない ※1) Redis Clusterでない場合
Slide 10
Slide 10 text
配信サーバ Redis Master Redis Slave Redis Slave READ WRITE Sync
Slide 11
Slide 11 text
さらに… 謎の巨大データが溜まりはじめる
Slide 12
Slide 12 text
ゴミの塊 Expireなしの大量のデータ メモリ圧迫で調査不能
Slide 13
Slide 13 text
対処法1 Redisアクセス分散
Slide 14
Slide 14 text
配信サーバからRedis ReadはOK WriteはNG Slave分散がしやすい状態へ Writeはバッチ処理でバルクで
Slide 15
Slide 15 text
配信サーバ Redis Master Redis Slave Redis Slave READ WRITE バッチサーバ ログ集約サーバ Sync
Slide 16
Slide 16 text
対処法2 データにはExpireを付ける ゴミを残さない
Slide 17
Slide 17 text
対処法3 ライフサイクルや重要度が異なる データは別Redisに分割
Slide 18
Slide 18 text
対処法4 Redis Cluster…
Slide 19
Slide 19 text
対処法5 Redisをやめる
Slide 20
Slide 20 text
地雷2
Slide 21
Slide 21 text
RedisのMASTERとSLAVEのSYNC が停止し古いデータを 参照していた…
Slide 22
Slide 22 text
配信サーバ Redis Master Redis Slave Redis Slave READ Sync ❌ (古いデータ) (古いデータ)
Slide 23
Slide 23 text
原因 巨大データを一括削除したとき MASTER-SLAVE間のデータ差分が大き くなる
Slide 24
Slide 24 text
通常のコマンドの受け渡しによるものは なくBGSAVEによるSYNCが走る Redis Master Redis Slave RDBファイル
Slide 25
Slide 25 text
普段はそんなに問題ないけど… データが大量に入ってると メモリ不足でBGSAVEが失敗 SYNCが停止…
Slide 26
Slide 26 text
対処法1 巨大なデータをKeyで分割 キーを大量に削除する場合は Sleepを入れながら
Slide 27
Slide 27 text
(そもそも) SYNCができなくなるほ どデータを入れない MAXMEMORYの2倍程度のメモリ を持たせましょう
Slide 28
Slide 28 text
対処法2 Redisをやめる
Slide 29
Slide 29 text
地雷3
Slide 30
Slide 30 text
配信ログが 宇宙の彼方へ…
Slide 31
Slide 31 text
定期的にtd-agentのプロセスが刺さる Monitが中途半端にプロセス再起動か けて事態が悪化 増え続けるデータ 最大のバッファサイズを超えてしま いログが宇宙に彼方へ…
Slide 32
Slide 32 text
対処法 td-agent自動監視 再起動スクリプト 導入
Slide 33
Slide 33 text
td-agentが息してるかをチェック 2プロセス立ち上がっているか PIDファイルと実プロセスIDが一致しているか 24224ポートへ接続して応答があるか バッファパスに古いデータがないか td-agentが息してなかったら(強制)再起動 チェックログをPaperTrail → Slackへ
Slide 34
Slide 34 text
終わりに 広告配信サーバで一緒に 地雷を踏んでくれる 新しい技術を検証・導入 してくれるエンジニアを募集してお ります!!