API検査から始まるweb改修
先週土曜日にサイトをアップデートしたのですが、
その後502エラーが頻発するとの報告を受け、いろいろ調べていました。
結果的にこれがここ1年低迷していたweb制作モチベに火をつけ、
気がつけばずーっと作業していました。
502(Bad Gateway)はサーバーが正常に応答していないというエラーで、
結論から言えばバックエンド側の処理が重過ぎてクラッシュしていたのが原因でした。
なぜいきなりそういう事態に陥ったのかというと、
ある計算式を正常に処理させるために一時的にキャッシュを生成する仕組みを外していたのですが、
それによって都度計算するようになり、これが高負荷の原因だったということですね。
これを検査するために「Laravel Telescope」という応答速度などを測るツールを導入したところ、
キャッシュなしの生成ではなんと45,000msもの時間がかかっていました。
キャッシュを導入したら300msまで減ったので実に150倍の短縮ということになります。
対象となっていた関数はループ内で使われることもあり、
しかもそれなりに重いデータベース処理を行うのでキャッシュは必須だったというわけですね。
ピクチャレ大会は基本的にフロントエンドキャッシュで表示の高速化を実現していましたが、
もはやこれだけでは不十分で、バックエンドキャッシュも積極的に使っていかなければならないと痛感しました。
いままでの作業環境ではそこにメスを入れるのはなかなか難しかったですが、
Laravel TelescopeがあればリクエストしたすべてのAPIが応答速度つきで一覧化されるため、
開発環境をいじっていればネックがどこにあるか簡単にわかります。
こういうツールがあるとやはりモチベは上がりますね。
ちなみに一時的にキャッシュを外して検証していた計算式はランクポイント絡みだったのですが、
数百〜20,000点に収まるはずのポイントが、ある変数が「1以下」になると指数関数的に増えていき、
10の19乗といった膨大な数になってしまうという不可思議なエラーが起きていました。
これ自体が処理を重くしていたわけではありませんが、
数学に疎いとこういうエラーも起こしがちで、今回は致命的にならなくて良かったなと。
ピクチャレ大会改修についてはやりたいことがまだまだ山ほどあるため、
このモチベーションをなんとか維持していきたいところです。