まず測る(当て推量で直さない)
遅いと感じたら、直す前に測ります。平均だけを見ると、一部の人がとても待っていることに気づけません。下の目印を押して、見え方の違いを比べてください。
どこで時間を使っているか
見る道具
キャッシュ(覚えておいて、すぐ返す)
同じ答えを何度も作らずに、覚えておいて返す仕組みです。いちばん効く手ですが、古い答えを返す・ほかの人に見える、という事故の元にもなります。利用者に近い所から順に並べました。
体験: キャッシュの効き目
ランキングのページに、10 秒ごとに頼みが来ます(2 分で 12 回)。外れると、データベースで集計し直して 800ms。当たると、覚えていた答えを返して 15ms。65 秒のところで、ランキングの元のデータが変わります。数字は作り物
新しくする 3 つのやり方
キャッシュの事故
重い処理は裏に回す(キュー)
CSV の取り込みやメールの送信のように時間のかかる仕事は、頼みの中でやらずに、キューに入れて裏で動かします。画面には、すぐ返事を返せます。
Laravel のジョブ
台数を増やす(スケール)
1 台で足りなくなったら、大きくするか(縦)、台数を増やすか(横)です。横に増やすには、アプリを「どのサーバーで動いても同じ」に作っておく必要があります。
アプリのサーバーには何も残さない。残すものは、全部の台から見える外の置き場へ。
待ち行列の直感(忙しさと待ち時間)
サーバーが忙しくなるほど、待ち時間は「少しずつ」ではなく「急に」増えます。来る数を動かして、グラフの点がどこで跳ね上がるかを見てください。
縦: ひまなときの何倍待つか 横: 使用率
データベースのスケール
アプリの台数は増やしやすいのに、データベースはそうはいきません。まず SQL とインデックスを見直し(データベースのタブ)、それでも足りないときに、次の手を考えます。
負荷試験(わざと負荷をかけて、限界を知る)
本番で困る前に、わざと負荷をかけて、どこまで耐えられるかを確かめます。小さい負荷から始めて、だんだん量と時間を増やします。
k6 の台本の例
回数制限で守る
1 人(1 つの IP)からの頼みすぎを止めて、ほかの利用者を守ります。攻撃や、こわれたプログラムの連打への備えにもなります。
決めた回数を超えると、Laravel が自動で 429(Too Many Requests)を返します。呼ぶ側は、少し待ってから送り直します。
AI 時代AI の API の、速さと費用
AI の API は、返事に数秒かかることがあり、使った量(トークン)で料金がかかります。速さと費用を、最初から設計に入れておきます。
性能のチェックリスト
「遅い」「落ちる」に手を打つ前と、出す前に、確かめたものに印を付けてください(この端末にだけ保存されます)。