多进程任务熔断处理

背景

程序开发中设定了一个定时任务,任务执行时会去操作数据库。

问题

当部署了多个相应的应用时(假设不同ip), 多个应用就相当于多个进程,若多个进程同时触发定时任务,会造成资源浪费(同一件事情多个人干)、不可估算的错误(多个人同时操作数据库,比方说update)等问题

解决方案

创建一个多进程锁表t_process_lock,记录当前任务名name,应用服务的ip,更新时间updatetime(更新时间作为心跳依据)

针对自己ip

  1. 当定时任务触发时,检查表t_process_lock是否存在该任务名name,若不存在,则插入name、ip、updatetime 表示此ip已占用, 其他ip不允许访问
  2. 当定时任务触发时,检查表t_process_lock是否存在该任务名name,若存在,则检查表ip和自己服务的ip是否一致,若一致则更新updatetime,并执行任务。

针对其他ip的处理

  1. 当定时任务触发时,检查表t_process_lock是否存在该任务名name,若存在,则检查表ip和自己服务的ip是否一致,若不一致,则获取表数据的updatetime,跟数据库的当前时间now 做减法。 得到一个心跳间隔时间ping。 假设定时任务是10分钟进行一次,那么若ping>15分钟(因任务执行需要消耗时间,具体看程序耗时,本案例任务好耗时1分钟,允许5分钟降低误差), 则可以认为表ip已经挂了(或者宕机)
  2. 此时新ip可以插入name、ip、updatetime 表示新ip已占用, 其他ip不允许访问

ps: 若考虑到单进程多线程环境下, 只需要程序自己做熔断处理就可以了。 提示: 搞一个静态变量存储在内存中,区别任务是否正在执行。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 文/tangsl(简书作者) 原文链接:http://www.jianshu.com/p/2b993a4b913e...
    西葫芦炒胖子阅读 3,831评论 0 5
  • 又来到了一个老生常谈的问题,应用层软件开发的程序员要不要了解和深入学习操作系统呢? 今天就这个问题开始,来谈谈操...
    tangsl阅读 4,191评论 0 23
  • 1.内存的页面置换算法 (1)最佳置换算法(OPT)(理想置换算法):从主存中移出永远不再需要的页面;如无这样的...
    杰伦哎呦哎呦阅读 3,370评论 1 9
  • 第一天 7月13日OCP笔记: Oracle Ocp11g准备资料: OracleFundmentals 书 管理...
    fjxCode阅读 2,845评论 0 4
  • 当黄兴笨拙的抽出蛋糕,我们都表示对昌迪定的水果蛋糕审美不满。这个无关乎任何荷尔蒙迹象的蛋糕不如大鹏上次的乳房蛋...
    那片回忆阅读 256评论 0 0