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

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