解决抖音获取签名及并发的问题
# 概况
有一批uid,需要每隔5分钟,查看一次他们的基本信息,如点赞、评论等
# 分析
- 按照之前的思路,先通过puppeteer获取签名,然后拿到签名之后再去循环视频列表,拿到最近7天的数据,存储起来
- 跑起来之后,因为是串行,一个个执行,花费的时间较长,超过5分钟了, 还有很多没执行,没有达到目标效果,需解决
- 解决的思路:把串行改成并行,加快执行速度
- 并行20, 前面没问题,执行100+数据后,拿不到签名数据了
- 并行50,前面没问题,下一次执行一个签名都拿不到
- 并行100,拿不到签名
- 本地打开用户主页, 空白
- 各种尝试~奔溃~烧脑
- 经过并行的改造,发现在100+数据还算是比较正常的,在一定时间内超过这个数量,基本上就拿不到签名了, 什么原因也不是很清楚, 猜测是访问拦截了,都到不了服务器
- 怎么样在并行和有效结果上做更好的处理呢?
# 解决
- 解决第一个问题, 请求频繁的问题
- 不能贪心,一下子请求很多,会造成并发很大,容易被拒绝,还是每次访问5个为佳,依次访问
- 从总体上分段执行,将目标uid分组,每100个为一组, 每组间隔1分钟执行
- 解决有效结果
- 经过摸索,发现签名是存在有效期的, 大概在10-20分钟左右
- 把获取签名和获取视频分开,获取的签名存入数据库中,在获取签名的时候从数据库直接取出签名,每隔20分钟执行一次签名更新
- 获取签名和获取视频最好分ip执行,这样会避免某ip 请求过多
- 即使在这样的情况下依然会存在失败, 增加失败容错机制,重复3次获取, 3次后则丢弃
# 总结
经过以上两步,有效的提高了执行速度和成本,既能获取有效数据,又能缩短时间
# 核心点:
- 签名分离和存储
- 分组执行,间隔停顿
上次更新: 2021/12/19, 18:05:42