メインコンテンツまでスキップ

パフォーマンス最適化

スケールアップする際に FeedbackPulse SaaS を高速化するためのヒントです。


クイックウィン

1. 設定のキャッシュ

php artisan config:cache    # .env と設定ファイルをキャッシュ
php artisan route:cache # ルートをキャッシュ
php artisan view:cache # Blade ビューをあらかじめコンパイル

デプロイのたびにこれらを実行してください。php artisan optimize:clear でクリアできます。

2. キャッシュとセッションに Redis を使用

Redis はファイルやデータベースのキャッシュよりも大幅に高速です:

sudo apt install redis-server php8.4-redis
CACHE_STORE=redis
SESSION_DRIVER=redis
QUEUE_CONNECTION=redis

3. データベースキューの使用(最低限)

QUEUE_CONNECTION=database

Supervisor 経由でキューワーカーを実行して、インラインではなくバックグラウンドでジョブを処理します。

4. OPcache の有効化

; /etc/php/8.4/fpm/conf.d/10-opcache.ini
opcache.enable=1
opcache.memory_consumption=256
opcache.max_accelerated_files=20000
opcache.validate_timestamps=0 ; 本番環境では無効化

データベースの最適化

インデックスの追加

FeedbackPulse には適切なインデックスが含まれていますが、大きなクエリを実行している場合は以下で確認してください:

-- スロークエリを確認
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2;

MySQL チューニング

innodb_buffer_pool_size = 1G       # 利用可能な RAM の 50〜70%
innodb_log_file_size = 256M
max_connections = 200
innodb_flush_log_at_trx_commit = 2 # 速度のために若干の耐久性を犠牲に

Web サーバーの最適化

Nginx:Gzip の有効化

gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml;
gzip_min_length 256;
gzip_vary on;

静的ファイルのキャッシング

location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}

PHP-FPM チューニング

pm = dynamic
pm.max_children = 20 # RAM に基づいて調整
pm.start_servers = 5
pm.min_spare_servers = 3
pm.max_spare_servers = 10
pm.max_requests = 500 # メモリリークを防ぐ

スケーリングの推奨事項

テナント数推奨セットアップ
1〜50シングル VPS、ファイルキャッシュ、同期キュー
50〜200シングル VPS、Redis キャッシュ、Supervisor 付きデータベースキュー
200〜1,000専用サーバー、Redis キャッシュ+キュー、MySQL チューニング
1,000 以上ロードバランサー、分離 DB サーバー、Redis クラスター、複数のキューワーカー

監視

# PHP-FPM のステータスを確認
sudo systemctl status php8.4-fpm

# MySQL のプロセスリストを確認
mysqladmin processlist

# ディスク容量を確認
df -h

# メモリ使用量を確認
free -m

# エラーの Laravel ログを確認
tail -f storage/logs/laravel.log

次のステップ