V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tjq
V2EX  ›  Java

推广下自己的开源项目:分布式调度与计算框架—OhMyScheduler

  •  
  •   tjq ·
    KFCFans · 2020-05-22 08:41:54 +08:00 · 4791 次点击
    这是一个创建于 1650 天前的主题,其中的信息可能已经有所发展或是发生改变。

    文档地址

    项目地址

    欢迎交流~

    第 1 条附言  ·  2020-06-08 08:14:09 +08:00

    v2.0.0已发布,正式提供**工作流任务编排(workflow)**支持~

    项目地址

    最新文档地址

    在线试用

    52 条回复    2020-06-08 16:21:37 +08:00
    w292614191
        1
    w292614191  
       2020-05-22 08:51:42 +08:00
    你这个支持刷新 执行器 吗?
    比如调度中心重启了,会自动加载执行器进来吗?还是执行器也要跟着重启一次。
    xxl-job,有时候无法刷新执行器进来。
    xinQing
        2
    xinQing  
       2020-05-22 08:55:06 +08:00
    可以啊
    tjq
        3
    tjq  
    OP
       2020-05-22 08:58:00 +08:00
    @w292614191 OhMyScheduler 没有执行器注册的概念,在 Server 调度执行的时候是根据执行器的全限定类名(比如 com.github.kfcfans.XXXProcessor )去找具体的对象的,因此没有你说的问题。

    欢迎试用和交流~
    tjq
        4
    tjq  
    OP
       2020-05-22 08:58:18 +08:00
    @xinQing 哈哈,谢谢鼓励~欢迎使用和交流~
    w292614191
        5
    w292614191  
       2020-05-22 09:10:20 +08:00
    serverAddress
    文档说是调度中心的地址哇,执行器不是通过这个地址注册到调度中心的吗?
    tjq
        6
    tjq  
    OP
       2020-05-22 09:14:51 +08:00
    @w292614191 不好意思我理解错了,你说的执行器其实就是接入 OhMyScheduler 的某个业务应用吧,我理解成具体的某个 Processor 类了。
    以下为正式解答:
    支持刷新。OhMyScheduler 的整体架构非常高可用,无论怎么折腾都可以恢复~
    labulaka521
        7
    labulaka521  
       2020-05-22 09:21:44 +08:00 via Android
    tjq
        8
    tjq  
    OP
       2020-05-22 09:29:22 +08:00
    @labulaka521 不同款哦~
    首先,主体语言不同 hhh,不过这个并不是很重要。
    最重要的区别在于 OhMyScheduler 提供分布式计算能力,在业务越来越庞大的今天显得格外有意义~

    (羡慕你好多 star 啊~((这么多 star 了还要来我这里打广告拐跑我潜在的用户😭
    不过好歹也算是同行,有兴趣可以交流一下哈~
    w292614191
        9
    w292614191  
       2020-05-22 09:37:51 +08:00
    @tjq 看起来不错噢,有在线地址吗?
    labulaka521
        10
    labulaka521  
       2020-05-22 09:38:59 +08:00 via Android
    @tjq 我这个和那个 xxljob 类似的,star 会有的,我这就去给你点
    yuchenyang1994
        11
    yuchenyang1994  
       2020-05-22 09:41:21 +08:00
    Pornhub 风格 logo 好评
    tjq
        12
    tjq  
    OP
       2020-05-22 09:43:36 +08:00
    @w292614191 不好意思目前还没有(主要原因是 vue 和 SpringBoot 结合后是浏览器发请求,导致访问不了后端服务,目前需要独立部署前端,我找个机会部署下吧)~
    不过我提供了一种很方便的试用方法,只要有 Docker 环境,git clone 项目后运行 /other/script/build_docker.sh ,按提示操作可以自动部署 1 台 Server 和 2 台 Agent 进行试用~

    谢谢支持,欢迎试用和交流!
    tjq
        13
    tjq  
    OP
       2020-05-22 09:45:41 +08:00
    @labulaka521 哈哈哈,谢谢老哥~我准备下阶段做个 DAG 工作流,我看你那项目目前也不支持,可以一起学习学习交流交流交流~
    tikazyq
        14
    tikazyq  
       2020-05-22 09:50:15 +08:00
    crawlab 参考一下?用 go 写的
    cy476571989
        15
    cy476571989  
       2020-05-22 09:51:31 +08:00
    @tjq 可以考虑把文档翻译为英文文档,扩大受众面,推荐使用我自己做的 breword 翻译工具: www.breword.com
    tjq
        16
    tjq  
    OP
       2020-05-22 09:52:46 +08:00
    @yuchenyang1994 哈哈哈~
    (我只是觉得好看,没别的意思嗷[手动滑稽]
    tjq
        17
    tjq  
    OP
       2020-05-22 09:53:16 +08:00
    @tikazyq 好的,谢谢您的建议!
    tjq
        18
    tjq  
    OP
       2020-05-22 09:55:51 +08:00   ❤️ 1
    @cy476571989 一直有这个计划,拓宽海外市场嘛,让外国人见识见识我们中国程序员的厉害哈哈。
    但是我英语挺烂的...再加上目前一个人维护那么大一个项目实在也没有额外精力去做国际化、翻译这些东西了。

    看了一下是个很棒的工具,我会尝试的!谢谢~
    cy476571989
        19
    cy476571989  
       2020-05-22 10:00:21 +08:00
    @tjq 我可以帮忙维护翻译文档啊。而且在项目更新的时候,会自动抓取更新的内容, 在译文展示修改的内容,可以让译文文档的维护变得非常轻松。

    你可以去 breword 注册账号,然后创建一个翻译项目,抓取你的这个项目的文档,然后你就是这个翻译项目的管理员了,我可以参与翻译,最终由你来 review 译文内容。

    等项目变得受欢迎之后,应该能够吸引到更多希望能够参与翻译的朋友。
    labulaka521
        20
    labulaka521  
       2020-05-22 10:00:42 +08:00
    @tjq 是的,我那个也不支持,关键前端那拖拽 dag 不知道用什么搞
    tjq
        21
    tjq  
    OP
       2020-05-22 10:03:43 +08:00
    @cy476571989 我已经注册完成并创建了项目,但是发现了一个问题。
    我的文档是写在 GitHub Pages 里面的,所以你们的工具只抓取到了 Readme.md...
    个人认为使用静态网页作为文档的开发者不在少数(主要是这样对用户比较友好),是否可以考虑下支持这个功能呢?
    我创建的项目叫:分布式调度与计算框架 OhMyScheduler 文档翻译
    地址: https://www.breword.com/projects/5ec731deddcf37001b4c3423
    tjq
        22
    tjq  
    OP
       2020-05-22 10:07:10 +08:00
    @labulaka521 我研究研究,等我搞出来了告诉你~
    cy476571989
        23
    cy476571989  
       2020-05-22 10:09:11 +08:00
    @tjq 我看到了,你的翻译语言选错了,

    你的文档是中文的,应该选择: 中文 -> 英文, 你现在选择的是 英文 -> 中文。

    语言选择错误,会导致机器翻译失败。

    还有就是,你的实际文档目录为: guidance -> content -> docs 下面

    我在后头手动把这个项目删除, 5 分钟后,你刷新没有你这个项目的时候,你再创建一个新的项目。
    cy476571989
        24
    cy476571989  
       2020-05-22 10:11:14 +08:00
    @tjq 已经将你刚才创建的这个项目删掉了,你再创建一个新的,记住语言选择为:

    中文 --> 英文
    tjq
        25
    tjq  
    OP
       2020-05-22 10:19:31 +08:00
    @cy476571989 我重新创建了,创建的时候确认了很多遍,确定是中文 -> 英文,可是点击的一瞬间似乎又变成了英文 -> 中文...
    然后我现在连个人主页都进不去了,进去就刷一下然后空白( https://www.breword.com/tjq )...

    在这里交流不太方便(主要是回复还要扣钱),我觉得您的产品很棒很想尝试,能不能给个联系方式呢~
    cy476571989
        26
    cy476571989  
       2020-05-22 10:23:36 +08:00
    我个人邮箱为: [email protected] ,希望可以一起推动这个事情往前进。
    cy476571989
        27
    cy476571989  
       2020-05-22 10:26:52 +08:00
    @tjq 已经给你注册 breword 时候填写的邮箱,发送了邮件,可以查收一下。
    labulaka521
        28
    labulaka521  
       2020-05-22 11:00:21 +08:00
    @tjq 哈哈 好的
    gemini767
        29
    gemini767  
       2020-05-22 13:38:09 +08:00
    代码浓浓的阿里味
    tjq
        30
    tjq  
    OP
       2020-05-22 13:45:01 +08:00 via iPhone
    @gemini767 哈哈,哪些地方透露出了浓浓的阿里味啊?😂
    gemini767
        31
    gemini767  
       2020-05-22 13:50:57 +08:00
    @tjq 哈哈哈,没有恶意,class,function,参数 很多的命名都能看出来
    tjq
        32
    tjq  
    OP
       2020-05-22 14:03:31 +08:00 via iPhone
    @gemini767 这能有什么恶意呀。我只是感到了一点点惊讶~
    只能说您阅历丰富眼力惊人了哈哈~
    fangcan
        33
    fangcan  
       2020-05-22 14:38:35 +08:00
    换个名字会不会好点 😂
    tjq
        34
    tjq  
    OP
       2020-05-22 14:40:39 +08:00 via iPhone
    @fangcan 诶...这名字我还自认为取得不错呢😭
    有什么高见吗哈哈~
    Mistwave
        35
    Mistwave  
       2020-05-22 16:58:08 +08:00 via iPhone
    emmmm 不支持 DAG 的意思是,任务之间不可以配置依赖吗?这个算是调度系统的刚需了.....
    我们去年自己写了一个调度系统,最主要的就是要解决依赖问题,HA 啥的都是顺便带的......
    如果让任务自己解决依赖的话,几百个任务里面要耦合这种代码,还是挺难受的
    akka 写的好评,为啥不用 Scala 呢。akka 的 java dsl 不太顺手吧?
    另外问下,这个有上生产吗?有生产的调度数据可以分享下吗?比如文档中提到的“性能强劲”,有类似的 benchmark 吗?
    Arthit
        36
    Arthit  
       2020-05-22 17:13:41 +08:00
    可惜了,我是搞.NET
    tjq
        37
    tjq  
    OP
       2020-05-22 17:32:13 +08:00   ❤️ 2
    @Mistwave 嗯,任务之间不可以配置依赖,不过目前正在全力开发中~
    一开始不支持的原因是我个人一开始想要的主打功能是分布式计算,而且当时觉得 MapReduce 处理器能代替一部分 DAG 功能,不过现在已经意识到了 DAG 的重要性,不久的将来就会提供支持。
    不用其他语言(其实我本来想用 Kotlin 的)主要是考虑到维护成本和接入成本,比如你用我这个框架,肯定会先把代码看一遍吧,国内后端领域 Scala 和 KT 的普及度都太低了,用这些语言写的话本项目基本最后就会变成我个人的一个玩具了。
    在 Java 项目用 akka 确实很不舒服(光一个方法就 4 个 API,无力吐槽),不过本项目基本只是把 akka 当作了一个简化版 Netty 在用。因为为了 Processor 的可控性,还是要自己开线程池,也就没有采用 Actor 模型。
    目前还停留于个人测试阶段...没有实际的生产数据,抱歉~

    性能强劲其实是想表达我调度层设计的比较高超和巧妙,我看过 XXL-Job 调度的代码,就是简单的 select for update +hash map 版时间轮,而本项目的实现是无锁化查询(可以理解为分段查询)+真正的时间轮(参考了 Netty 时间轮),性能自然不在一个等级上。不过事实上,对于调度应用,个人认为调度性能是远远达不到瓶颈的,撑死几千几万个任务,哪怕最简单的直接每秒数据库轮询都能符合性能要求。

    最后,如果有兴趣使用,你可以尝试部署到预发观察几天~如果遇到什么 bug 或问题,可以直接联系我,最近我有充足的时间第一时间修复问题~

    感谢支持~
    cy476571989
        38
    cy476571989  
       2020-05-22 20:41:04 +08:00
    @tjq 建议可以做一个 docker 镜像,直接可以从 docker hub 拉取镜像试玩,这样尝鲜的话更容易点。
    tjq
        39
    tjq  
    OP
       2020-05-22 20:53:04 +08:00 via iPhone
    @cy476571989 哈哈提供了哦~不过要仔细看文档才能发现就是了……
    正在考虑搭个在线试用平台~
    hello2060
        40
    hello2060  
       2020-05-22 20:53:30 +08:00
    Java 新手想加入啊,可一个 issue 都没有不知道从哪入手啊
    tjq
        41
    tjq  
    OP
       2020-05-22 20:55:18 +08:00 via iPhone
    @hello2060 可以先看看源码,理解项目整体的架构和用到的技术。对项目有了整体的把握,有自己的想法,就可以做贡献啦~慢慢来,我相信你可以的!
    hello2060
        42
    hello2060  
       2020-05-22 20:59:43 +08:00
    @tjq 好滴,我先学习学习哈哈。
    tjq
        43
    tjq  
    OP
       2020-05-22 21:02:45 +08:00 via iPhone
    @hello2060 嗯嗯,看到比较棒的设计或实现也可以写写博客分享啊哈哈(靠我一个人推广好难~,求帮助哈哈)。当然,有不懂的地方也可以问我~
    tjq
        44
    tjq  
    OP
       2020-06-08 08:27:24 +08:00
    @labulaka521 老哥我搞定了,用 dagre-d3 这个库搞定的,代码很简单。

    具体实现: https://github.com/KFCFans/OhMyScheduler-Console/blob/master/src/components/dag/WorkflowEditor.vue
    tjq
        45
    tjq  
    OP
       2020-06-08 08:28:50 +08:00
    @Mistwave 您好,2.0.0 版本已发布,正式提供了 DAG 支持,可以接入进来试试~
    tjq
        46
    tjq  
    OP
       2020-06-08 08:30:01 +08:00
    @w292614191 v2.0.0 版本已发布,在线试用: https://www.yuque.com/ohmyscheduler/guidence/hnbskn
    w292614191
        47
    w292614191  
       2020-06-08 10:58:21 +08:00
    @tjq 支持一下、
    CRON 要有个表达式插件就好用很多了,毕竟很多实施人员并不会写。
    工作流那个有点没搞懂,希望文档在详细点。
    tjq
        48
    tjq  
    OP
       2020-06-08 11:14:16 +08:00
    @w292614191 CRON 有很多在线生成器,我在文档里也放了链接,所以没有单独造轮子。不过可以考虑直接在 Web 页面加个跳转~

    工作流其实就是配置任务与任务之间的依赖,比如有 A B C D 4 个任务,我希望 A 运行完以后运行 B 和 C,B 和 C 运行完以后运行 D,这就形成了一个依赖关系,可以通过有向无环图( DAG )来描述,这也就是工作流。

    我会尽量把文档写的简单易懂~

    非常感谢您的建议~
    w292614191
        49
    w292614191  
       2020-06-08 14:13:31 +08:00
    @tjq 我又试了试,这个工作流是类似子任务形式吗?支持参数传递吗?
    建议支撑更丰富的参数形式哦。xxl-job 只能是 String 类型,我多个参数,只能手写 json 字符串,到后台转 Map,真是尴尬。
    这个工作流,新建过程,导入的任务都在一行,无法形成节点关系。
    tjq
        50
    tjq  
    OP
       2020-06-08 14:46:22 +08:00
    @w292614191 嗯,相当于高级版的子任务,每个节点都可以有任意个父节点和子节点,当然也是支持参数传递的。

    不太理解“更丰富的参数形式”这句话,从前端控制台录入的也只能是 String 了吧......可能我没理解对意思,能不能详细描述下~

    工作流的画图教程在这里: https://www.yuque.com/ohmyscheduler/guidence/ysug77#wwLe8
    我猜你应该是点到了字导致无法连线...(受限于本人的前端水平,目前用户体验不是很好 hhh,不过实际功能没有问题啦)
    w292614191
        51
    w292614191  
       2020-06-08 16:09:37 +08:00
    @tjq 就是可以选择是否 JSON 传递。然后弹出一个 K/V 形式的输入框,最后转成 JSON 字符串。
    我实在太懒了,哈哈哈。
    tjq
        52
    tjq  
    OP
       2020-06-08 16:21:37 +08:00 via iPhone
    @w292614191 哈哈哈感觉这个意义就不是很大了,而且不一定所有人都需要 json 数据嘛
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6002 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 06:12 · PVG 14:12 · LAX 22:12 · JFK 01:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.