V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
heqingpan
V2EX  ›  程序员

最近在计划用 rust 重写 xxl-job 服务,顺便写了一个 xxl-job 的 rusk sdk: xxljob-sdk-rs

  •  1
     
  •   heqingpan · 1 天前 · 3255 次点击

    本人是 r-nacos 作者,在完成 rust 重写 nacos 服务主体功能后,最近在计划用 rust 重写 xxl-job 服务。

    本人在写服务端前习惯写个客户端,方便深入理解协议与开发过程中各类场景的验证。

    刚才目前 rust 没有 xxl-job 的 sdk 便先写一个 xxl-job rusk sdk 。

    sdk 对应的项目是 xxljob-sdk-rs ,目前主体功能已可用,具体使用方式可以参考项目 readme 。感兴趣的 rust 开发可以观注下,如果使用过程中遇到什么问题可以到 github 上提 issues 。

    对于用 rust 重写 xxl-job 服务这个项目,大家有什么建议或者期望欢迎一起讨论。

    51 条回复    2025-01-22 13:57:48 +08:00
    198plus
        1
    198plus  
       1 天前 via Android
    能做什么呀,读 readme 有点没看懂
    heqingpan
        2
    heqingpan  
    OP
       1 天前 via Android
    xxl-job 是一个分布式调度平台,可以简单理解为分布式定时器。

    它分服务端调度和客户端执行器,目前完成的 sdk 只是客户端支持接入服务端当做一个执行器,重写服务端正在计划中还没有完成。
    Plutooo
        3
    Plutooo  
       1 天前
    r-nacos 确实好用,点个赞
    burymme11
        4
    burymme11  
       1 天前
    客户端执行器可以自动注册,但是还需要再手动添加,一旦 job 多了,手动在页面上加,体验很糟。
    个人建议进一步完善自动注册。
    burymme11
        5
    burymme11  
       1 天前
    还有异常报警,建议添加 企微/钉钉等目前主流信道
    v2zzzzz
        6
    v2zzzzz  
       1 天前
    看了下我们测试的 nacos 随便就占了 1G 内存,r-nacos 估计能节省 90%,要是 UI 也能对齐就好了,点个赞,加油
    zhuanggu
        7
    zhuanggu  
       1 天前
    @198plus 好多小公司的大数据调度任务直接用的就是 xxl
    louhubiao
        8
    louhubiao  
       1 天前
    xxl-job 的源码阅读,有推荐的博客吗,想深入了解一下
    FrankAdler
        9
    FrankAdler  
       1 天前
    支持一下
    heqingpan
        10
    heqingpan  
    OP
       1 天前 via Android
    @burymme11
    自动注册与报警方式需求收到,自动注册目前协议上是不支持的,后面考虑新增扩展 openapi 支持,不过对应的执行器 sdk 也需要增强才可能可以支持。

    另外自动注册的任务会解决少部分信息,可能的需要人工修改补充信息后才可以启用。
    heqingpan
        11
    heqingpan  
    OP
       1 天前 via Android
    @louhubiao 没有。xxl-job 代码量不太结构也比较清晰,可以直接看代码。
    Ayanokouji
        12
    Ayanokouji  
       1 天前
    重新设计一个吧,xxl-job 真不咋样
    heqingpan
        13
    heqingpan  
    OP
       1 天前 via Android
    @Plutooo
    @FrankAdler 感谢支持😊
    heqingpan
        14
    heqingpan  
    OP
       1 天前 via Android
    @Ayanokouji

    我重写时肯定是会重新设计的,也会增加自己的 openapi 。
    只是会第一个兼容 xxl-job 的协议,加入已有的流行生态,项目才能快速启动。

    如果有其它流行任务调度协议后面也会考虑兼容支持,这块有推荐的吗?
    LieEar
        15
    LieEar  
       1 天前
    厉害,r-nacos 很🐂,印象深刻。期待改写效果
    Ayanokouji
        17
    Ayanokouji  
       1 天前
    @heqingpan 最终不管兼容谁的协议,希望加上 namespace 资源隔离
    heqingpan
        18
    heqingpan  
    OP
       1 天前 via Android
    @Ayanokouji 加上 namespace 做资源隔离,这是一个不错的建议,计划会支持。
    cornorj6
        19
    cornorj6  
       23 小时 50 分钟前
    支持作者,刚刚去看了 rnacos ,把我原先的 nacos 内存从 1011M 降到 8M ,太给力了。同样的 xxl-job 我也有用到,占用了 700M ,如果能像 rnacos 那样节省 99%,真是太棒了。PS:有没有考虑把 elasticsearch 也优化下,这货占了几 G 。
    flowerains
        20
    flowerains  
       23 小时 15 分钟前
    是 rnacos 的作者吗?我当时真有点想在生产环境直接用 rnacos 了,迫于稳定性最终还是没采用。
    importmeta
        21
    importmeta  
       23 小时 1 分钟前
    不如找个国外项目用 Rust 重写, 开捐款, 国产项目纯用爱发电.
    heqingpan
        22
    heqingpan  
    OP
       20 小时 54 分钟前 via Android
    @cornorj6 重写 xxl-job 节省 99%不一定能达到,节省 95%的把握还是比较大的。

    一阶段只能把主要精力投入一个项目,es 就看看其它人是否有兴趣吧。
    我印象中已经有用 rust 写的日志服务,不过不是完全兼容协议,感兴趣可以去搜索一下。
    heqingpan
        23
    heqingpan  
    OP
       20 小时 49 分钟前 via Android
    @flowerains 表示理解,这个稳定性的确认还是要花一段时间的。
    比如测试环境不重启持续测试运行个三个月、半年,大概就可以有较大的把握。
    后面还有机会😀

    目前基于收到的反馈,现在已经很稳定,所以我才有精力写下一个项目。
    heqingpan
        24
    heqingpan  
    OP
       20 小时 48 分钟前 via Android
    @importmeta 目前有正经不需要
    heqingpan
        25
    heqingpan  
    OP
       20 小时 42 分钟前 via Android
    目前有正经工作不需要考虑太多,写这个主要动力还是爱好。

    写的项目自己也会是用户,国外的没接触过反倒没动力写。
    ACCI
        26
    ACCI  
       20 小时 22 分钟前
    大数据的任务调度用 dolphin scheduler 或者 airflow 比较多吧. xxljob 可能 java spring 项目用的多些吧.
    3085570450tt
        27
    3085570450tt  
       19 小时 9 分钟前
    @cornorj6 elasticsearch 已经有了用 rust 重写的了
    mark2025
        28
    mark2025  
       17 小时 49 分钟前
    @3085570450tt ES 在 pg+插件(比如 paradedb )之前没有前途了
    beneo
        29
    beneo  
       15 小时 42 分钟前
    点赞,之前 rust + docker + mac 开发 + linux 部署 直接劝退,来看看怎么实现的
    Kevinyy
        30
    Kevinyy  
       15 小时 41 分钟前
    @heqingpan #10 建议设计成通用的告警推送的方式,这样可以接入告警中心,方便管理
    des
        31
    des  
       14 小时 25 分钟前
    赞,先收藏了
    Honwhy
        32
    Honwhy  
       13 小时 44 分钟前
    赞,up 主想法真不错,给 Javaer 一个思路,入坑 Rust
    heqingpan
        33
    heqingpan  
    OP
       7 小时 48 分钟前 via Android
    @Kevinyy 你说的通用告警是指内部还是外部?
    内部的话会设计成通用的,已接入告警渠道支持方便切换。
    外部的话,目前有什么通用的协议吗?

    告警中心是不是也可以理解为像邮箱、企微、钉钉之类的另外一个告警渠道?
    heqingpan
        34
    heqingpan  
    OP
       7 小时 45 分钟前 via Android
    @Honwhy 欢迎入坑 rust ,用它来写中间件效果确实不错😄
    nm1st
        35
    nm1st  
       6 小时 2 分钟前
    r-nacos 有用过,很牛,支持
    5261
        36
    5261  
       5 小时 58 分钟前
    @heqingpan 为啥没选用 go 来写呢
    mulychou
        37
    mulychou  
       5 小时 54 分钟前
    r-nacos 用在研测环境,真的节省了很多内存空间,很牛,支持
    visper
        38
    visper  
       5 小时 41 分钟前
    r-nacos 已经在开发环境使用一年。没有什么问题。
    heqingpan
        39
    heqingpan  
    OP
       5 小时 14 分钟前 via Android
    @5261 用 go 重写应该也可以提前一些但效果应该比 rust 还会差一些。
    r-nacos 用 go 写的话应该达不到现在这个效果。

    对 go 和 rust 的熟悉度差不多情况下,一般会选效果最好的,何况我现在使用 rust 便顺手一些。
    3085570450tt
        40
    3085570450tt  
       4 小时 59 分钟前
    @heqingpan 文档啥的,可以在详细丰富一下💪💪💪。比如它的背景,目的,具体的使用场景(比如结合 actix, axum 等 web 框架的最佳使用)
    momowei
        41
    momowei  
       4 小时 58 分钟前
    大佬还是强
    3085570450tt
        42
    3085570450tt  
       4 小时 53 分钟前
    @mark2025 谢谢,我去看看其文档。
    coolcoffee
        43
    coolcoffee  
       4 小时 48 分钟前
    哇塞!现在才看到还有 r-nacos 这个应用,赶紧部署一个试试看。

    xxx-job 和 es 目前也是内存大户,属于不得不用的类型,因为看其他竞品要么功能不如它强大,要么还不如它开放。
    5261
        44
    5261  
       4 小时 32 分钟前
    @heqingpan 确实,哪个顺手用哪个,rust 写中间件可能会好些,go 终究还是 web 业务开发会爽些,目前我也在 rust 入门的苦海中
    5waker
        45
    5waker  
       4 小时 29 分钟前
    r-nacos 测试环境用的真的很爽,期待大佬的 xxl-job
    PaulSamuelson
        46
    PaulSamuelson  
       4 小时 0 分钟前
    会内置 k8s api 么?
    heqingpan
        47
    heqingpan  
    OP
       3 小时 48 分钟前 via Android
    @PaulSamuelson 应用本身不会直接和 k8s 耦合,然后也是支持部署到 k8s 中。目前 r-nacos 是支持 k8s helm 方式部署的。
    heqingpan
        48
    heqingpan  
    OP
       2 小时 54 分钟前 via Android
    @3085570450tt 目前 r-nacos 的文档主要是使用说明,其它方面的后面有空慢慢补。
    heqingpan
        49
    heqingpan  
    OP
       2 小时 45 分钟前 via Android
    @5261 是的中间件模型逻辑都比较稳定,对性能稳定性要求较高,用 rust 刚好合适。
    业务需求变化比较大,更关心快速变化的场景下开发效率,性能再其次,用 go 、java 之类比较合适。
    ingnoscemihi
        50
    ingnoscemihi  
       1 小时 37 分钟前
    rust 太稳定了,期待
    cornorj6
        51
    cornorj6  
       1 小时 6 分钟前
    @heqingpan 感谢作者的无私奉献。关于 xxl-job ,在我使用过程中碰到过 2 个问题,第一个问题是每个任务每执行一次都会产生一个小的日志文件,当任务特别多执行很频繁的时候,这些日志会把服务器 inode 数量耗光。第二个问题是 xxl-job 有个日志表 xxl_job_log 数据量特别大时(任务执行比较多且频繁),会严重影响数据库性能,它会不定期查询这个表来判断任务完成情况。建议做成按照日期的分区表。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5430 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 07:04 · PVG 15:04 · LAX 23:04 · JFK 02:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.