V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
herozem
V2EX  ›  分享创造

用 Golang 写了一个 Task Queue

  •  
  •   herozem · 2017-10-27 18:12:32 +08:00 · 3864 次点击
    这是一个创建于 2577 天前的主题,其中的信息可能已经有所发展或是发生改变。

    参考自 Celery 和 Python-RQ 的实现, 用 Golang 实现了一个分布式任务队列. 目前的功能有:

    • [x] 并发执行任务
    • [x] 简单易使用
    • [x] 语言无关的协议
    • [x] 分布式
    • [ ] 高可用
    • [ ] 重试机制
    • [ ] 无缝重启

    链接: https://github.com/jiajunhuang/toq

    10 条回复    2018-06-12 22:50:37 +08:00
    TangMonk
        1
    TangMonk  
       2017-10-27 19:07:35 +08:00 via Android
    感觉可以不要 redis 了
    herozem
        2
    herozem  
    OP
       2017-10-27 19:35:23 +08:00
    @TangMonk 为啥, 你是指用 Golang 不需要 task queue? 还是说可以使用其他的作为 broker 呢?
    timothyye
        3
    timothyye  
       2017-10-27 19:41:47 +08:00 via Android
    有没有性能测试数据?
    TangMonk
        4
    TangMonk  
       2017-10-27 20:09:18 +08:00 via Android
    @herozem 想错了,不好意思
    herozem
        5
    herozem  
    OP
       2017-10-27 20:40:42 +08:00
    @timothyye 暂时还没有, 我想等我到 0.1 版(完成目前列出来的功能,包括平滑重启)之后,再写性能测试吧,目前主要继续专注功能上的开发
    lights
        6
    lights  
       2017-10-27 21:06:17 +08:00 via iPhone
    x 是表示有还是表示没有?
    另外数据固化以及队列的多端生产和多端消费怎么样
    timothyye
        7
    timothyye  
       2017-10-27 21:14:54 +08:00 via Android
    @lights markdown 应该显示成√的,不知道为啥没显示出来
    herozem
        8
    herozem  
    OP
       2017-10-27 21:25:17 +08:00
    @lights 基于 redis 的任务队列有一个通病,就是很难保证消费者挂了之后任务不丢失. 目前 toq 也存在这个问题, 这是上面 TODO 中 HA 这一步要做的. 多端生产是支持的, 只要按照协议往 broker 中打入数据即可. 多端消费也是支持的. 我刚刚提交了一个新的提交, 引入了 `sleepy mode`, 即, 消费者端忙碌时, 会延迟从 broker 拉任务. 这也是为之后做任务不丢失的铺垫.
    yzjustc
        9
    yzjustc  
       2018-06-12 22:44:21 +08:00
    @herozem 刚才看了下你这个队列,retry 的时候不应该再用新的 goroutine 而是接在本协程栈做,递归或者循环都可以,如果开新 goroutine,可能一个 task 会执行两次,一个 token 回放了两次
    yzjustc
        10
    yzjustc  
       2018-06-12 22:50:37 +08:00
    @herozem 正在想做一个类似的任务分发工具用于内部生产环境,请问这个项目还在做吗?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   928 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 21:49 · PVG 05:49 · LAX 13:49 · JFK 16:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.