使用 Golang 开发的分布式任务调度系统 Crocodile,上次发还不支持多调度节点,经过一段时间的改造终于支持了,快来看看 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
labulaka521
V2EX    Go 编程语言

使用 Golang 开发的分布式任务调度系统 Crocodile,上次发还不支持多调度节点,经过一段时间的改造终于支持了,快来看看

  •  1
     
  •   labulaka521
    labulakalia 2020-04-18 07:11:47 +08:00 6551 次点击
    这是一个创建于 2011 天前的主题,其中的信息可能已经有所发展或是发生改变。

    基于 Golang 开发的分布式任务调度系统,支持 http 请求、运行 golang 、python 、shell 等调度任务

    你可以在这里看到代码地址

    代码地址

    你可以在这看看截屏展示

    <details> <summary>点击我</summary>

    </details>

    这是一些特性介绍

    • 在 Web 节点对任务进行增加、修改、删除、克隆、运行任务、终止等操作
    • 实时查看正在运行的任务和任务的实时日志
    • 多种任务类型:
      • 执行http请求任务
      • 运行shellpythongolang代码(当然其他语言也可以支持,如需要请提出)
    • 父、子任务:
      当设置了父任务或者子任务后,先会运行父任务->主任务->子任务,任意任务出错后会立即中断整个流程,还可以设置父任务或子任务并行或者串行运行
    • 调度算法:
      支持四种调度算法随机、轮训、Worker 权重、Worker 最少任务数来调用 Worker 运行任务,
    • 自定义报警策略:
      可以设置当任务成功失败运行完成发送通知给多个用户
      设置任务的返回码或者返回内容来比较任务的实际返回码或者返回内容是否相同来判断任务运行成功或者,code 任务默认为 0,http 任务默认为 200
    • 主机组:
      一个任务只可以绑定到任意一个主机组,任务的运行会通过任务的路由策略来选取这个主机组中的一个任务来运行任务
    • 主机:
      一个主机组可以绑定多个主机,主机是实际运行任务的节点,注册后调度中心自动发现
    • 安全策略
      证书加密加密通讯数据
      访问令牌
    • 任务的日志管理,清理日志
    • 报警通知支持平台
      • 邮件
      • 企业微信
      • 钉钉
      • Slack Channel
      • Telegram Bot
      • WebHook URL
    • 详细的任务审计功能
      对用户的所有对数据改变的操作都会记录下来
    • 权限控制
      有三种用户类型
      • 管理员
        拥有所有操作权限,
      • 普通用户 可以创建新的任务、主机组,只可以自已创建的任务或主机组进行操作,不能查看审计记录、所有用户
      • 访客
        只有查看的权限、无任何操作修改权限,不能查看审计记录、所有用户
    • 多调度中心来避免单点故障
    • 由于多调度中心所以暂时移除了对 sqlite3 的支持

    如果你想看开发进度的话可以看看这里
    Trello_Crocodile

    既然看到这里了那我就恬不知耻求职了,想找一个 Golang 后端开发的工作,如果你有合适的工作介绍给我可以能不能留下一个联系方式或 jd,非常感谢。

    第 1 条附言    2020-04-18 14:34:44 +08:00
    点个 star 哈
    第 2 条附言    2020-04-19 11:59:18 +08:00
    现在已经支持 docker-compose 可以快速体验下,并且支持 nodejs 和 python2
    34 条回复    2020-04-25 21:41:28 +08:00
    pypy
        1
    pypy  
       2020-04-18 09:51:29 +08:00
    很好的项目,支持一下!浏览了文档,也看了 trello (在 trello 中没有找到设计图),有个疑问想请教一下:
    项目是如何实现分布式调度的?具体指的是一致性问题、幂等、failover 等。项目中似乎也没有用到 zookeeper 或 etcd,不知道具体是怎么实现的呢?谢谢。
    a852695
        2
    a852695  
       2020-04-18 09:56:15 +08:00
    很好的项目,特别是任务调度这块的设计比 gocro 功能要完善一些
    sanchez0623
        3
    sanchez0623  
       2020-04-18 09:56:37 +08:00 via iPhone
    几年经验?坐标哪里
        4
    AlwaysCGG  
       2020-04-18 10:50:55 +08:00 via Android
    支持一下
    wysnylc
        5
    wysnylc  
       2020-04-18 10:57:02 +08:00
    加油,干死 Java
    labulaka521
        6
    labulaka521  
    OP
       2020-04-18 11:07:47 +08:00 via Android
    @wysnylc 哈哈 玩笑开大了,虽然不太了解,但还是要尊敬的

    @a852695 谢谢鼓励

    @AlwaysCGG 谢谢


    @sanchez0623 sz 一年半
    ArJun
        7
    ArJun  
       2020-04-18 11:08:58 +08:00
    照这个进度抢 java 饭碗只是时间的问题了
    labulaka521
        8
    labulaka521  
    OP
       2020-04-18 11:10:41 +08:00 via Android
    @pypy 主要是基于 redis 实现的,在每次调度前,调度节点会同时获取一个 redis 锁,然后抢到的才会继续运行,调度图还没来得及画,不过这个周末就把调度图画出来
    labulaka521
        9
    labulaka521  
    OP
       2020-04-18 11:12:20 +08:00 via Android
    @ArJun 各有特点吧,还不至于抢 java 的饭碗,哈哈哈
    Latin
        10
    Latin  
       2020-04-18 11:20:21 +08:00
    建议 support docker deploy
    excxapp
        11
    excxapp  
       2020-04-18 11:24:24 +08:00
    部署之后提示 2020-04-18T11:13:42.021+0800 error schedule/grpc.go:248 registry client failed {"error": "rpc error: code = Unknown desc = 系统还未安装,请等待安装后再进行操作"}
    CodeCore
        12
    CodeCore  
       2020-04-18 11:24:47 +08:00 via iPhone
    支持,加 star
    labulaka521
        13
    labulaka521  
    OP
       2020-04-18 11:28:09 +08:00 via Android
    @Latin 计划中

    @excxapp 要先启动调度中心并初始化系统后就可以了

    @CodeCore 谢谢
    useben
        14
    useben  
       2020-04-18 11:52:01 +08:00
    支持一下
    ps1aniuge
        15
    ps1aniuge  
       2020-04-18 14:10:32 +08:00
    借楼,安利下我的项目,不支持 redis,mysql,但却有高可用,和楼主的差别还是比较大的。

    不支持什么调度算法。没有 http 调度。但也有微信,钉钉。钉钉要下周发布。请坐等 1---3 天。

    开源免费,跨平台的 devops 批量运维工具《卡死你 3000 》简介
    https://www.toutiao.com/i6808017697528349191/
    ===============================
    《卡死你 3000 》运行命令详解
    https://www.toutiao.com/i6812528573992141320
    ===============================
    遇 devops 事不决,问《卡死你 3000 》。jenkins 搭配《卡死你 3000 》,能解决 99%的 devops 事。
    自动,批量运维,基于脚本,它比 ansible 好用 10 倍。
    开源+免费+跨平台的 devops 批量运维系统《卡死你 3000 》,了解一下:
    https://gitee.com/chuanjiao10/kasini3000
    https://gitee.com/chuanjiao10/kasini3000_agent_linux

    卡死你 3000 官方技术支持群。qq 群:700816263
    ps1aniuge
        16
    ps1aniuge  
       2020-04-18 14:14:06 +08:00
    没有 web,也不支持用户管理。但却有 [表情包,斗图乐] 功能。
    labulaka521
        17
    labulaka521  
    OP
       2020-04-18 14:34:18 +08:00 via Android
    记着点 star 哈
    cy476571989
        18
    cy476571989  
       2020-04-18 14:50:08 +08:00
    @labulaka521 楼主,已经 star,

    如果你的项目有文档翻译方面的需求,可以尝试一下: www.breword.com

    我做这个网站主要就是为了解决开源项目文档翻译方面的问题。

    目前提供以下 features:

    1. 机器预先翻译
    2. 可视化编辑器
    3. 协作翻译、审校
    4. 自动监测文档更新
    5. 支持导出所有翻译文档

    希望可以帮到你。(曾经做过开源项目,项目庞大之后,深知文档维护的痛苦)
    labulaka521
        19
    labulaka521  
    OP
       2020-04-18 14:55:31 +08:00 via Android
    @cy476571989 这个看着很棒
    cy476571989
        20
    cy476571989  
       2020-04-18 14:57:39 +08:00
    @labulaka521 谢谢,使用中遇到问题,或者有其他建议,可以联系我: [email protected], 希望咱们可以一起助力国内的开源事业越来越蓬勃发展。加油
    useben
        21
    useben  
       2020-04-18 15:07:01 +08:00
    楼主这样的目录架构 docker 化的话,可执行文件打包略大,web,调度器,work 其中一个修改就需要重新打包,耦合了。
    labulaka521
        22
    labulaka521  
    OP
       2020-04-18 15:25:12 +08:00 via Android
    @useben 确实,我在 mac 环境打包出来 50m,当初是想着生成一个文件,所以才把这些打包到一起了,方便管理
    useben
        23
    useben  
       2020-04-18 15:38:22 +08:00
    @labulaka521 不过改造下就好了,把 core/cmd 下的三个文件重构成 2 个,把 master 和 work 解耦。最好再把 web 服务和调度器再拆分下,二者通过 rpc 通信。这样子,web api,调度器,worker 完全解耦了,任意水平扩展了
    ifconfig
        24
    ifconfig  
       2020-04-18 16:51:55 +08:00
    原来大佬也在 go 夜读群里
    labulaka521
        25
    labulaka521  
    OP
       2020-04-18 16:55:48 +08:00
    @useben 这样也行,工作量不大,web 的话如果想重新部署到另外的地方可以直接把前端代码编译就可以了,不过我不太喜欢这种分的太多,感觉太麻烦了,哈哈。
    labulaka521
        26
    labulaka521  
    OP
       2020-04-18 16:57:57 +08:00
    @ifconfig 嘿嘿,是呀,不过不是大佬,哈哈
    tikazyq
        27
    tikazyq  
       2020-04-18 20:55:23 +08:00
    跟我们开发的爬虫管理平台有异曲同工之妙,crawlab,同样是用 golang 写的
    putaozhenhaochi
        28
    putaozhenhaochi  
       2020-04-18 22:24:31 +08:00
    @ps1aniuge 它比 ansible 好用 10 倍。??怎么得出这个结论的
    ps1aniuge
        29
    ps1aniuge  
       2020-04-19 15:24:41 +08:00
    @putaozhenhaochi
    1 去项目主页看特性。
    2 学用,自己体会。
    3 我有一个横向 excel 对比表,对比各种运维工具,不过这里发不上来。
    labulaka521
        30
    labulaka521  
    OP
       2020-04-19 19:30:07 +08:00 via Android
    @tikazyq 看过很棒,star 很多(羡慕)
    vipppppp
        31
    vipppppp  
       2020-04-20 09:31:19 +08:00
    很棒的项目,给予我们用的任务,提一下一点小建议
    是不是应该引入 DAG 的概念,或者父子任务就是这个,但关系却不是很明显?
    [运行 shell 、python 、golang 代码(当然其他语言也可以支持,如需要请提出)] ,是否不应该停留在语言层面,应该把这些看成一个执行器,PythonOperation,GolangOperation 等等,这样的好处是能够用任意语言实现同样的接口 /方法就能调度,这样最大的好处是有利于用户插件的开发。

    仅仅是我使用任务调度框架的一点点小经验,可能有点不实用,见谅~~~
    labulaka521
        32
    labulaka521  
    OP
       2020-04-20 09:55:12 +08:00 via Android
    @vipppppp 感谢建议,我会好好考虑
    neroanelli
        33
    neroanelli  
       2020-04-25 21:34:36 +08:00 via iPhone
    已经 star,感谢。能否增加任务分组和批量启停功能?还有就是 http api 控制?
    labulaka521
        34
    labulaka521  
    OP
       2020-04-25 21:41:28 +08:00 via Android
    @neroanelli 这两个功能可以考虑。http api 就是使用 api 进行一些操作吧,我在接口处加了 swag 的文档,使用 apihost/swagger/index.html 就可以看到这些接口
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     933 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 49ms UTC 21:39 PVG 05:39 LAX 14:39 JFK 17:39
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86