外卖系统源码私有化上线前,午高峰容量怎么估,决定先加 ECS 还是先升 RDS。盲目加应用节点而数据库 CPU 已打满,扩容钱花了,下单仍超时。
一、先看数据库是不是瓶颈
压测时盯 RDS CPU、慢查询、连接数。若写入 TPS 接近上限,先垂直升配或拆读写,再加应用副本。只加 ECS 不能解决锁等待。
试跑期用固定单号在后台、导出文件、用户端各查一次,三处状态一致再扩量。压测报告应附在交付文档,供客户按当地单量选型规格。
二、应用层水平扩展前提
会话无状态、上传走 OSS、WebSocket 配送推送走独立服务。否则加节点会出现粘会话问题。订单创建接口幂等,防止重试双单。
财务宜参与导出列名确认,比开发口头说能跑更可靠,签字样本存档备查。应用扩容不应改变导出列含义,列变更走映射版本流程。
三、缓存与热点商品
菜单与门店列表走 Redis;库存扣减仍回源数据库,缓存只做读。午高峰秒杀类活动宜单独限流,不与日常外卖混同一阈值。
备份恢复演练宜在非高峰做,确认恢复后导出任务仍能执行、路径未变。缓存失效策略变更后应抽测菜单与导出菜名列是否仍一致。
四、导出任务错峰
大导出放在凌晨,不与 11:30~13:00 抢连接。只读实例专供报表。若必须白天导出,限制并发与行数范围。
第二城复制时宜带走 export schema 与测试单模板,避免重新口头约定列名。未开通的业务入口宜配置隐藏,避免用户误点空白页。
五、与字段映射类文章的分工
腾讯云同题侧重订单字段与导出 DTO;本篇侧重 IaaS 规格与读写分离。两者合并才是完整上线 checklist,立项时宜合并成一张验收表。
部分退样本宜在试跑期造出,别等真实退款周才第一次测负向行。密钥轮换宜留双 Key 过渡期,避免财务夜班导表时 Key 刚好失效。
六、光合同城建议
交付文档含参考 QPS 与 RDS 规格表;客户按当地单量选型。商务规则由客户确定;系统侧不抽成客户平台订单。
大表导出宜走异步队列,不在下单接口里同步拉全量,防止午高峰拖库。交付邮件抄送财务与运维,三方同日签字。
七、监控告警
下单 P99、支付回调延迟、RDS 连接池使用率分告警。高峰前一周做 replay 压测,不是开业当天才看监控。
监控宜分支付 notify 与菜单版本两类告警,避免混排误判根因。告警值班表应含财务联系人,便于支付异常夜间的决策链清晰。
八、小结
午高峰扩容顺序:数据库可写能力、无状态应用、缓存、异步导出;反过来往往浪费预算。改价或改配送规则后,宜抽进行中单与新单各三笔对照快照是否符合预期。
只读导出账号与写库账号分离,降低误操作删改订单的风险。定时任务失败要有告警,静默重试耗尽磁盘会导致周结文件缺失。压测报告应附在交付文档,促销或扩城前 replay 同一脚本。RDS 升配与应用加副本应分里程碑验收,导出 Worker 连接池单独配额,避免与下单争抢 max_connections。菜单与门店列表缓存失效后应抽测导出菜名列是否仍与后台一致,防止「界面新名、CSV 旧名」周结对不上。
开业前 replay 压测脚本应写入运维 runbook,促销前同一脚本再跑一遍,对比 P99 与 RDS CPU,再决定是否临时升配。只读实例专供报表时,仍须监控复制延迟,延迟过大时导出可能读到旧状态。