我看了眼这个接口的平均耗时,长尾拉得很长。我打开记录从头到尾扫了一遍。最后发现是缓存和数据库的更新顺序反了。果然现实比段子更精彩

OOM 了,堆 dump 下来 3 个 G,打开一看全是缓存,缓存了三年前的数据。我把相关的记录都翻了出来做对照。我把这个接口的返回结构统一了,前端终于不用写两套解析。从此我多了一条团队规约

这个接口的入参有八种组合,文档里写了三种。我重新看了一遍手上的计划,把风险项标了出来。我打开了线程池的监控,队列已经堆了八百个任务。世界瞬间清净了

我看了眼这条链路的层级,深得看不到底。我打开了数据库的慢查询日志,发现有半张表都在扫。从此我多了一条团队规约

后端最怕的请求是「帮我查一下线上的数据」。我忽然觉得,这可能就是这一行的常态。我在心里给这个模块的可维护性打了个分,不太高。这大概就是程序员的人生吧

这个服务的超时设置是去年拍的,到现在没人动过。我愣了两秒,然后继续敲代码。我打开了慢查询日志,第一条就是那个熟悉的 SQL。幸好之前留了备份

后端最擅长的事是把一个简单需求做成一次架构升级。我忽然觉得,这可能就是这一行的常态。我在心里给这个版本的上线风险排了个序,排到了第一位。我把它写进了组内的避坑文档第一章

后端的成就感来自监控大盘上的曲线是平的。我停了一下,然后继续手上的活。我把连接数从 20 调到 100,服务立刻安静了。复盘会上我们把它列成了案例

我加了这个字段之后,下游有三个服务需要跟着改。我在心里把涉及的所有环节都过了一遍。我把这个接口的返回结构统一了,前端终于不用写两套解析。好在最后有惊无险

查了三小时的 bug,是缓存的锅;又查了三小时,还是缓存的锅。我默默打开了编辑器,准备一步步验证。我把这个服务的超时时间重设了,雪崩终于没有发生。连茶水间都安静了