步骤概述:先画出简单架构:公网域名 -> CDN -> SLB(负载均衡)-> 多台 ECS(应用); 数据库使用 RDS,静态文件放 OSS,Session 使用 Redis。明确最少资源:2 台 ECS(热备),1 个 SLB,1 个 Auto Scaling 组,1 个 OSS Bucket,1 个 RDS 实例,1 个 Redis 实例,CDN 域名。
注意事项:香港区域选择可用区(如果支持多可用区尽量跨区部署),创建 VPC/Subnet,合理设置安全组(仅开放必要端口,SSH 限制到管理 IP)。
操作步骤:登录阿里云控制台 -> 产品与服务 -> 网络与 CDN -> 专有网络 VPC,创建一个 VPC 并至少两个子网用于分布 ECS。
安全组设置:创建安全组规则,入方向允许 80/443 来源 0.0.0.0/0,SSH(22)限制到管理 IP,数据库仅允许来自 VPC 内网访问(RDS/Redis 通过安全组白名单)。
创建实例:控制台 -> 弹性计算 -> 实例 -> 选择地区“香港”,选择合适规格与镜像(CentOS/Ubuntu),使用密钥对或密码登录。
环境准备(以 Ubuntu 为例):SSH 登录后执行:sudo apt update && sudo apt install -y nginx git nodejs npm 或者安装 Java/PHP/Go 环境。配置防火墙(ufw)或依赖安全组。
部署示例:把应用代码克隆到 /var/www/app,使用 PM2 或 systemd 管理 Node 服务(pm2 start app.js --name myapp; pm2 save)。为健康检查创建 /health 返回 200。
RDS 创建:控制台 -> 数据库 -> RDS(选择香港地域),选择 MySQL/Postgres,创建实例并设置只允许内网访问,设置备份策略与高可用(主从/读写分离)。
Redis:控制台 -> 缓存 Redis,创建实例后记录内网地址,修改应用配置将会话/缓存指向 Redis。安全组只允许 ECS 子网访问 6379。
OSS 创建:控制台 -> 对象存储 OSS -> 创建 Bucket(选择地域与访问策略),上传静态资源(图片、JS、CSS),开启静态网站托管(可选)。
CDN 绑定:控制台 -> CDN -> 域名管理 -> 添加加速域名,源站类型选择“OSS Bucket”或自定义(填 SLB 公网域名/公网 IP),配置缓存规则、压缩与 HTTPS。获取 CDN CNAME 用于 DNS 配置。
创建 SLB:控制台 -> 负载均衡 -> 创建实例,选择公网或内网负载均衡(如需外网访问选择公网),绑定刚建的 VPC 与子网。
监听与后端:添加监听器(80/443),将 ECS 实例加入后端服务器池,设置权重、健康检查(协议 HTTP,路径 /health,间隔 5-10s,超时 2s,连续失败阈值 2)。
SSL:若使用 HTTPS,上传证书到 SLB 或使用阿里云证书服务,SLB 终端 HTTPS 后端可以走 HTTP(内网)以减轻后端负载。
创建启动模板:控制台 -> 弹性伸缩 -> 启动模板,模板中配置镜像、实例规格、用户数据(cloud-init 或脚本自动拉取代码并启动服务),并设置所需安全组。
创建伸缩组:新建伸缩组并绑定 SLB 后端池,设置最小/最大/期望实例数(例如 min 2, max 10)。配置伸缩策略:基于 CloudMonitor 的 CPU 利用率或自定义指标(平均 CPU > 60% 持续 5 分钟触发扩容)。
测试伸缩:通过压力测试工具(ab、wrk)模拟负载,观察 CloudMonitor 与伸缩执行记录,确认新实例自动加入 SLB 并通过健康检查。
DNS 配置:控制台 -> 域名与解析,将域名的 www CNAME 指向 CDN 提供的 CNAME;若根域名需生效,可在阿里云 DNS 使用 ALIAS/解析到 SLB(或用泛解析 + CDN)。
缓存策略:在 CDN 控制台设置静态资源长缓存(例如图片 7 天),接口短缓存或不缓存,设置动态页面的回源策略与鉴权头部透传,开启 gzip 与 HTTP/2。
HTTPS:为域名申请证书(Let’s Encrypt 或阿里云免费证书),在 CDN 或 SLB 配置证书,确保全链路 HTTPS。
监控项:使用 CloudMonitor 添加监控面板(ECS CPU、内存、网络、SLB QPS/链接数、RDS 慢查询、Redis 命中率、CDN 流量)。
告警规则:为关键指标设置告警(CPU>80%、SLB 后端不健康实例数>0、RDS 连接数接近上限),并配置通知到邮件/短信/钉钉群。
故障演练:定期做故障切换演练(下线一台 ECS,观察 SLB 流量切换;模拟数据库读写异常,检验备机/备份恢复流程)。
答:优先在支持多个可用区的情况下,将 ECS 分布在不同可用区;SLB 支持将不同可用区的实例加入同一后端池;RDS 选择多可用区部署(主备切换);同时使用 CDN 与 DNS(GTM 若需要)在全球/区域层面分流以避免单点可用区故障。
答:不要依赖本地内存会话。将会话存储在 Redis(ApsaraDB for Redis)或使用数据库/Token 机制。另一种是开启 SLB 的会话保持(sticky session),但这会降低扩容弹性和负载均衡效率,推荐使用 Redis。
答:静态资源(图片、JS、CSS)优先使用 OSS 作为源站,回源到 OSS 能获得更稳定的缓存与更少回源请求。动态接口或需服务器渲染的内容应回源到 SLB -> ECS。可混合使用:CDN 支持多源根据路径回源。