一种轻量级定时任务实现

一种,轻量级,定时,任务,实现 · 浏览次数 : 172

小编点评

## 轻量级分布式定时任务实现方案 **目的:** 改善TBSchedule的稳定性,解决偶发异常的问题。 **方案:** 1. **集群化:** 使用多个服务器部署TBSchedule,实现分布式处理。 2. **动态服务扩容:** 通过动态调整线程数,适应系统负载。 3. ** Redis 注册中心:** 使用Redis缓存任务信息,提高效率。 4. **线程池管理:** 使用线程池,减少创建和回收线程的成本。 5. **自动任务处理:** 通过自动方法,处理TBSchedule内部方法。 6. **动态线程数:** 支持动态调整线程数,提高系统处理能力。 7. **降级机制:** 通过应急预案,支持手动或自动降级。 8. **多线程配置:** 支持多个任务线程数的设置。 **关键技术:** * **TBSchedule:** 分布式定时任务框架 * **Redis:** 缓存中心 * **Thread池:** 线程池管理 * **Auto-task:** 自动任务处理 * **Quartz:** 替代TBSchedule的定时任务框架 * **Ducc:** 支持手动和自动降级 **优点:** * **稳定性:** 提升TBSchedule的稳定性,解决偶发异常。 * **效率:** 通过动态配置和线程池,提升效率。 * **可扩展性:** 通过动态添加节点,满足需求增长。 * **简化维护:** 通过代码调整,可轻松维护。 * **降低成本:** 通过轻量级设计,降低改造成本。 **注意:** * **单系统稳定性:** 由于每个系统独立运行,需要确保单系统稳定性。 * **线程安全:** 确保线程安全和代码可读性。 * **监控与报警:** 建立监控系统,及时发现和处理异常。

正文

现在市面上有各式各样的分布式定时任务,每个都有其独特的特点,我们这边的项目因为一开始使用的是分布式开源调度框架TBSchedule,但是这个框架依赖ZK,由于ZK的不稳定性和项目老旧无人维护,导致我们的定时任务会偶发出现异常,比如:任务停止、任务项丢失、任务不执行等;

每逢618大促,在单量很大的情况下,如果出现定时任务异常,会导致订单的积压,进而导致订单的履约时效,严重影响商家的履约效率,造成订单取消、客户投诉等;

为了保障整体的稳定性,在改动成本比较小的情况下,达到快速实现,稳定运行,预防这种偶发异常,我们实现了一种轻量级定时任务来进行无缝隙降级;

我们使用的TBSchedule特性:

1.支持集群、分布式

2.灵活的任务分片

3.动态的服务扩容和资源回收

4.支持单个任务线程数的设置和实时调整

我们要实现的功能

1.为了保障单个系统的稳定性,我们去中心化,单独调度自己的系统的任务

2.为了避免ZK的不稳定性,我们通过redis实现注册中心和动态分片功能

3.避免使用timer,改用线程池来控制线程

4.为了减少改造成本,不需要业务系统改动代码,我们自动实现TBSchedule内部方法,保持原来的入参

5.为了支持更多任务,支持动态调整线程数,增加系统的处理能力

方案实现

结果:

1.通过xml配置,引入jar包方式,实现快速接入

2.基本实现TBSchedule主要功能,基础方法和TBSchedule保持一致,无切换成本

3.通过ducc配置,配合应急预案,支持手动或者自动进行降级,无缝衔接,可随时随地操作,为大促保驾护航

4.线上已运行,动态分片稳定,心跳检查及时,随时可降级,帮助订单系统避免多次zk波动带来的影响

通过轻量级的降级,搭配应急预案触发,保障大促的稳定运行!!!!!

后续计划:

1.改用Quartz作为定时任务的触发器(也可搭配easyjob),支持更多形式的定时配置,完美替代TBSchedule;

2.提供可视化界面监控任务的运行情况

作者:京东零售 马成龙

来源:京东云开发者社区

与一种轻量级定时任务实现相似的内容:

一种轻量级定时任务实现

为了保障整体的稳定性,在改动成本比较小的情况下,达到快速实现,稳定运行,预防这种偶发异常,我们实现了一种轻量级定时任务来进行无缝隙降级

XXL-JOB定时任务框架(Oracle定制版)

xxl-job是一个轻量级、易扩展的分布式任务调度平台,能够快速开发和简单学习。开放源代码并被多家公司线上产品使用,开箱即用。尽管其确实非常好用,但我在工作中使用的是Oracle数据库,因为xxl-job是针对MySQL设计的,所以使用起来需要进行一些魔改。为了方便后人使用,我已经创建了许多SQL和自增序列,并将其整合到了xxl-job-2.3.0版本中,环境已经在线上正常使用了,所以可以放心使用

国产 Web 组态软件 TopStack V5.0 发布

简介 TopStack 是一款轻量型 Web 组态软件,提供设备数据采集、定时任务、控制策略、联动控制、设备告警、设备维护管理、设备绩效管理、能源管理、组态开发、报表开发等核心功能。支持移动端访问,支持本地部署,可帮助企业从无到有快速搭建工业物联网平台。 一些大型互联网公司提供的物联网平台,其中的很

[转帖]【Redis】Redis中使用Lua脚本

Lua是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。 Lua具体语法参考:https://www.runoob.com/lua/lua-tutorial.html 脚本的原子性 Redis使用单个Lua解释器去运

【OpenVINO™】基于 C# 和 OpenVINO™ 部署 Blazeface 模型实现人脸检测

Blazeface模型是Google推出的一款专为移动GPU推理量身定制的轻量级且性能卓越的人脸检测器,BlazeFace 在旗舰移动设备上以200-1000 + FPS的速度运行。 在本文中,我们将使用OpenVINO™ C# API 部署 Blazeface 实现人脸检测。

C#.Net筑基-类型系统②常见类型

结构体 struct 是一种用户自定义的值类型,常用于定义一些简单(轻量)的数据结构。对于一些局部使用的数据结构,优先使用结构体,效率要高很多。

Asp-Net-Core学习笔记:gRPC快速入门

## 前言 此前,我在做跨语言调用时,用的是 Facebook 的 Thrift,挺轻量的,还不错。 >Thrift是一种接口描述语言和二进制通讯协议,它被用来定义和创建跨语言的服务。它被当作一个远程过程调用(RPC)框架来使用,是由Facebook为“大规模跨语言服务开发”而开发的。它通过一个代码

一文带你实现云上部署轻量化定制表单Docker

本文分享自华为云社区 《【华为云云耀云服务器L实例评测|云原生】自定制轻量化表单Docker快速部署云耀云服务器 | 玩转华为云》,作者:计算机魔术师。 华为云的云耀云服务器L实例备受推崇,以其高效、可靠和安全的基础设施服务而闻名。本文将为展示在该服务器上部署轻量化定制表单服务,这是一款基于pywe

自己动手实现一个轻量无负担的任务调度ScheduleTask

至于任务调度这个基础功能,重要性不言而喻,大多数业务系统都会用到,世面上有很多成熟的三方库比如Quartz,Hangfire,Coravel 这里我们不讨论三方的库如何使用 而是从0开始自己制作一个简易的任务调度 技术栈用到了:BackgroundService和NCrontab库 第一步我们定义一

Web Service和Web API理解和使用场景

Web Service 理解:Web Service 是一种基于网络的服务,它使用标准化的消息传递协议,最典型的是基于 SOAP(Simple Object Access Protocol)协议。SOAP 使用 XML 格式封装数据,定义了消息的结构和传输方式,因此它是一个重量级的解决方案。Web