NewLife.AntJob 4.0.2024.1118-beta0612

This is a prerelease version of NewLife.AntJob.
There is a newer version of this package available.
See the version list below for details.
dotnet add package NewLife.AntJob --version 4.0.2024.1118-beta0612                
NuGet\Install-Package NewLife.AntJob -Version 4.0.2024.1118-beta0612                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="NewLife.AntJob" Version="4.0.2024.1118-beta0612" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add NewLife.AntJob --version 4.0.2024.1118-beta0612                
#r "nuget: NewLife.AntJob, 4.0.2024.1118-beta0612"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install NewLife.AntJob as a Cake Addin
#addin nuget:?package=NewLife.AntJob&version=4.0.2024.1118-beta0612&prerelease

// Install NewLife.AntJob as a Cake Tool
#tool nuget:?package=NewLife.AntJob&version=4.0.2024.1118-beta0612&prerelease                

NewLife.AntJob - 蚂蚁调度

GitHub top language GitHub License Nuget Downloads Nuget Nuget (with prereleases)

Nuget Downloads Nuget Nuget (with prereleases)

Ant

蚂蚁调度AntJob-分布式任务调度系统

分布式任务调度系统,纯NET打造的重量级大数据实时计算平台,万亿级调度经验积累!面向中小企业大数据分析场景。

开源地址:https://github.com/NewLifeX/AntJob
使用教程:https://newlifex.com/blood/antjob
体验地址:http://ant.newlifex.com

v4架构升级

v4版本是对v3版本的重构,主要是为了解决v3版本的一些问题,以及提供更多的功能。
v4版本亮点:

  1. []新增Http接入,由AntWeb提供调度服务,无需部署AntServer,满足轻量级项目需要。(进行中,等NewLife.Remoting提供WebsocketClient)
  2. 增强定时调度,支持指定Cron表达式,逐步替代Start+Step的恒定间隔定时调度
  3. []提前生成任务,提前下发给执行器,到时间后马上执行,提高任务执行时间精度。(待重新评估)
  4. []支持任务主动延迟,任务在执行中发现数据条件未满足时,可以向调度中心请求延迟一段时间后再执行,增加执行次数但不增加错误次数
  5. []扩充调度模式,常态化部署AntAgent,正式把Sql调度和C#调度加入主线,将来增加数据抽取和数据推送等多种调度模式

功能特点

AntJob的核心是蚂蚁算法把任意大数据拆分成为小块,采用蚂蚁搬家策略计算每一块!
(蚂蚁搬家,一个馒头掉在地上,众多小蚂蚁会把馒头掰成小块小块往家里般!)

该算法设计于2008年,最开始用于处理基金公司的短信/邮件/传真群发(每批两百万)和电话话费分析(上百种国际长途计费规则),数据量不算大,但是有一定复杂度,并且要求支持持续处理(实时计算)以及出错重试。

2016年在中通快递某产品项目中使用该算法进行大数据实时计算,成功挑战每日1200万的订单。并进一步发展衍生成为重量级实时计算平台,集分布式计算、集群调度、配置中心、负载均衡、故障转移、跨机房冗余、作业监控告警、百亿级数据清洗、超大Redis缓存(>2T)于一身,于2019年达到每年万亿级计算量(2019年双十一日订单量破亿)。

AntJob是开源简化版,仅提供分布式计算和集中调度能力,支持百亿级调度。

AntJob主要功能点:

  1. 作业处理器。每一个最小业务模块实现一个处理器类,用于处理这一类作业。例如同步数据表时,每张表写一个处理器类,并在调度中心注册一个作业,调度中心按照作业时间切片得到任务,然后把任务(主要包含时间区间)分派给各个计算节点上的处理器类执行。又如,每天汇总计算是一个作业,而每月汇总计算又是另一个作业;
  2. 任务上下文。作业处理器类实例化以后,将反复向调度中心申请任务来执行,每个任务的上下文核心数据是时间区间(数据调度)、时间点(定时调度)、消息体(消息调度)。调度中心记录任务处理结果;
  3. 数据切片。支持按照时间区间(如5秒)把大数据切分为小片,也即是数据调度,处理过最大单表60亿行;
  4. 定时调度。支持定时执行(秒级)指定业务逻辑,每个执行时间点得到一个任务;
  5. 任务重试。每个任务完整记录处理结果,失败任务在延迟一段时间后将会自动重新分派(可能由原节点或其它节点执行);
  6. 任务重置。支持批量重置已执行完成的任务,让其再次执行处理;
  7. 作业面板。在Web控制台上可查看每个应用所有作业的运行状态,或修改参数;
  8. 作业重置。调整作业参数,让其再次处理某段时间的任务数据,例如重算过去一个月的数据;

