背景:
到货提醒、商品列表缓存服务等,需要定时任务离线计算。实现定时任务的方法跟正常线上业务调用的为相同的方法,且为同一模块。为避免离线任务对线上业务造成影响,采用机器注册到不同zk的方式来进行服务隔离。
由此产生了以下问题:
- 离线任务较多,且调用量较大,导致下游压力较大
- 大部分的机器用来处理离线任务,造成资源浪费
- 机器调用量较大,出现线程池打满,任务排队的现象
- 服务注册和消费,因为使用的为同一项目,采用修改host的方式来进行了隔离。
解决问题:
针对问题1、2、3,随着APP版本的升级和服务架构的升级,一些支撑老服务的定时任务已经没有使用场景了,进行了下线操作,但是这还是没有从根本上解决问题。
采用了任务打散,调用到脚本集群上,解决单一脚本机器负载较高的问题
使用mq进行削峰
服务隔离的想法:
- 打包机新增job profile,将业务和脚本进行分开
- 将只提供给脚本服务使用的服务,增加job关键字,比如xxxJobService
- 使用服务路由的特性进行业务隔离,解决对机器host的依赖