railsのActiveRecordって便利だけど、実際にどんなクエリが吐かれるかチェックしてないとパフォーマンスすぐに落ちるケース多い。
遅いAPIをどのようにして発見するか?
■ 1.APM(Application Monitoring Management)を導入する
おすすめはこの辺り
- NewRelic - DATADOG
■ 2. APM(Application Monitoring Management)を利用しパフォーマンスの悪いAPIを探す
APMツールを利用すると、どのエンドポイントが遅いか可視化できるので当たりをつけてボトルネックを探す。
クエリの発行を調査するときはExplainを使うとクエリ詳細情報が出るので良い。
どのように改善するか?
■ アプリケーションレベルでの対策
1. キャッシュを使う。 2. データベース操作回数を減らす。1テーブル1回を目指す。 3. データベースから取得するレコードとカラムを最小限にする。 4. データベースのインデックスの張り方を工夫する。インデックスが使えるようなクエリにする。 5. マルチスレッドで処理する。 6. 高速なライブラリを導入する。 7. HTML作成(の一部)をJavaScriptに任せる。 8. Ajaxでレスポンスを返し、ページの一部分の更新のみで済ませる。
■ インフラレベルでの対策
1. ミドルウェアのバージョンを最新のものに変える 2. 速いサーバーに乗り換える 3. サーバーの数を増やす 4.ネットワークを高速なものに変える