基于zookeeper的任务处理框架思路

该片文章主要是记录下最近关于任务管理的一些想法吧,项目中使用的任务多了,有不少缺点,就想实现一个更好的,但目前只是有点思路,至于后路如何,估计会流产吧。

目前项目中的任务实现方式

任务分类:

  1. 非定时任务:需要实时判断是否有待执行任务,有则立即执行。例如发送验证码,当检查到有待发送时执行发送操作。
  2. 定时任务:在某个固定时间或按某个固定周期/间隔执行的任务。例如同步历史数据,每天23:59分执行。

针对非定时任务实现手段:

  1. 编写单独的main方法,创建shell脚本执行。
  2. 随项目启动,项目启动时调用某个init方法。
  3. 如果是并行任务,则创建多个进程。为了便于扩展,总进程数和当前分配的进程号等参数动态传递给main方法,在方法里面通过取模等实现不同进程间数据隔离。

目前我所在项目中普遍采用创建shell脚本执行。

缺点:

  1. 每编写一个任务,就需要编写shell,导致服务器上一堆.sh脚本,增加维护成本,每次上线都需要重启。
  2. 针对多进程任务,一般进程号等参数是编写在shell脚本中传递给main方法的。如果现在增加一个进程处理,由于要修改总进程数和指定当前进程的处理进程号,需要修改shell脚本要将之前的进程全部重启,影响很大;当然也可以将总进程号配置在数据库中,但是修改数据库的风险也不小。

针对定时任务实现手段:

  1. 使用Timer或scheduleThreadExcutor等原生java编写
  2. 使用Quarz等第三方框架。

我所在项目是使用的基于Quarz自己二次开发的框架,相比Quarz的优点是将任务的配置信息存放到数据库和缓存中了,如果需要修改某个数据库的执行时间,只需要修改数据库相关信息,然后刷新缓存就可以了,无需重启服务器。

但该方法也有缺点,如果是直接使用的配置文件,服务器还不支持热部署,那就比较麻烦了,每次修改都需要重启项目;即便是基于数据库的,修改数据库的风险也很大,且不说是否有权利修改等。

总体缺点:

  1. 修改配置不方便。
  2. 并行任务,扩展不方便。
  3. 管理困难,一堆sh脚本,维护成本高。
  4. 处理结果不透明,发生异常时,运维人员无法立刻知晓。
  5. 没有统计信息,无法具体知晓某个服务器或任务等执行了多少次,失败率是多少,成功率是多少。
  6. 针对定时任务,无法快速的触发一次。
  7. 无操作记录信息。

针对以上缺点,想开发一个方便管理,易于使用的任务处理框架,意在解决上述缺点。

基于zk的任务处理框架

使用该框架,对开发人员来说可能不会有什么显著影响,之前该写的业务逻辑还是需要写的,如果非要说有什么影响,那就是你可以直接写对应的业务代码,无需关心任务的具体处理流程。该框架主要是减轻运维人员的工作量,提供了很多直观的WEB功能,增加灵活性和扩展新。

理想情况:
开发人员下载客户端Jar包,实现相应接口,开始编写具体的业务逻辑代码,仅此而已,无需再关系任务的具体处理细节。运维人员登陆WEB端界面,设置某个Task的执行计划。OK,至此该Task就可以工作了。

WEB端功能:

  1. 创建,删除和修改Task。
  2. 创建Task时:
    2.1. 允许设置任务的执行计划,定时,固定周期,固定间隔等。
    2.2. 允许设置任务处理计划,并行处理,单独处理等。
    2.3. 允许指定具体服务器执行。
    2.4. 允许单次触发。
    2.5. 允许设置发生异常时的通知方式,短信,钉钉等。
  3. 统计功能,展示某个Task对应的服务器的执行情况,包括:执行次数,成功率等信息。
  4. 监控功能,上次执行情况。
  5. 操作记录,每一次操作都需要记录日志。
  6. 安全。功能授权等信息。

客户端JAR功能

  1. 提供相应的接口,供开发人员使用。
  2. 向ZK注册TASK。
  3. 针对并发任务,当新增服务器时,自动感知并更改该任务的服务集的入参,例如总进程数,每个服务分配的进程号等信息。
  4. 获取可用服务集,针对并发处理任务,分发出去。

原理:
主要是基于ZK提供的通知机制,在某个节点设置监视点,由服务端主动通知该节点下的所有客户端。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容