1.
先做业务流量与峰值并发评估:收集7×24小时流量、峰值TPS、平均响应时间、数据库QPS与存储需求。确定RTO/RPO目标(例如RTO≤5分钟,RPO≤1小时)。
根据评估结果决定节点规格、可用区数量(建议至少2个AZ)和跨可用区复制策略。规划CIDR、子网、公私网分区与NAT/网关。
2.
创建VPC并按功能划分子网:web层公有子网、应用与业务节点私有子网、数据库私有子网、管理子网。每个可用区都部署一套子网以保证高可用。
配置路由表、NAT网关(私有子网出网),安全组/ACL只开放必要端口(HTTP/HTTPS、SSH跳板限IP)。启用VPC Flow Log以便审计。
3.
部署区域内(可用区)至少2个应用实例组并接入跨AZ负载均衡器(ALB/NLB)。健康检查路径建议使用/health,间隔30s,失败阈值3,超时时间5s。
对静态资源走CDN并配置缓存规则;动态请求通过负载均衡均匀分发并启用会话粘滞仅在必要时使用。
4.
基于CPU、响应时间与自定义指标(如队列长度)配置自动伸缩策略。设置最小/期望/最大实例数,并加冷却时间避免抖动。
采用蓝绿或滚动发布:先在新环境做健康检查与烟雾测试,再切流量。保留回滚脚本及数据库变更回滚方案。
5.
生产库采用主从/主备并启用多可用区同步或半同步复制,备库位于不同AZ。配置定期备份与事务日志备份,保留至少7天或按合规要求。
对读多写少场景启用只读副本并在应用层进行读写分离。演练主备切换并记录切换时间与数据一致性验证步骤。
6.
使用分布式内存缓存(如Redis集群)减轻数据库压力,设置hot key监控与过期策略。缓存采用主从或集群模式并跨AZ部署。
引入消息队列(如Kafka/RabbitMQ)解耦高峰写入与异步处理。队列需持久化、设置滞留监控与重试策略。
7.
静态文件(图片、下载、日志)存储于对象存储并启用生命周期管理及跨区域复制(CRR)作为容灾备份。配置公开读的CDN分发并开启HTTPS。
设置Cache-Control、压缩与合并策略,减少回源请求。配置CDN回源健康检查与故障域切换。
8.
部署Web应用防火墙规则阻断常见攻击(SQL注入、XSS、文件上传),配置WAF白名单/黑名单与速率限制。启用DDoS防护服务并设置告警阈值。
实施最小权限IAM策略、密钥轮换、加密传输(TLS1.2+)与存储加密。关键接口走私有链路或VPN。
9.
建立全栈监控:主机、应用、数据库、队列、缓存、网络延时与错误率。设置阈值告警并通过PagerDuty/钉钉推送。
定期进行故障演练:单AZ故障、负载突增、数据库主备切换、回滚演练并记录时间与改进项,形成Runbook。
10.
1)准备IaC脚本(Terraform/CloudFormation),先在测试环境应用;2)创建VPC与子网;3)部署负载均衡器并配置健康检查;4)创建ASG并上应用镜像;5)部署数据库主备并开启备份;6)配套缓存、队列与CDN;7)安全组与WAF生效;8)开启监控与告警;9)全链路压测与演练;10)切换生产流量。
每一步都记录回滚命令与验证点。例如验证应用健康:curl -I https://app.example.com/health 并检查HTTP 200。
11.
定期分析实例利用率,使用预留实例或Savings Plan降低成本。非高峰时段可使用自动缩容或暂停开发环境资源。
对数据库大IO或冷备份使用分片或分表策略,合理调整缓存TTL与CDN缓存命中率,减少后端压力。
12.
问:在新加坡机房部署,是否必须使用多可用区?
答:必须优先考虑多AZ部署以避免单点故障。即使同区域内多AZ延迟低,也能在单AZ断电或网络故障时保证服务可用,满足电商对可用性要求。
13.
问:如何配置可保证RPO最小化的主备切换?
答:采用半同步或同步复制可降低数据丢失风险,同时备库应开启实时备份与事务日志归档。切换前验证Replica lag并在应用层暂缓写入或使用事务日志回放确保一致性。
14.
问:有哪些必须做的验证与演练步骤?
答:必做项包括单AZ断电测试、负载突增压测、数据库主备切换演练、CDN回源失效测试与WAF防护绕过测试。每次演练记录SLA指标并修正Runbook。