定时调度

以下源码位于 https://github.com/NewLifeX/AntJob/tree/master/Samples/HisAgent 

新建项目

新建.net core 3.1项目,从nuget引用 AntJob。实例化一个调度器Scheduler,配置网络提供者。

using System;
using AntJob;
using AntJob.Providers;
using NewLife.Log;

namespace HisAgent
{
    class Program
    {
        static void Main(string[] args)
        {
            XTrace.UseConsole();

            var set = AntSetting.Current;

            // 实例化调度器
            var sc = new Scheduler();

            // 使用分布式调度引擎替换默认的本地文件调度
            sc.Provider = new NetworkJobProvider
            {
                Server = set.Server,
                AppID = set.AppID,
                Secret = set.Secret,
            };

            // 添加作业处理器
            sc.Handlers.Add(new HelloJob());

            // 启动调度引擎,调度器内部多线程处理
            sc.Start();

            Console.WriteLine("OK!");
            Console.ReadKey();
        }
    }
}

然后添加第一个定时调度的作业处理器

using System;
using AntJob;

namespace HisAgent
{
    internal class HelloJob : Handler
    {
        public HelloJob()
        {
            // 今天零点开始,每10秒一次
            var job = Job;
            job.Time = DateTime.Today;
            job.Step = 10;
        }

        protected override Int32 Execute(JobContext ctx)
        {
            // 当前任务时间
            var time = ctx.Task.Time;
            WriteLog("新生命蚂蚁调度系统!当前任务时间:{0}", time);

            // 成功处理数据量
            return 1;
        }
    }
}

作业处理器必须继承自Handler,并且重写Execute实现业务逻辑。
我们这里的业务逻辑就是输出一行日志,其中的ctx.Task就是切分得到的任务上下文,Start是时间点。
构造函数中设定的开始时间和步进Step,仅用于首次注册作业到调度中心,后面就没有用处了。

为了编译观察,修改项目输出目录,在项目文件上点右键选“编辑项目文件”

<PropertyGroup>
  <OutputType>Exe</OutputType>
  <TargetFramework>netcoreapp3.1</TargetFramework>
  <AssemblyVersion>1.0.*</AssemblyVersion>
  <Deterministic>false</Deterministic>
  <OutputPath>..\..\Bin\HisAgent</OutputPath>
  <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
</PropertyGroup>

编译执行

代码能编译通过,先跑起来看看
image.png
可以看到,调度器首先连接 tcp://127.0.0.1:9999,其次 tcp://ant.newlifex.com:9999 ,而上面代码中并没有提及这两个地址。其实这就是调度中心地址,默认本地用于调试,如果链接失败再连接公开版调度中心,位于配置文件中:

/// <summary>蚂蚁配置。主要用于网络型调度系统</summary>
[Config("Ant")]
public class AntSetting : Config<AntSetting>
{
    #region 属性
    /// <summary>调试开关。默认false</summary>
    [Description("调试开关。默认false")]
    public Boolean Debug { get; set; }

    /// <summary>调度中心。逗号分隔多地址,主备架构</summary>
    [Description("调度中心。逗号分隔多地址,主备架构")]
    public String Server { get; set; } = "tcp://127.0.0.1:9999,tcp://ant.newlifex.com:9999";

    /// <summary>应用标识。调度中心以此隔离应用,默认当前应用</summary>
    [Description("应用标识。调度中心以此隔离应用,默认当前应用")]
    public String AppID { get; set; }

    /// <summary>应用密钥。</summary>
    [Description("应用密钥。")]
    public String Secret { get; set; }
    #endregion

    #region 方法
    /// <summary>重载</summary>
    protected override void OnLoaded()
    {
        if (AppID.IsNullOrEmpty())
        {
            var asm = Assembly.GetEntryAssembly();
            if (asm != null) AppID = asm.GetName().Name;
        }

        base.OnLoaded();
    }
    #endregion
}

