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! アクセスが減り、サーバーコストを削減できた エラーが減り、より安定した ダウンロード時・日次同期時の所有権確認があるため、悪用も増えず