温馨提示×

LNMP架构中如何处理高并发请求

小樊
36
2025-11-30 06:57:43
栏目: 编程语言

LNMP高并发处理实战方案

一 架构与容量规划

  • 分层解耦与横向扩展:以Nginx为反向代理/负载均衡,后端多台PHP-FPM应用服务器,数据库采用MySQL 主从读写分离,文件上传直传OSS/MinIO避免本地磁盘单点,必要时引入CDN承载静态资源,整体形成可水平扩展的集群。对于读多写少场景,读请求优先落到从库,写请求走主库。
  • 容量粗估方法:并发能力≈每秒请求数(QPS)×平均响应时间(RT)。例如目标5,000 QPS、平均动态页面200 ms,则系统需支撑约1,000 个动态并发。若单机动态并发目标1,000/s且平均处理100 ms,单个 PHP-FPM worker 约可处理10 req/s,则至少需要约100 个 worker(实际需结合内存与CPU验证)。
  • 带宽核算:若并发5,000/s、单请求响应体20 KB,出口带宽≈100 MB/s。静态资源交由CDN可显著降低源站带宽与连接压力。

二 Nginx与网络层优化

  • 进程与连接:设置worker_processes auto(通常等于CPU核心数),提升worker_connections(如1024或更高);开启keepalive复用连接(如keepalive_timeout 65keepalive_requests 100);启用sendfile on减少用户态/内核态拷贝开销。
  • 传输与协议:启用Gzip压缩减少传输体积;启用HTTP/2提升多路复用与头部压缩效率。
  • 缓存与静态资源:为图片/CSS/JS设置长Cache-Control/Expires(如30d);按需配置proxy_cache_path做反向代理缓存,降低后端压力。
  • 负载均衡与健康检查:使用upstream分发请求,配置server … max_fails/fail_timeout等健康检查参数,自动摘除异常后端。
  • 内核与网络:提升net.core.somaxconnnet.ipv4.tcp_max_syn_backlog、扩大net.ipv4.ip_local_port_range,开启tcp_tw_reuse等,缓解连接瓶颈与端口耗尽。

三 PHP-FPM与代码层优化

  • OPcache加速:启用并合理设置opcache.memory_consumptionopcache.max_accelerated_filesopcache.interned_strings_buffer等,减少脚本编译与解析开销。
  • 进程模型与池:根据内存与RT选择pm = static/dynamic,合理设置pm.max_children / pm.start_servers / pm.min_spare_servers / pm.max_spare_servers;同机部署建议Nginx 与 PHP-FPM 使用 Unix Socket(性能通常较 TCP 提升约10%–20%)。
  • 超时与资源:设置max_execution_timememory_limit避免长脚本与内存泄漏拖垮进程池。
  • 业务优化:减少N+1 查询SELECT ,使用索引EXPLAIN分析慢查询;引入Redis/Memcached做数据缓存;将耗时任务(发邮件、生成报表、图片处理)放入消息队列异步化;实施限流/熔断/降级*保护核心链路。

四 MySQL与存储层优化

  • 内存与连接:将innodb_buffer_pool_size设置为物理内存的50%–70%(写密集可调高),结合业务调整max_connections等连接参数。
  • 主从复制与读写分离:写主库、读从库;MySQL 5.7+ 开启并行复制slave_parallel_type=LOGICAL_CLOCKslave_parallel_workers≥4)降低从库延迟;对强一致性读(如支付结果)直连主库。
  • 索引与慢查询:为高频条件列建立合适索引,定期分析慢查询日志并优化执行计划。
  • 文件存储:用户上传文件直传 OSS/MinIO,避免多Web节点本地存储不一致与单点故障。

五 监控、压测与故障演练

  • 监控告警:以Prometheus + Grafana为核心,采集Nginx(请求数、响应时间、5xx)、PHP-FPM(进程数、排队、慢请求)、MySQL(连接数、复制延迟、慢查询)等指标;结合Zabbix/Nagios做可用性告警。
  • 日志分析:使用ELK(Elasticsearch/Logstash/Kibana)集中分析访问与错误日志,快速定位瓶颈。
  • 压测与容量:用ab/wrk等工具对关键接口压测,验证RPS/RT/错误率与瓶颈点,结合监控数据迭代参数。
  • 高可用演练:对Nginx+Keepalived VIP进行故障切换演练,确保VRRP 协议(112)放行、优先级配置正确、切换时延在可接受范围(如≤3 秒)。

0