其实上面Main函数中已经看到从配置文件里面读取Server+AppID+Secret,该配置类读取的配置文件在这:
image.png
AppID默认取本应用名,Secret由调度中心生成并下发。
调度中心默认打开自动注册AutoRegistry,任意应用登录时自动注册,省去人工配置应用账号的麻烦。
企业内部正式场景使用时,为安全起见,建议关闭自动注册。

再来看看前面跑起来的日志

21:33:08.470  1 N - 启动任务调度引擎[AntJob.Providers.NetworkJobProvider],作业[1]项,定时5秒
21:33:08.471  1 N - HelloJob 开始工作 False 区间(2020-04-09 00:00:00, 0001-01-01 00:00:00) Offset=15 Step=10 MaxTask=8
21:33:08.587  5 Y Job HelloJob 停止工作
21:33:09.467  7 Y T [180.174.185.180:53926]上线!X3

启动了调度引擎,带有一个作业;
作业HelloJob,就是我们通过 sc.Handlers.Add(new HelloJob())`` 添加进去的作业处理器实例;
HelloJob状态False,处于停止工作状态,那是因为作业注册后,默认都是停止状态,需要去web控制台配置参数后手工开启;
最后一个xxx上线,这是蚂蚁调度的Peers功能,可以探测得到当前应用下所有已连接节点的状态。当HisAgent部署于多个服务器时,每个进程都可以通过Peers得知其它节点的存在;

作业管理

不用关闭HistAgent客户端窗口,我们去线上web控制台看看 http://ant.newlifex.com/
image.png
image.png
可以看到应用节点在线,点击应用名进去作业面板
image.png
这就是我们的HelloJob作业,对应HisAgent中的HelloJob作业处理器。
它处于停用状态,下一次执行时间是 00:00:00 ,也就是今天零点,加上10秒步进,也远小于当前时间,因此,只要启用该作业,调度中心将会马上开始切分任务,并分派给客户都执行。
我们来点击红色叉叉,让它改变为启用状态
image.png
几秒后,客户端HisAgent欢快地跑起来!它正在以10秒间隔不断切分并执行任务。

刷新作业面板,可以看到,开始时间已经变为当前附近的时间,右边也有了执行次数。
image.png

点击作业名HelloJob,进去查看任务明细
image.png
任务切分后,插入作业任务表,此时状态为“就绪”,等待分发给客户端执行。
客户端执行后,向调度中心报告执行结果,可能“完成”,可能“错误”。
错误的任务,会在1分钟后,重新执行,最多连续错误10次。

双跑,沸腾吧,分布式计算

再开两个HisAgent进程,查看应用在线表,可以看到有三个节点在线。
image.png
HisAgent控制台中,可以看到各自都有机会分配了任务,每个任务有且仅有一个节点执行。

刷新作业HelloJob的任务列表,可以看到不同客户端执行了不同的任务。
image.png

设计概要

计算型应用(实现IJob)

计算应用->调度中心: app登录
note over 调度中心: app/secret
计算应用-->>调度中心: 注册作业

Web控制台->调度中心: 设置参数
Web控制台->调度中心: 启动作业

计算应用->调度中心: 申请作业分片
调度中心->计算应用: 返回分片
note over 计算应用: 多线程处理任务

计算应用-->调度中心: 上报局部状态
note over Web控制台: 作业状态看板
计算应用->调度中心: 处理成功
计算应用-->调度中心: 处理失败

系统架构

调度中心主从架构

计算应用->调度中心: 登录
调度中心->数据库: 连接
计算应用-->>调度中心2: 故障转移
调度中心2->数据库: 连接

计算应用2->调度中心: 登录
计算应用3->调度中心: 登录
计算应用4->调度中心: 登录

Web控制台-->调度中心: 监控

新生命项目矩阵

各项目默认支持net7.0/netstandard2.1/netstandard2.0/net4.61,旧版(2022.1225)支持net4.5/net4.0/net2.0

