Upgrade to Pro — share decks privately, control downloads, hide ads and more …

予期せぬアクセス急増、その謎に迫る :私たちの対応と解決策

予期せぬアクセス急増、その謎に迫る :私たちの対応と解決策

加藤 俊弥(@maruloop)
LINE株式会社 Communication & Service integration室 SRE, TechLeads
LINEスタンプ / 着せかえ / 絵文字 / ウォレットタブ / ホームタブ

LINE Developers
PRO

August 29, 2023
Tweet

More Decks by LINE Developers

Other Decks in Technology

Transcript

  1. ༧ظͤ͵ΞΫηεٸ૿ɺͦͷಾʹഭΔ
    ɿࢲͨͪͷରԠͱղܾࡦ
    Ճ౻ढ़໻ !NBSVMPPQ

    -*/&גࣜձࣾ$PNNVOJDBUJPO4FSWJDFJOUFHSBUJPOࣨ43& 5FDI-FBET
    -*/&ελϯϓண͔ͤ͑ֆจࣈ΢ΥϨοτλϒϗʔϜλϒ

    View Slide

  2. 「なにもしてないのにアクセスが急に増えた」経験、
    ありますか?

    View Slide

  3. LINEアプリの着せかえでの事例

    View Slide

  4. 着せかえ機能とは?
    LINEアプリには、テーマを設定できる「着せかえ」機能があります。
    様々なキャラクターなどをモチーフにしたテーマが販売されているため、
    LINEアプリを自分好みのデザインにして使えます。

    View Slide

  5. 「着せかえ」のテーマ切り替え
    ある日の夜8時、
    突然のDB Connection Errorのアラートが発生。
    原因は、どうやら「着せかえ」のテーマ切り替えAPIの一時的なアクセス急増。

    View Slide

  6. 原因調査を開始するが・・・
    「ブラック」 x 「ANDROID」 x 「アプリバージョンに依らない」 = ???
    調査項目 結果
    ユーザーIDの偏り 偏っていない
    クライアントOSの偏り アクセスのほぼすべてがAndroid
    アプリバージョンの偏り 偏ってない(古いアプリからもアクセスがある)
    着せかえ先の偏り ほぼすべて「ブラック」

    View Slide

  7. Android11, Darkテーマのスケジュール機能
    • LINE(Android版)では、ダークモードは着せかえ機能によって実現されている
    • Android11から、ダークモードに時刻で切り替えられるようになった

    View Slide

  8. Android11, Darkテーマのスケジュール機能
    • LINE(Android版)では、ダークモードは着せかえ機能によって実現されている
    • Android11から、ダークモードに時刻で切り替えられるようになった
    日本中のダークモード利用ユーザーが
    同時にテーマ切り替えAPIにアクセスするようになった

    View Slide

  9. 対処の方針検討
    着せかえをダークモードに使わない
    • サーバーアクセス自体が不要になる
    • クライアントチームだけで対応可能
    • アプリの影響範囲が大きい
    • 古いアプリからのアクセスは続く
    DBインスタンスを増やし、処理性能をあげる
    • お金で解決する
    • 一時的なアクセス急増のためには効率が悪い
    Redisキャッシュを利用し、DBアクセスを減らす
    • サーバーチームだけで対応可能
    • 古いアプリにも効く

    View Slide

  10. Redisキャッシュを利用し、DBアクセスを減らす
    一見、完璧な対応に見えるが、そもそもなぜ、キャッシュしてなかったのか?

    View Slide

  11. Redisキャッシュを利用し、DBアクセスを減らす
    一見、完璧な対応に見えるが、そもそもなぜ、キャッシュしてなかったのか?
    1. 着せかえテーマ切り替え時に、ユーザーの所有権を確認したい

    View Slide

  12. Redisキャッシュを利用し、DBアクセスを減らす
    一見、完璧な対応に見えるが、そもそもなぜ、キャッシュしてなかったのか?
    1. 着せかえテーマ切り替え時に、ユーザーの所有権を確認したい
    2. ユーザーの所有権確認は、基本的にキャッシュしたくない
    • 購入直後に適用できないなどのトラブル防止

    View Slide

  13. Redisキャッシュを利用し、DBアクセスを減らす
    一見、完璧な対応に見えるが、そもそもなぜ、キャッシュしてなかったのか?
    1. 着せかえテーマ切り替え時に、ユーザーの所有権を確認したい
    2. ユーザーの所有権確認は、基本的にキャッシュしたくない
    • 購入直後に適用できないなどのトラブル防止
    3. 無理にキャッシュしても、ユーザーごとのキャッシュは効率が悪い
    どう解決するか?

    View Slide

  14. 所有権の確認タイミング
    着せかえの新規ダウンロード時
    着せかえの切り替え時
    バックグラウンドで実施されている日次同期

    View Slide

  15. リスク受容:切り替え時には所有権確認しなければいいじゃない
    着せかえの新規ダウンロード時
    着せかえの切り替え時
    バックグラウンドで実施されている日次同期

    View Slide

  16. 最終的に実施したこと
    1. 原因の調査と対応方針の検討
    2. 企画担当者に、着せかえ切り替え時の所有権確認の削除を提案
    3. 所有権を含まずキャッシュできる、着せかえ切り替え用のAPIを新規作る
    4. クライアント側でそのAPIに呼び変え、アプリリリース
    すべての着せかえ切り替えリクエストが改善し、DBアクセスが1/3に。

    View Slide

  17. まとめ
    • 突然のアクセス急増に、プロダクトのSREとして対応した
    • DBA、サーバーサイド、クライアントサイド、企画サイドを巻き込んで対応
    • 最終的にリスクを受容しつつ、効率の良い解決策に落ち着いた
    Thank you!
    アクセスが減り、サーバーコストを削減できた
    エラーが減り、より安定した
    ダウンロード時・日次同期時の所有権確認があるため、悪用も増えず

    View Slide