基于NGINX的Laravel REST API如何实现每秒200次并发请求处理
性能优化方案
1. Laravel 应用层优化(优先级最高,单请求性能提升最明显)
- 开启生产环境全量缓存:执行
php artisan optimize命令,缓存路由、配置、类映射,消除每次请求的初始化解析开销。 - 替换PHP-FPM运行模式:部署Laravel Octane,采用Swoole/RoadRunner作为运行时,常驻内存运行Laravel容器,避免每次请求重新初始化框架,单请求耗时可降低50%以上。
- 异步化非核心逻辑:审计表INSERT操作完全不需要同步执行,接入Laravel队列异步写入,若业务INSERT逻辑允许非实时返回,也可同步改为异步,单请求数据库操作可简化为仅1次SELECT查询。
- 新增查询缓存:针对调用PostGIS函数的SELECT请求,增加Redis缓存,缓存时长按业务可接受的数据延迟设置,相同参数的重复请求直接从缓存返回,无需打到数据库。
- 优化事务逻辑:如果三类数据库操作被包裹在同一事务中,尽可能缩短事务持有时间,不要在事务内执行与数据库无关的业务逻辑,减少锁等待。
2. PHP-FPM 配置优化
- 替换ondemand模式为static模式,避免高并发下进程按需拉起的开销。M6G.8XLarge为32核实例,
pm.max_children设置为64128即可(核数的24倍),无需设置5200的超大值,过多进程会导致上下文切换开销陡增。 request_terminate_timeout调整为2s,避免慢请求长时间占用worker进程。
3. NGINX 配置优化
worker_connections从1024调整为10240,支撑更高并发连接。keepalive_requests从2000调整为10000,减少TCP握手开销。- 开启API响应brotli压缩,降低传输耗时。如果接口允许缓存,可新增fastcgi缓存规则,可缓存请求直接在NGINX层返回,无需透传到后端。
4. 数据库层优化
- PGBouncer配置:
default_pool_size调整为100,和PostgreSQL的max_connections适配,避免连接池不够用导致的请求排队。 - PostgreSQL写入优化:如果业务允许极端场景下丢失1s内的写入数据,可设置
synchronous_commit = off,写入性能可提升3~5倍,审计日志类非核心写入可单独设置该参数。 - 慢查询优化:用
EXPLAIN ANALYZE执行SELECT查询语句,确认PostGIS相关查询已命中GIST空间索引,并行执行逻辑正常,无全表扫描。
5. 架构扩展优化
- 新增PostgreSQL只读从库,所有SELECT查询请求路由到从库,主库仅处理INSERT写入操作,读写分离后可大幅降低主库负载。
内容的提问来源于stack exchange,提问作者Dinesh
相关产品推荐
相关产品推荐