项目 年份 说明
基础组件 支撑其它中间件以及产品项目
NewLife.Core 2002 核心库,日志、配置、缓存、网络、序列化、APM性能追踪
NewLife.XCode 2005 大数据中间件,单表百亿级,MySql/SQLite/SqlServer/Oracle/TDengine/达梦,自动分表
NewLife.Net 2005 网络库,单机千万级吞吐率(2266万tps),单机百万级连接(400万Tcp)
NewLife.Remoting 2011 RPC通信框架,内网高吞吐或物联网硬件设备场景
NewLife.Cube 2010 魔方快速开发平台,集成了用户权限、SSO登录、OAuth服务端等,单表100亿级项目验证
NewLife.Agent 2008 服务管理组件,把应用安装成为操作系统守护进程,Windows服务、Linux的Systemd
NewLife.Zero 2020 Zero零代脚手架,基于NewLife组件生态的项目模板,Web、WebApi、Service
中间件 对接知名中间件平台
NewLife.Redis 2017 Redis客户端,微秒级延迟,百万级吞吐,丰富的消息队列,百亿级数据量项目验证
NewLife.RocketMQ 2018 RocketMQ纯托管客户端,支持Apache RocketMQ和阿里云消息队列,十亿级项目验
NewLife.MQTT 2019 物联网消息协议,MqttClient/MqttServer,客户端支持阿里云物联网
NewLife.IoT 2022 IoT标准库,定义物联网领域的各种通信协议标准规范
NewLife.Modbus 2022 ModbusTcp/ModbusRTU/ModbusASCII,基于IoT标准库实现,支持IoT平台和IoTEdge
NewLife.Siemens 2022 西门子PLC协议,基于IoT标准库实现,支持IoT平台和IoTEdge
NewLife.Map 2022 地图组件库,封装百度地图、高德地图和腾讯地图
NewLife.IP 2022 IP地址库,IP地址转物理地址
产品平台 产品平台级,编译部署即用,个性化自定义
AntJob 2019 蚂蚁调度,分布式大数据计算平台(实时/离线),蚂蚁搬家分片思想,万亿级数据量项目验证
Stardust 2018 星尘,分布式服务平台,节点管理、APM监控中心、配置中心、注册中心、发布中心
NewLife.ERP 2021 企业ERP,产品管理、客户管理、销售管理、供应商管理
CrazyCoder 2006 码神工具,众多开发者工具,网络、串口、加解密、正则表达式、Modbus
XProxy 2005 产品级反向代理,NAT代理、Http代理
HttpMeter 2022 Http压力测试工具
GitCandy 2015 Git源代码管理系统
SmartOS 2014 嵌入式操作系统,完全独立自主,支持ARM Cortex-M芯片架构
SmartA2 2019 嵌入式工业计算机,物联网边缘网关,高性能.NET6主机,应用于工业、农业、交通、医疗
菲凡物联FIoT 2020 物联网整体解决方案,建筑、环保、农业,软硬件及大数据分析一体化,单机十万级点位项目验证
NewLife.UWB 2020 厘米级(10~20cm)高精度室内定位,软硬件一体化,与其它系统联动,大型展厅项目验证

新生命开发团队

XCode

新生命团队(NewLife)成立于2002年,是新时代物联网行业解决方案提供者,致力于提供软硬件应用方案咨询、系统架构规划与开发服务。
团队主导的开源NewLife系列组件已被广泛应用于各行业,Nuget累计下载量高达60余万次。
团队开发的大数据核心组件NewLife.XCode、蚂蚁调度计算平台AntJob、星尘分布式平台Stardust、缓存队列组件NewLife.Redis以及物联网平台NewLife.IoT,均成功应用于电力、高校、互联网、电信、交通、物流、工控、医疗、文博等行业,为客户提供了大量先进、可靠、安全、高质量、易扩展的产品和系统集成服务。

我们将不断通过服务的持续改进,成为客户长期信赖的合作伙伴,通过不断的创新和发展,成为国内优秀的IT服务供应商。

新生命团队始于2002年,部分开源项目具有20年以上漫长历史,源码库保留有2010年以来所有修改记录
网站:https://newlifex.com
开源:https://github.com/newlifex
QQ群:1600800/1600838
微信公众号:
智能大石头

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 is compatible. 
.NET Framework net45 is compatible.  net451 was computed.  net452 was computed.  net46 was computed.  net461 is compatible.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (3)

Showing the top 3 NuGet packages that depend on NewLife.AntJob:

