天枢系统疑难排查

133 阅读3分钟

随着数据体量和代码量的增加,以前好端端的功能就成了定时炸弹,而且烧的还是无明火,不知道问题在哪,下面就列举一些bug

1,头条请求接口会出现阶段性没权限提示

  • 第一阶段:偶发,排查授权接口,去授权页面重新授权,恢复使用
  • 第二阶段:经常出现,但是排查授权接口,Redis存储,都没发现异常,只能手动授权,多打日志,继续观察
  • 第三阶段:影响到投手的使用和技术人员

忍无可忍

  1. 也是照常排查官方的授权接口,没出现问题,就是一句话比较在意:

image.png 2. 查看了对应日志,正常刷新,正常存储,也没发现问题 3. 去Redis客户端查看了一下存值:image.png,奇怪的是几个存储的值是一样的 4. 查看刷新代码:image.png,逻辑没问题 5. 查看授权页面image.png,查看授权回调接口 image.png,数据库记录image.png,都没发现啥

把能查的都查了,但还是不知道问题在哪,逻辑没问题,接口也没问题,想不通,想不通.处理到20:40发现还是搞不了,在肚子饿的情况下回家了,一边走一边在回忆这些信息.

初步判断是重新刷token导致旧token失效,但是代码全部查询了一遍,没发现第二处有地方刷新token,然后把流程在脑子里过了一遍,页面上手动授权->回调接口创建token->定时任务刷新token,只有刷新token才能刷新,再重新查看代码:image.png,发现这几个管家账户在Redis里面的token都是一样的,后面刷新的会把前面的token给覆盖掉,但是前面的已经存入Redis了,所以在10分钟有效期内还能使用,过了就不能用.

验证想法:

  1. 修改代码image.png分组刷新,避免覆盖刷新
  2. 再手动授权重新开始

观察一下午发现确实可以,手动触发定时任务也能正常使用

但是第二天又发现提示没权限,难受

  1. 梳理了一下流程,逻辑和方向是没错的
  2. 再过了一下进行修改的步骤,代码是没问题的,那应该就是手动授权姿势不对了
  3. 查看了一下授权页面,立马发现每个账号互相持有管家账号,如果全部勾选的话也是会出现token覆盖
  4. 重新手动授权,一个个授权,避免重复授权
  5. 观察了一周,未发现无权限问题

2,2023-08-11 字节拉取当天消耗接口没反应

第一反应是字节的token又出问题了?但是转念一想,不应该啊,查看了一下:

image.png,定时任务配置:image.png,说明定时任务有在执行,但是为啥今天的没有数据呢?查看代码:image.png,为了提升效率用了线程池并发去处理.梳理了一下这个接口的相关业务:

  1. 同一个接口,但是今天会拉取昨天的消耗进行校准
  2. 拉取昨天会全量账号拉取,方便统计出哪些账号实际投投放,当天拉取只用有投放账号拉取提升效率
  3. 只有一个线程池

问题找到了,应该是拉取昨天数据导致线程池耗尽,今天执行的数据,没资源执行,按业务拆分了线程池,分为昨天和今天线程池,观察了一周,未发现问题