热门标签 | 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


推荐阅读
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • Python 程序转换为 EXE 文件:详细解析 .py 脚本打包成独立可执行文件的方法与技巧
    在开发了几个简单的爬虫 Python 程序后,我决定将其封装成独立的可执行文件以便于分发和使用。为了实现这一目标,首先需要解决的是如何将 Python 脚本转换为 EXE 文件。在这个过程中,我选择了 Qt 作为 GUI 框架,因为之前对此并不熟悉,希望通过这个项目进一步学习和掌握 Qt 的基本用法。本文将详细介绍从 .py 脚本到 EXE 文件的整个过程,包括所需工具、具体步骤以及常见问题的解决方案。 ... [详细]
  • 在开发过程中,我最初也依赖于功能全面但操作繁琐的集成开发环境(IDE),如Borland Delphi 和 Microsoft Visual Studio。然而,随着对高效开发的追求,我逐渐转向了更加轻量级和灵活的工具组合。通过 CLIfe,我构建了一个高度定制化的开发环境,不仅提高了代码编写效率,还简化了项目管理流程。这一配置结合了多种强大的命令行工具和插件,使我在日常开发中能够更加得心应手。 ... [详细]
  • 本文探讨了 Kafka 集群的高效部署与优化策略。首先介绍了 Kafka 的下载与安装步骤,包括从官方网站获取最新版本的压缩包并进行解压。随后详细讨论了集群配置的最佳实践,涵盖节点选择、网络优化和性能调优等方面,旨在提升系统的稳定性和处理能力。此外,还提供了常见的故障排查方法和监控方案,帮助运维人员更好地管理和维护 Kafka 集群。 ... [详细]
  • 技术日志:Ansible的安装及模块管理详解 ... [详细]
  • 在Windows Server 2003环境中配置PHP脚本的定时执行方法:虽然在Linux系统中编写和调度PHP脚本较为常见,但在Windows Server 2003上同样可以通过任务计划程序来实现这一功能。本文将详细介绍如何在该操作系统中设置PHP脚本的自动执行,并提供具体的步骤和注意事项,帮助用户顺利完成配置。 ... [详细]
  • 利用 Python Paramiko 库在远程服务器上高效执行 Shell 脚本的方法与技巧 ... [详细]
  • 在IIS环境中部署Go API应用:Golang面试指南
    这篇文章介绍了在IIS上部署Go API项目的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着 ... [详细]
  • 我有一个从C项目编译的.o文件,该文件引用了名为init_static_pool ... [详细]
  • 用阿里云的免费 SSL 证书让网站从 HTTP 换成 HTTPS
    HTTP协议是不加密传输数据的,也就是用户跟你的网站之间传递数据有可能在途中被截获,破解传递的真实内容,所以使用不加密的HTTP的网站是不 ... [详细]
  • 在Windows系统中安装TensorFlow GPU版的详细指南与常见问题解决
    在Windows系统中安装TensorFlow GPU版是许多深度学习初学者面临的挑战。本文详细介绍了安装过程中的每一个步骤,并针对常见的问题提供了有效的解决方案。通过本文的指导,读者可以顺利地完成安装并避免常见的陷阱。 ... [详细]
  • Windows 7集成IE11:离线安装包与系统补丁全面解析
    在将Internet Explorer 11集成到Windows 7系统中时,需预先安装多个关键系统补丁,包括KB2731771、KB2786081、KB2834140、KB2670838、KB2729094和KB2888049。这些补丁不仅确保了系统的兼容性和稳定性,还为IE11的顺利安装提供了必要的支持。此外,建议在安装过程中遵循官方文档中的步骤,以避免潜在的兼容性问题。 ... [详细]
  • 遇到电脑启动时显示0x000000ED蓝屏错误代码应如何处理?
    遇到电脑启动时显示0x000000ED蓝屏错误代码应如何处理? ... [详细]
  • 在Ubuntu系统中配置Python环境变量是确保项目顺利运行的关键步骤。本文介绍了如何将Windows上的Django项目迁移到Ubuntu,并解决因虚拟环境导致的模块缺失问题。通过详细的操作指南,帮助读者正确配置虚拟环境,确保所有第三方库都能被正确识别和使用。此外,还提供了一些实用的技巧,如如何检查环境变量配置是否正确,以及如何在多个虚拟环境之间切换。 ... [详细]
  • 如何在服务器后台运行PHP脚本?
    如何在服务器后台运行PHP脚本? ... [详细]
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社区 版权所有