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