golang分布式队列解决方案

前文

  项目开发过程中需要一个框架,可以实现异步队列,将整个项目解耦。由于项目主体是Python写的,Python里celery作为异步非常的广泛,但是celery的缺点是可视化不足,稳定性也不行,当线上量大的时候,容易出现不可知异常导致失败;
  对于分布式框架,需求它轻量易接入,同时可以直接用redis做队列,而不需要再引入第三方组件如 MQ、kafka;Python这块相关的的确比较乏力,而golang高并发的性质在这块可以支撑很多,可选如下:

评估

  针对三者区分如下:

方案优势劣势
asynq1.轻量,代码架构相对简单;2.功能充分:定时任务、重试失败任务、支持redis集群和哨兵、支持web ui、支持命令行查看参数、优先级队列;3.google员工开发,且持续在更新暂无
machinery1.功能充分(同上)1.比较重,代码架构复杂2.不支持webui可视化页面
goworker1.轻量,架构相对简单;2.支持生产者由其他程序输入,只负责消费1.功能不够充分;2.不支持webui

  三者的优缺点比较明显,但根据需求来,主要是asynq比较符合需求;它的几个功能点:提供可视化web ui界面,支持自动重试和优先级队列,且依托于redis也无须纳入第三方队列组件;

测试

  本地基于github搭建了一套,无论是内存的消耗,还是队列的消费速度,都非常快;同时压测上百万个任务进队列,可以在10min左右消费完毕。
  关于asynq就是典型的生产-消费结构,client负责推送任务到队列,worker负责消费任务。
在这里插入图片描述
其功能特性非常多,具体如下:
在这里插入图片描述
其搭建可以参考readme轻松搭建,这里看下可视化ui:
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Golang分布式任务框架是使用Golang编程语言开发的一种工具,用于简化分布式环境下的任务调度和处理。 首先,Golang分布式任务框架提供了一个简单而强大的任务调度器,可以将任务分配给不同的节点进行并行处理。这个调度器可以根据任务的类型和优先级来动态地分配任务,并且可以实时监控任务的执行情况和进度。 其次,该框架提供了一套灵活的任务管理机制,可以方便地定义和管理任务。我们可以通过编写简单的代码来定义任务的逻辑,并且可以为任务设置各种参数,例如执行时间间隔、重试次数等。此外,该框架还支持任务的持久化存储,确保任务在节点故障或系统重启后能够正确地恢复和继续执行。 此外,Golang分布式任务框架还提供了一套高效的通信机制,用于节点之间的消息传递和数据交换。通过这种通信机制,不同节点之间可以共享任务和数据,实现更加高效和协同的任务处理。此外,该框架还支持集群的动态扩展和节点的负载均衡,以应对不同规模和负载的分布式环境。 总结来说,Golang分布式任务框架通过提供强大的任务调度、任务管理和通信机制,简化了分布式环境下的任务处理。它具有灵活、高效和可靠的特点,适用于各种规模和负载的分布式系统应用。通过使用该框架,我们可以更加轻松地开发和管理分布式任务,提高系统的性能和可扩展性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值