前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >分布式系统中的定时任务全解(四)--补充

分布式系统中的定时任务全解(四)--补充

作者头像
九州暮云
发布2019-08-21 14:25:50
3660
发布2019-08-21 14:25:50
举报
文章被收录于专栏:九州牧云

概述

这个系列计划里面是只有3篇,但是在后续使用的过程中发现了新的问题,以及发现了一个很重要但是没有写上的部分。

遇到的问题是在服务器上运行时,有可能是服务器的CPU和内存资源比个人笔记本上的资源要强大,导致在服务器上采用第三篇 分布式系统中的定时任务全解(三)中说到的“如果我需要在job中重新设定下次触发的时间怎么办”中给出的方式,在日志中看到在reschedule的时候,同时出发最多接近10次。

第三篇没有写上的内容是,如何看zookeeper上的节点信息。

接下来一起看一下以上两个点。

使用elastic-job在job内部调用reschedule遇到的问题

在job内部调用reschedule时由于第三篇中说到的下次触发时间计算的问题,导致在reschedule的时刻任务被同时触发了多次,尤其是当服务器空闲资源比较多,或者服务器资源比较强大的时候,触发的次数会更多。

对于这个问题,我们期初使用的是Thread.sleep(1)的方式规避,最好的情况下定时任务1分钟能够执行60,000次。如果用于处理订单的话,这个处理能力对于小型系统来说相当好了,足够用了。

但是,同时触发的现象确实感觉十分不舒服,并且会导致很多无效日志的输出,造成日志体积增大。

由于当前我们的系统规模较小,订单量也小,使用了Thread.sleep(500)的激进方案,这样算下来1分钟内最多最好也就能够处理120次,虽然这个数字很小,但是对我们当前情况来说足够用。

对于这个问题,如果仍然基于elastic-job框架最扩展的话,我们想可以这样处理:借助elastic-job的分片机制,在把待处理订单号插入队列中时添加不同的序列标记,可以和分片数相同。那么总体处理能力就会和服务器的数量成正比:120xN次(N是服务器数量)。这就达到了处理能力的水平扩展。

我如何知道自己任务的执行情况和任务节点的状态信息

这一点有两种方法,一个就是部署一个elastic-job的console服务,通过网页端查看任务的执行情况和任务节点的状态信息。

如果觉得不熟一套console服务必要性不大,也可以自己到zookeeper上查看各个节点的状态。zookeeper有一个eclispe的插件,可以直接在eclipse里面看到zk的节点数据。

安装插件可以参考这篇文章:http://chinazzlm.blog.163.com/blog/static/1618435372012812453923/

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用elastic-job在job内部调用reschedule遇到的问题
  • 我如何知道自己任务的执行情况和任务节点的状态信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档