入口与前端
压缩首屏资源,拆分非关键脚本,使用合理的缓存策略,减少重复请求。商品图、活动素材和字体等静态资源应通过稳定的分发策略承接。前端要区分“页面可见”“可以操作”和“数据完全加载”三个时刻,避免把所有内容绑在一个请求上。
网关与接口
为核心接口设置超时、重试和熔断边界,避免一个下游故障拖垮线程。重试必须有退避和次数上限,幂等接口要明确幂等键。网关层还应记录请求来源、版本、业务动作和追踪标识,方便把体验问题还原到具体链路。
服务与业务逻辑
把读多写少、强一致交易和异步通知分开设计。优惠计算、推荐和营销标签可以采用缓存或预计算;库存扣减、订单创建和支付确认则需要清晰的状态机与补偿机制。不要为了追求单次响应极快而牺牲最终一致性可解释性。
缓存治理
缓存不是“加一个 Redis”就结束。需要确定键设计、过期时间、热点保护、击穿、穿透、雪崩和更新策略。热点商品可以预热,但不能把不可接受的陈旧库存直接展示为可购买状态。缓存命中率提升后,也要验证数据库压力和业务准确性是否同步改善。
数据库与 SQL
先通过执行计划定位慢 SQL,再判断索引、分页、字段选择、事务范围和锁竞争。不要把所有字段都放入一次查询,也不要用深分页扫描大量无效记录。交易表、日志表和分析表应根据访问模式合理分离,避免后台报表影响在线交易。
消息与异步任务
消息队列可以削峰,但会引入延迟、一致性和重复消费问题。要监控积压量、消费速度、失败重试、死信数量和最老消息年龄。管理层需要知道哪些消息可以延后,哪些消息会直接影响库存、订单状态或用户通知。
外部依赖与降级:系统边界之外也要纳入设计
支付、物流、短信、实名认证、地图和营销权益都可能成为高峰链路的一部分。对外部依赖,我会建立超时上限、备用通道、结果查询、异步补偿和人工核对机制。降级不是简单地返回一个错误页面,而是明确哪些内容可以暂时不展示、哪些动作可以排队、哪些状态必须告诉用户真实进展。
例如,推荐模块超时可以展示默认商品集合,实时排行榜暂时切换为最近一次快照,客服机器人可以提示订单状态正在同步;但支付结果不能用“看起来成功”代替真实确认。每个降级动作都要有恢复条件和数据补偿方案。