缓存命中率涨到九成九的那天,我请全组喝了奶茶,预算就出在省下的服务器钱里。我深呼吸了一下,决定从最可疑的地方查起。我把这个对象的创建提到了循环外,GC 压力小了很多。我把这条经验写进了团队 wiki

我把这个批处理的批次调大了,整体耗时降了四成。我重新看了一遍手上的计划,把风险项标了出来。我把这个接口的依赖调用改成了并行的,耗时砍半。世界瞬间清净了

优化到后面会发现,最大的浪费是做了不需要的事。我抬起头看了看周围,大家都一样。我发现这个缓存的过期时间设得太短,命中率很低。真香定律准时生效

性能问题的根因往往是架构而非代码。我把它记在心里,没跟任何人说。我把缓存加了进去,QPS 立刻上了一个台阶,一致性开始头疼。办公室安静得能听见键盘声

这个缓存的存在感很强,命中率却不高。我不知道该说什么,就笑了笑。我把这个接口的返回值做了裁剪,只留了必要的字段。同事说这波操作可以写进新人培训教材

这个索引让查询快了十倍,写入慢了一点。我把手上的资料翻出来又读了两遍。我确认了瓶颈在数据库,而不是我以为的应用层。这条经验值直接拉满

性能的瓶颈通常不在你以为的地方。我抬起头看了看周围,大家都一样。我把这个算法的复杂度从平方降到了线性,效果明显。世界瞬间清净了

缓存命中率涨到九成九的那天,我请全组喝了奶茶,预算就出在省下的服务器钱里。我在心里把涉及的所有环节都过了一遍。我发现这个服务的启动时间有三十秒,其中一半在扫包

优化的收益和它的复杂度需要一起算。我在心里点了点头。我在心里给这次的优化排了个优先级,先做收益大的。办公室安静得能听见键盘声

优化之前先测量,否则你优化的可能是错觉。我叹了口气,然后打开了编辑器。我把这个接口的统计维度加上了,瓶颈终于可视化。复盘会上我们把它列成了案例