先量化再优化:用端到端可观测性定位延迟瓶颈
延迟优化最忌讳凭感觉调参。第一步应当建立端到端可观测性:前端记录 RUM 指标,网关记录 TTFB,服务端用 TraceID 串联微服务、数据库、缓存和第三方 API,再结合日志与指标观察 P50、P95、P99 的差异。很多系统平均值看似正常,但 P99 已经严重拖累用户体验,因此必须重点关注长尾请求。还要拆解关键路径,明确 DNS、TCP、TLS、服务端处理、排队、序列化、数据库查询、外部依赖各占多少毫秒。为每类接口设置延迟预算,例如页面首屏 1 秒、API 200 毫秒、核心查询 50 毫秒。通过持续压测、灰度发布和线上 A/B 对比,确认优化是否真正生效,而不是把瓶颈从一处转移到另一处。
缩短网络往返:CDN、连接复用与协议升级
网络往返往往是延迟的大头,尤其跨地域访问时,每一次握手、重定向和跨机房调用都会叠加延迟。优化时优先做就近接入:静态资源交给 CDN,动态接口使用动态加速或边缘节点,让用户请求少走公网长链路。协议层面可升级到 HTTP/2、HTTP/3 和 QUIC,利用多路复用、0-RTT/1-RTT 握手、TLS 1.3 会话恢复减少建连成本。客户端侧使用 DNS 预解析、preconnect、连接池和 keep-alive,避免频繁创建连接。传输内容要压缩,启用 Brotli 或 Gzip,减少大 JSON、图片和脚本体积。对于小请求,可合并批量调用,但也要注意缓存粒度和失败隔离。网络优化不是只改一项,而是把 DNS、TCP、TLS、传输和边缘计算一起纳入治理。

把等待前移:多级缓存、预计算与边缘计算
缓存是把等待前移的最有效手段之一。浏览器缓存、Service Worker、CDN 缓存、网关缓存、应用本地缓存、Redis 和数据库物化视图,可以形成多级防线。关键不是“加缓存”,而是设计缓存键、TTL、失效策略和一致性方案。静态资源可使用内容哈希和长期缓存,接口可使用 ETag、Last-Modified、stale-while-revalidate,让用户先看到旧数据,再后台刷新。对报表、排行榜、推荐结果、商品聚合等计算密集数据,可预计算并定时更新,避免每次请求都实时扫描全表。边缘计算则把鉴权、A/B 测试、个性化片段放到离用户更近的位置执行。还要防范缓存穿透、击穿和雪崩,可使用布隆过滤器、互斥锁、随机过期和热点探测,确保缓存既快又稳。
异步化与削峰填谷:队列、批处理和资源隔离
并非所有操作都必须同步完成。日志上报、通知推送、图片压缩、风控扫描、推荐计算等任务,可以写入消息队列后立即返回,由消费者异步处理。这样能显著缩短接口响应时间,也能在流量高峰时削峰填谷。批处理同样重要:合并小 IO、批量写数据库、批量调用下游、合并网络请求,可以减少系统调用和锁竞争。资源隔离则是稳定性的底线,核心接口、慢查询、第三方调用应使用独立线程池、连接池和队列,避免一个慢依赖拖垮整个服务。配合超时、有限重试、熔断、降级和背压机制,可以防止重试风暴和级联故障。最终一致性、优先级队列和死信队列也要提前设计,让延迟优化不以牺牲可靠性为代价。


