热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

包含crongolang的词条

本文目录一览:1、基于gocron实现的定时任务服务降级方案2、go中使用cmd与cron3、gin结合cron,实现定时任务基于gocron实现的定时任务服务降级方案

本文目录一览:


  • 1、基于gocron实现的定时任务服务降级方案


  • 2、go中使用cmd与cron


  • 3、gin结合cron,实现定时任务

基于gocron实现的定时任务服务降级方案

    目前APP业务中启用的定时任务已达到400+,目前管理比较混乱,很多任务运行时占用服务器资源巨大,其中不乏一些非紧急的任务,平时并不会有太大影响,但是当流量高峰来临时,这些定时任务可能会成为压死骆驼的最后一根稻草。为了避免出现这样的问题,我们通常会在高流量来之前去调整一些定时任务的执行间隔时间或者暂停一些不影响服务的定时任务。这样做的弊端是工作量很大,同时难免会有遗漏。由此衍生除了对任务分级的诉求。对任务分级后,高峰流量时,可视情况降级相关等级的定时任务。

        PS:设计核心流程的任务等,如支付回调

        PS:任务中设计到事务等

    基于gocron的任务节点做任务分级,不同级别的任务对应不同的gocron节点。如下图:

    把三级任务放在三级节点上跑,如下图:

    以此类推,不同级别的任务跑在对应级别的节点上。

    当流量高峰来临时,我们想通过停掉所有三级任务来实现快速降级,而这个操作仅仅需要关闭对应节点的连接即可。如下图

PS:这个操作同时会停止所有正在运行的任务

举个例子:目前我的三级任务节点上运行了一个同步数据的任务(预计5分钟左右能执行完),当我把三级任务节点关闭时,这个任务会直接失败,在节点对应的机器上我们可以看到所有进程也被直接kill掉了,即使我的任务是多进程在跑,相应的子进程也会被kill掉。如下:

当前正在服务的三级节点-asgard三级定时任务

当前正在节点-asgard三级定时任务上运行的任务-商品数据整合同步搜索个推库

节点服务器上正在运行的进程

这时候我们关闭asgard三级定时任务这个节点

可以看到任务直接执行失败了

同时,节点服务器上的进程也被kill掉了

    由于二级任务可能涉及到事务等操作,非万分紧急情况下不能直接终止,以免导致脏数据的产生。对于这种任务的降级我们不能直接通过节点的方式停止任务。可以通过关闭任务的方式停止。如下:

PS:关闭任务的操作会等当前的任务执行完成再关闭,不会对当前任务产生任何影响

举个例子:

还拿asgard三级定时任务这个节点来看,目前这个节点在链接状态

这个节点下跑了一个任务

同样的,节点服务器上有对应的进程在跑着

这时候,我们关闭这个任务

我们可以看到,关闭这个任务,不会影响正在执行的任务

节点对应的服务器上的任务也正常在跑

PS:这个关闭任务对应的是,完成当前任务后不再执行新的任务。

    1、基于gocron的任务节点对任务做分级处理

    2、一、二、三级任务的划分

    3、服务降级的两种方式:关闭节点关闭任务

go中使用cmd与cron

/bin/bash -c "ls -l"

cmd-golang-pipe

pipe()创建2个文件描述符,fd[0]可读,fd[1]可写

fork() 创建子进程 fd[1]被继承到子进程

dup2() 重定向子进程 stdout/stderr到fd[1]

exec() 在当前进程内,加载并执行二进制程序

模拟一下cmd调用

模拟调用cmd时,杀死bash进程

go开源Cronexpr库

Parse() 解析与校验Cron表达式

Next() 根据当前时间,计算下一次调度时间

模拟一下cron调用

执行结果

模拟多个cron调用

执行结果

gin结合cron,实现定时任务

cron需要进行初始化,在gin的main中进行,然后后面的定时任务,使用addjob,addjob会返回一个jobid,后面关闭时,可以使用这个id去关闭。

1.main.go中初始化cron

2.InitCron,返回一个Cron类型

3.使用cj进行添加任务,任务会返回一个id,因为调用的时候会使用协程,将id通过channel返回

4.将id回收,已被删除定时任务时使用。另外实现mqttJob需要实现Run接口,addjob才能运行

5.删除定时任务,cj为gin初始化的new cron


推荐阅读
  • 我正在尝试解析具有已知格式的文本文件,但是每一行都不是100%一致。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • Ubuntu安装常用软件详细步骤
    目录1.GoogleChrome浏览器2.搜狗拼音输入法3.Pycharm4.Clion5.其他软件1.GoogleChrome浏览器通过直接下载安装GoogleChro ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 本文介绍了Composer依赖管理的重要性及使用方法。对于现代语言而言,包管理器是标配,而Composer作为PHP的包管理器,解决了PEAR的问题,并且使用简单,方便提交自己的包。文章还提到了使用Composer能够避免各种include的问题,避免命名空间冲突,并且能够方便地安装升级扩展包。 ... [详细]
  • 本文总结了Linux下多线程执行shell脚本的4种方法,包括切换到工作目录执行、使用绝对路径执行、直接使用bash或sh执行。同时介绍了为什么需要加上"./"来执行脚本的原因。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • EzPP 0.2发布,新增YAML布局渲染功能
    EzPP发布了0.2.1版本,新增了YAML布局渲染功能,可以将YAML文件渲染为图片,并且可以复用YAML作为模版,通过传递不同参数生成不同的图片。这个功能可以用于绘制Logo、封面或其他图片,让用户不需要安装或卸载Photoshop。文章还提供了一个入门例子,介绍了使用ezpp的基本渲染方法,以及如何使用canvas、text类元素、自定义字体等。 ... [详细]
  • 在本教程中,我们将看到如何使用FLASK制作第一个用于机器学习模型的RESTAPI。我们将从创建机器学习模型开始。然后,我们将看到使用Flask创建AP ... [详细]
  • 这个问题困扰了我两天,卸载Dr.COM客户端(我们学校上网要装这个客户端登陆服务器,以后只能在网页里输入用户名和密码了),问题解决了。问题的现象:在实验室机台式机上安装openfire和sp ... [详细]
  • 对于一般的扩展包,我们一般直接pipinstallxxx即可安装,但是unrar直接安装后,发现并不能通过Python程序实现解压的功能& ... [详细]
  • OpenEdge已经更名为Baetyl。OpenEdge是百度云发布的国内首个开源边缘计算产品,可将云计算能力拓展至用户现场,提供临时离线、低延时的计算 ... [详细]
author-avatar
处女冰水洗尘
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有