予期せぬアクセス急増、その謎に迫る :私たちの対応と解決策
by
LINE Developers
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
༧ظͤ͵ΞΫηεٸ૿ɺͦͷಾʹഭΔ ɿࢲͨͪͷରԠͱղܾࡦ Ճ౻ढ़ !NBSVMPPQ -*/&גࣜձࣾ$PNNVOJDBUJPO4FSWJDFJOUFHSBUJPOࣨ43& 5FDI-FBET -*/&ελϯϓண͔ͤ͑ֆจࣈΥϨοτλϒϗʔϜλϒ
Slide 2
Slide 2 text
「なにもしてないのにアクセスが急に増えた」経験、 ありますか?
Slide 3
Slide 3 text
LINEアプリの着せかえでの事例
Slide 4
Slide 4 text
着せかえ機能とは? LINEアプリには、テーマを設定できる「着せかえ」機能があります。 様々なキャラクターなどをモチーフにしたテーマが販売されているため、 LINEアプリを自分好みのデザインにして使えます。
Slide 5
Slide 5 text
「着せかえ」のテーマ切り替え ある日の夜8時、 突然のDB Connection Errorのアラートが発生。 原因は、どうやら「着せかえ」のテーマ切り替えAPIの一時的なアクセス急増。
Slide 6
Slide 6 text
原因調査を開始するが・・・ 「ブラック」 x 「ANDROID」 x 「アプリバージョンに依らない」 = ??? 調査項目 結果 ユーザーIDの偏り 偏っていない クライアントOSの偏り アクセスのほぼすべてがAndroid アプリバージョンの偏り 偏ってない(古いアプリからもアクセスがある) 着せかえ先の偏り ほぼすべて「ブラック」
Slide 7
Slide 7 text
Android11, Darkテーマのスケジュール機能 • LINE(Android版)では、ダークモードは着せかえ機能によって実現されている • Android11から、ダークモードに時刻で切り替えられるようになった
Slide 8
Slide 8 text
Android11, Darkテーマのスケジュール機能 • LINE(Android版)では、ダークモードは着せかえ機能によって実現されている • Android11から、ダークモードに時刻で切り替えられるようになった 日本中のダークモード利用ユーザーが 同時にテーマ切り替えAPIにアクセスするようになった
Slide 9
Slide 9 text
対処の方針検討 着せかえをダークモードに使わない • サーバーアクセス自体が不要になる • クライアントチームだけで対応可能 • アプリの影響範囲が大きい • 古いアプリからのアクセスは続く DBインスタンスを増やし、処理性能をあげる • お金で解決する • 一時的なアクセス急増のためには効率が悪い Redisキャッシュを利用し、DBアクセスを減らす • サーバーチームだけで対応可能 • 古いアプリにも効く
Slide 10
Slide 10 text
Redisキャッシュを利用し、DBアクセスを減らす 一見、完璧な対応に見えるが、そもそもなぜ、キャッシュしてなかったのか?
Slide 11
Slide 11 text
Redisキャッシュを利用し、DBアクセスを減らす 一見、完璧な対応に見えるが、そもそもなぜ、キャッシュしてなかったのか? 1. 着せかえテーマ切り替え時に、ユーザーの所有権を確認したい
Slide 12
Slide 12 text
Redisキャッシュを利用し、DBアクセスを減らす 一見、完璧な対応に見えるが、そもそもなぜ、キャッシュしてなかったのか? 1. 着せかえテーマ切り替え時に、ユーザーの所有権を確認したい 2. ユーザーの所有権確認は、基本的にキャッシュしたくない • 購入直後に適用できないなどのトラブル防止
Slide 13
Slide 13 text
Redisキャッシュを利用し、DBアクセスを減らす 一見、完璧な対応に見えるが、そもそもなぜ、キャッシュしてなかったのか? 1. 着せかえテーマ切り替え時に、ユーザーの所有権を確認したい 2. ユーザーの所有権確認は、基本的にキャッシュしたくない • 購入直後に適用できないなどのトラブル防止 3. 無理にキャッシュしても、ユーザーごとのキャッシュは効率が悪い どう解決するか?
Slide 14
Slide 14 text
所有権の確認タイミング 着せかえの新規ダウンロード時 着せかえの切り替え時 バックグラウンドで実施されている日次同期
Slide 15
Slide 15 text
リスク受容:切り替え時には所有権確認しなければいいじゃない 着せかえの新規ダウンロード時 着せかえの切り替え時 バックグラウンドで実施されている日次同期
Slide 16
Slide 16 text
最終的に実施したこと 1. 原因の調査と対応方針の検討 2. 企画担当者に、着せかえ切り替え時の所有権確認の削除を提案 3. 所有権を含まずキャッシュできる、着せかえ切り替え用のAPIを新規作る 4. クライアント側でそのAPIに呼び変え、アプリリリース すべての着せかえ切り替えリクエストが改善し、DBアクセスが1/3に。
Slide 17
Slide 17 text
まとめ • 突然のアクセス急増に、プロダクトのSREとして対応した • DBA、サーバーサイド、クライアントサイド、企画サイドを巻き込んで対応 • 最終的にリスクを受容しつつ、効率の良い解決策に落ち着いた Thank you! アクセスが減り、サーバーコストを削減できた エラーが減り、より安定した ダウンロード時・日次同期時の所有権確認があるため、悪用も増えず