Save 37% off PRO during our Black Friday Sale! »

Gunosy AdServerのデータ周りの話

256e06c975ca92dfd72f9cbe8b5a964c?s=47 Satoshi
December 08, 2015

Gunosy AdServerのデータ周りの話

エムスリー x Gunosy Beer bash!
http://gunosy-beer.connpass.com/event/22825/

主にデータストア(Redis)やtd-agent周りの辛い話と対処法について書いてあります。

256e06c975ca92dfd72f9cbe8b5a964c?s=128

Satoshi

December 08, 2015
Tweet

Transcript

  1. Gunosy 広告技術部 印南@satoshi03 GUNOSYのAD SERVERのデータ周りの話

  2. 自己紹介 •  印南聡志(いんなみ さとし) •  Gunosyのアドエンジニア •  2014年6月 入社 • 

    Gunosyのアド配信サーバ周り全般担当 •  言語 •  Go •  Python •  URL •  Qiita : http://qiita.com/satoshi03 •  Github : https://github.com/satoshi03
  3. 今日のお話 地雷

  4. 地雷1

  5. Redis アクセス詰まり…

  6. よくある話 「RedisはR/W速いから ガンガン読んで ガンガン書こう!」

  7. 結果 アクセス増で突然の死

  8. 配信サーバ Redis 配信サーバ READ WRITE

  9. ReadはSlave増やせばOK WriteはMasterにしかNG(※1) Write多いとスケールできない ※1) Redis Clusterでない場合

  10. 配信サーバ Redis Master Redis Slave Redis Slave READ WRITE Sync

  11. さらに… 謎の巨大データが溜まりはじめる

  12. ゴミの塊 Expireなしの大量のデータ メモリ圧迫で調査不能

  13. 対処法1 Redisアクセス分散

  14. 配信サーバからRedis ReadはOK WriteはNG Slave分散がしやすい状態へ Writeはバッチ処理でバルクで

  15. 配信サーバ Redis Master Redis Slave Redis Slave READ WRITE バッチサーバ

    ログ集約サーバ Sync
  16. 対処法2 データにはExpireを付ける ゴミを残さない

  17. 対処法3 ライフサイクルや重要度が異なる データは別Redisに分割

  18. 対処法4 Redis Cluster…

  19. 対処法5 Redisをやめる

  20. 地雷2

  21. RedisのMASTERとSLAVEのSYNC が停止し古いデータを 参照していた…

  22. 配信サーバ Redis Master Redis Slave Redis Slave READ Sync ❌

    (古いデータ) (古いデータ)
  23. 原因 巨大データを一括削除したとき MASTER-SLAVE間のデータ差分が大き くなる

  24. 通常のコマンドの受け渡しによるものは なくBGSAVEによるSYNCが走る Redis Master Redis Slave RDBファイル

  25. 普段はそんなに問題ないけど… データが大量に入ってると メモリ不足でBGSAVEが失敗 SYNCが停止…

  26. 対処法1 巨大なデータをKeyで分割 キーを大量に削除する場合は Sleepを入れながら

  27. (そもそも) SYNCができなくなるほ どデータを入れない MAXMEMORYの2倍程度のメモリ を持たせましょう

  28. 対処法2 Redisをやめる

  29. 地雷3

  30. 配信ログが 宇宙の彼方へ…

  31. 定期的にtd-agentのプロセスが刺さる Monitが中途半端にプロセス再起動か けて事態が悪化 増え続けるデータ 最大のバッファサイズを超えてしま いログが宇宙に彼方へ…

  32. 対処法 td-agent自動監視 再起動スクリプト 導入

  33. td-agentが息してるかをチェック 2プロセス立ち上がっているか PIDファイルと実プロセスIDが一致しているか 24224ポートへ接続して応答があるか バッファパスに古いデータがないか td-agentが息してなかったら(強制)再起動 チェックログをPaperTrail → Slackへ

  34. 終わりに 広告配信サーバで一緒に 地雷を踏んでくれる 新しい技術を検証・導入 してくれるエンジニアを募集してお ります!!