Package Downloads
NewLife.AntJob.Extensions

分布式任务调度系统,纯NET打造的重量级大数据实时计算平台,万亿级调度经验积累。

AntJob.Data

蚂蚁调度系统数据库结构

AntWeb

分布式任务调度系统,纯NET打造的重量级大数据实时计算平台,万亿级调度经验积累

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
4.0.2024.1216 165 12/16/2024
4.0.2024.1216-beta1630 86 12/16/2024
4.0.2024.1118-beta0612 102 11/18/2024
4.0.2024.1117-beta0610 95 11/17/2024
4.0.2024.1114-beta0628 100 11/14/2024
4.0.2024.1113-beta0612 104 11/13/2024
4.0.2024.1102-beta0141 106 11/2/2024
4.0.2024.1031-beta0136 101 10/31/2024
4.0.2024.1029-beta0734 91 10/29/2024
4.0.2024.1007-beta0822 97 10/7/2024
4.0.2024.904 296 9/4/2024
4.0.2024.903-beta0904 109 9/3/2024
4.0.2024.903-beta0049 124 9/3/2024
4.0.2024.806 257 8/6/2024
4.0.2024.806-beta0344 108 8/6/2024
4.0.2024.803-beta0004 75 8/3/2024
4.0.2024.731-beta0600 62 7/31/2024
4.0.2024.727-beta0005 94 7/27/2024
4.0.2024.726-beta0600 85 7/26/2024
4.0.2024.719-beta0802 128 7/19/2024
4.0.2024.712-beta0605 120 7/12/2024
4.0.2024.711 222 7/11/2024
4.0.2024.711-beta0721 121 7/11/2024
4.0.2024.709-beta0352 93 7/9/2024
4.0.2024.709-beta0006 100 7/9/2024
4.0.2024.629-beta0004 146 6/29/2024
4.0.2024.626-beta0140 131 6/26/2024
4.0.2024.625-beta0229 121 6/25/2024
4.0.2024.624-beta1246 112 6/24/2024
3.4.2024.408-beta0600 153 4/8/2024
3.4.2024.123-beta0113 159 1/23/2024
3.3.2024.620 165 6/20/2024
3.3.2023.1210-beta1339 222 12/10/2023
3.3.2023.1109-beta0414 186 11/9/2023
3.3.2023.1010-beta1159 136 10/10/2023
3.3.2023.814 520 8/14/2023
3.3.2023.814-beta1346 191 8/14/2023
3.3.2023.610-beta0452 213 6/10/2023
3.2.2023.402 510 4/2/2023
3.2.2023.402-beta0001 203 4/2/2023
3.2.2023.205 590 2/5/2023
3.2.2023.205-beta0747 207 2/5/2023
3.2.2022.1223-beta0426 226 12/23/2022
3.2.2022.1126-beta0200 213 11/26/2022
3.2.2022.1016-beta0306 223 10/16/2022
3.2.2022.1001 913 10/1/2022
3.2.2022.1001-beta1608 226 10/1/2022
3.1.2022.901 887 9/1/2022
3.1.2022.901-beta0749 148 9/1/2022
3.0.2022.501 1,041 5/1/2022
3.0.2022.501-beta0725 248 5/1/2022
3.0.2022.501-beta0721 241 5/1/2022
3.0.2022.406 826 4/6/2022
3.0.2022.406-beta1231 221 4/6/2022
3.0.2022.313-beta1243 266 3/13/2022
3.0.2022.312-beta1215 165 3/12/2022
3.0.2022.101 600 1/1/2022
2.4.2021.1204 662 12/4/2021
2.4.2021.1001 680 10/1/2021
2.4.2021.506 830 5/6/2021
2.4.2021.428-rc1 354 4/28/2021
2.3.2021.308 863 3/8/2021
2.2.2021.202 743 2/2/2021
2.2.2021.103 702 1/3/2021
2.1.2020.1208-beta2 447 12/8/2020
2.1.2020.1206-beta1 452 12/6/2020
2.1.2020.1201 651 12/1/2020
2.1.2020.1111-beta1 422 11/11/2020
2.1.2020.1002 749 10/2/2020
2.1.2020.805 911 8/3/2020
2.0.2020.804 792 8/3/2020
1.0.2020.409 809 4/9/2020

架构升级