web-timetableServerDown
业务场景
接上次说的服务器宕机排查,最近又出现了一次宕机,发现每次到上课前20min的时候服务器就会直接宕机处理不了
排查原因:
第一感觉是服务器磁盘又爆了,但是当时也才清理几天,后面去看top,发现CPU被干爆了、然后赶紧去查一下Java的日志、发现主要都是在调用python的爬虫服务占用了大量的线程,于是再去另一台服务器上面查询python的日志发现因为请求数远远大于python服务器能够承受的压力,所以很多请求一直积压或者处理错误,进一步导致Java调用的时候也会抛出一些异常以及请求超时。
解决思路:
每次打开小程序都会默认请求一次拉去最新课表,这样会因为课表请求太大导致的服务器宕机,于是我考虑了课表的以下几个特点来进行了一些优化:
- 老师调课可能性比较低,完全可以不需要每次都调用py去获取课表
- 服务器资源有限
- 小程序可以本地缓存
看到以上三点,毋庸置疑,我采取了小程序本地缓存策略、看看类似于天天课程表、wakeup等相关app都是采取的本地爬虫,爬取课表并存储到本地,并没有实现实时性更新,课表可变性也很低,所以完全可以本地缓存课表。
当用户每次打开小程序本地拉取三次缓存课表之后,再自动请求服务器更新课表并更新本地缓存,这样就可以很大程度上使得用户不会在同一时间段疯狂请求进一步降低服务器压力、在一定程度上也给用户提高了体验。
而用户需要强制刷新的话可以下拉刷新的方式,请求服务并更新本地缓存即可。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 HUT菜鸟小八的博客!
评论