1.
选型与基础部署(选机房、规格与网络)
- 步骤1:选择新加坡节点(SINGAPORE/sg)以保证亚太及澳洲用户低延迟。
- 步骤2:起步规格建议:2vCPU+4GB内存+40GB SSD,用于中小型电商;高峰期建议4vCPU+8GB或以上。
- 步骤3:使用独立公网IP(弹性IP),开启DDoS防护与带宽包,选择按流量或按带宽计费。
- 步骤4:建VPC并设置子网、路由表、安全组(仅开放80/443/22/3306等必要端口),示例安全组规则:仅允许管理IP的SSH,HTTP/HTTPS全部公网,MySQL限制到应用服务器IP。
2.
操作系统与内核调优(Linux 基础)
- 安装系统:推荐使用Ubuntu LTS或CentOS 8/Stream。保持内核和安全更新:sudo apt update && sudo apt upgrade -y。
- TCP参数(编辑 /etc/sysctl.d/99-custom.conf)示例:
net.core.somaxconn=65535
net.core.netdev_max_backlog=50000
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_fin_timeout=15
net.ipv4.tcp_max_syn_backlog=4096
执行:sudo sysctl -p /etc/sysctl.d/99-custom.conf。
- 文件句柄提升:在 /etc/security/limits.conf 添加:* soft nofile 200000 和 * hard nofile 200000,并重启服务。
3.
Web 层优化:Nginx 配置与缓存
- 安装:sudo apt install nginx。
- Nginx worker 优化(nginx.conf):worker_processes auto; worker_rlimit_nofile 200000; events { worker_connections 16384; multi_accept on; }。
- Keepalive 与压缩:keepalive_timeout 65; gzip on; gzip_types text/css application/javascript application/json image/svg+xml; gzip_min_length 256;。启用 HTTP/2(listen 443 ssl http2;)。
- 静态资源缓存:location ~* \.(?:css|js|jpg|jpeg|png|svg|woff2)$ { expires 30d; add_header Cache-Control "public"; }。结合版本号或指纹策略管理缓存。
4.
应用与 PHP-FPM 调优(针对 PHP 电商)
- pool 配置(/etc/php/7.x/fpm/pool.d/www.conf)调整:pm = dynamic; pm.max_children = 60; pm.start_servers = 10; pm.min_spare_servers = 5; pm.max_spare_servers = 20。根据内存与平均请求内存估算 max_children。
- opcache:启用并设置 opcache.memory_consumption=256; opcache.max_accelerated_files=100000; opcache.validate_timestamps=1(生产可关)。
- 使用 FastCGI 缓存(Nginx)对部分请求做页面缓存以减轻 PHP 压力。
5.
数据库优化:MySQL/MariaDB 实战调参
- 基本安装并启用慢查询日志:在 my.cnf 中添加 slow_query_log=1; slow_query_log_file=/var/log/mysql/slow.log; long_query_time=0.5。定位慢查询并加索引。
- 内存分配(示例 for 4GB 内存):innodb_buffer_pool_size=2.5G; innodb_buffer_pool_instances=2; innodb_log_file_size=512M; query_cache_type=0(MySQL 8+ 不使用 query cache)。
- 建表结构优化:避免过多 varchar/text 索引,合理拆表或分区大型日志表。增加覆盖索引,使用 EXPLAIN 优化查询。
6.
缓存层与会话管理(Redis/Memcached)
- 安装 Redis:sudo apt install redis-server。开启持久化 RDB 或 AOF 根据需要。
- 配置 maxmemory 与回收策略:maxmemory 1G;maxmemory-policy allkeys-lru。用于页面片段缓存、商品详情缓存、购物车会话等。
- 会话存储:配置 PHP 使用 Redis Session(php.ini 或框架中配置),避免数据库会话压力。
7.
CDN 与边缘加速(针对新加坡节点策略)
- 选择覆盖亚太的 CDN(如 Cloudflare、Akamai、阿里云 CDN),开启静态资源缓存、图片压缩与 Brotli。
- 配置回源时使用 Keep-Alive,与弹性公网IP固定回源地址,设置合适的缓存规则(商品列表短缓存,图片长缓存)。
- 开启 WAF 与 Bot 管理减少爬虫/恶意流量。
8.
负载均衡与弹性扩缩容
- 使用云厂商的负载均衡(L4 或 L7):Backend pool 中添加多台应用节点并配置健康检查(/health)。
- 配置自动伸缩策略:当 CPU >70% 持续 5 分钟或 QPS 超标时自动扩容。缩容时设定冷却期避免抖动。
- Session 同步:使用 Redis 共享 Session 或采用 JWT,无状态设计利于水平扩容。
9.
压测与验证(ab、wrk、k6 实战)
- 准备环境:在非生产或专用压测链路进行。安装 wrk:sudo apt install wrk 或从源码编译。
- 常用命令示例:wrk -t12 -c400 -d60s https://www.example.com/,逐步增加并发从 50、200、400 到目标,观察 95/99 分位响应时间。
- 结合监控(CPU、内存、网络、负载)定位瓶颈,调整 PHP-FPM、数据库或加缓存。
10.
监控与告警(Prometheus + Grafana + Alertmanager)
- 部署 node_exporter、mysql_exporter、php-fpm exporter 并在 Prometheus 抓取。
- 在 Grafana 建立仪表盘:QPS、95P 响应、错误率、CPU/IO、Redis 命中率、DB 慢查询数。
- 告警策略:响应时间 >2s 超过 5 分钟报警;错误率 >1% 报警;Redis 命中率 <80% 报警。
11.
备份、恢复与故障演练
- 数据库定期备份:使用 mysqldump 或 xtrabackup,异地存储(对象存储/OSS)并保留 7-30 天。
- 静态资源与镜像在对象存储启用版本管理与生命周期策略。
- 定期做演练:恢复单节点故障、全链路压测故障转移,验证负载均衡与自动扩容逻辑。
12.
安全与合规(HTTPS、WAF、最小权限)
- 强制 HTTPS:使用 Let’s Encrypt 或证书管理,启用 HSTS、TLS1.2/1.3,禁用老旧加密套件。
- WAF:启用防 SQL 注入、XSS 的规则;限制 API 的访问频率(rate limit)。
- 权限管理:SSH 使用密钥登录、关闭 root 直接登录,定期审计日志。
13.
部署验收清单(上线前逐项检查)
- 列表:域名与 DNS 生效,HTTPS 正常,CDN 回源正常,缓存命中率测算完成,压测通过,无慢查询,自动扩缩容策略生效,备份与监控报警正常。
14.
问:在新加坡云服务器上,如何快速判断是数据库还是应用成为瓶颈?
- 答:先用压测工具(wrk/ab)在低并发下测试,观察单台应用的响应;结合监控看 CPU/IO、DB 连接数、MySQL 慢查询与锁等待。若应用层 CPU、PHP-FPM 队列高且 DB 使用率低,多为应用瓶颈;若 DB CPU/IO 或 innodb_row_lock_time_high 激增且 slow_query 增多,则为数据库瓶颈。
15.
问:在新加坡节点部署 CDN 后,缓存未生效怎么办?
- 答:检查 CDN 缓存规则(路径、Query String 策略)、Origin 返回的 Cache-Control/Expires 头以及是否存在 Set-Cookie 阻止缓存。可用 curl -I 查看响应头,调整回源头或 CDN 覆盖规则,设置缓存键忽略特定 query 参数。
16.
问:电商高峰(秒杀)如何保证新加坡云环境的可用性与性能?
- 答:采用预热策略(提前将热点页面/商品缓存到 CDN 与本地缓存)、提前扩容到预设实例数、使用消息队列削峰(下单异步化)、开启数据库读写分离与只读副本、保障 Redis 内存容量并监控命中率,同时做好回滚与降级策略(灰度、关闭非必要功能)。