首先要对VPS实例做系统级优化:关闭不必要服务,升级内核与常用包,设置时区和同步NTP。调整内核网络参数:如设置 net.core.somaxconn、net.ipv4.tcp_tw_reuse、net.ipv4.ip_local_port_range,并增加文件描述符限制(ulimit -n)。
其次在Web层选择高性能服务栈:建议使用 Nginx 结合 PHP-FPM(或用Go/Node等无阻塞框架)。Nginx 配置要启用 epoll、增大 worker_connections、合理设置 keepalive_timeout 与 sendfile。配合反向代理、负载均衡可用 upstream 与 health_check。
• 修改 /etc/sysctl.conf 并应用:net.core.somaxconn=65535、net.ipv4.tcp_fin_timeout=30 等;
• /etc/security/limits.conf 增大 nofile 与 nproc;
• 在 Nginx 中设置 worker_processes auto,worker_connections 至少 10240,并开启 gzip 与压缩缓存。
架构上要做到“分离职责、水平扩展”:将静态资源交给 CDN,应用层做无状态设计,使用 session 存储到 Redis。通过异步队列(如 RabbitMQ/Redis Queue)把耗时任务下沉,减少请求阻塞。
使用多级缓存:浏览器缓存 + CDN + 本地缓存(Redis/Memcached)+ 应用内 LRU 缓存。关键是缓存失效策略要设计好,避免缓存击穿(用互斥锁或永不过期预热)。
对于热点写入,可采用写入合并、延迟写或使用消息队列异步处理,显著降低数据库瞬时压力。
首先保证数据库服务器有充足内存并将 innodb_buffer_pool_size 调到物理内存的 60%-80%(非共享环境)。开启 innodb_flush_log_at_trx_commit=2(在可接受事务安全性风险下可提高写入性能),并调整 innodb_log_file_size 以减少频繁刷盘。
对 SQL 做规范化:创建合适的复合索引,避免全表扫描,使用 EXPLAIN 检查执行计划并重写慢查询。开启慢查询日志,定期分析并优化热点 SQL。对读密集型场景考虑读写分离(主从复制)和分库分表策略。
部署连接池/代理层可显著提升数据库并发能力:在应用端使用连接池(如 HikariCP、PDO pool),中间层可引入 ProxySQL 或 MySQL Router 做读写分离与故障转移,减少应用直接连接主库的压力。
使用 Redis/ Memcached 作为热点数据缓存,结合二级缓存策略减少数据库命中率。对会话与短期锁定数据使用 Redis,实现快速读写与原子操作(INCR/SETNX)。
监控覆盖三层:主机(CPU、内存、磁盘、sysctl指标)、应用(响应时间、错误率、QPS)与数据库(慢查询、连接数、innodb状态)。推荐使用 Prometheus + Grafana 做指标监控,配合 Alertmanager 设置告警阈值。
日志集中化(ELK/EFK)用于快速定位异常请求或错误栈;部署自动化备份(mysqldump 或 xtrabackup)和定期恢复演练。流量激增时可触发自动扩容脚本(启动新的香港VPS实例并加入负载均衡池)。