美文网首页
多进程任务熔断处理

多进程任务熔断处理

作者: e80e074de5f8 | 来源:发表于2019-01-16 10:23 被阅读0次

背景

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

问题

当部署了多个相应的应用时(假设不同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: 若考虑到单进程多线程环境下, 只需要程序自己做熔断处理就可以了。 提示: 搞一个静态变量存储在内存中,区别任务是否正在执行。

相关文章

  • 多进程任务熔断处理

    背景 程序开发中设定了一个定时任务,任务执行时会去操作数据库。 问题 当部署了多个相应的应用时(假设不同ip), ...

  • 【第53天】python全栈从入门到放弃

    1进程之间共享内存 2进程池的异步任务处理,返回1-10000之间的数字 3进程池的同步任务处理 4 多进程做任务...

  • 协程实现原理

    [toc] 进程/线程/协程 背景 单任务处理:早期的计算机是什么样的, 卡带机? 真空管? 多任务处理系统: 多...

  • 网络素养

    第二章 专业名词 多任务处理 :多任务处理是指系统可同时运行多个进程,常用于电脑的操作系统。文中指的是人同时处理多...

  • 进程池

    初识进程池 场景一:主进程不会等进程池内部的任务执行完毕后再执行,而是直接执行,进程池内部的任务,自己处理 场景二...

  • PHP 多进程处理任务

    PHP 多进程处理任务 pcntl 模块(非 Unix 类系统不支持此模块) 一个 PHP 多进程简单例子大概是这...

  • python并行设计的一个失误

    不要在进程处理任务时通过process_id来判断哪个进程应该执行任务,因为不知道task会被分配到哪个进程 el...

  • 进程/线程

    进程和线程 多任务的介绍 进程的介绍 多进程完成多任务 获取进程编号 进程的注意点 文件夹高并发copy器 1、多...

  • 简单了解进程、线程、协程

    当单任务不能满足工作的需要,只是需要使用多任务,多任务分为多进程,多线程,多协程 先有进程,进程创建线程,线程依附...

  • SaaS应用12原则:(十二)管理进程

    后台管理任务当作一次性进程运行 进程构成(process formation)是指用来处理应用的常规业务(比如处理...

网友评论

      本文标题:多进程任务熔断处理

      本文链接:https://www.haomeiwen.com/subject/txbpdqtx.html