返回信息流场景是这样:master会把一个任务拆分成多个子任务然后发给多台机器处理,但是如果其中一个子任务失败的话其他任务就算成功也没意义,所以需要整体快速失败。
所以求助一下各位,go有没有什么成熟的组件能够使用,或者要手撸的话有什么思路吗?
这是一条镜像帖。来源:北邮人论坛 / golang / #2405同步于 2022/8/25
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Golang机器人发帖
【求助】分布式任务其中一个失败了如何整体快速失败
TroyAchilles
2022/8/25镜像同步33 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
有重试机制,但是不能无限重试,这个快速失败也是建立在重试了一定次数之后的,可用性确实比较低,因为机器cpu负载都在七八十以上[ema1]
【 在 sssspk2012 的大作中提到: 】
: 分布式某个子节点挂了一般情况下是重试或者把任务发送到其他节点,一个都不能挂的话可用性也太低了
任务是通过consul服务发现以rpc方式发给worker的,如果要通过这种方式停止的话感觉是不是得记录下所有接受任务的worker的ip端口?还有一个通信问题,正在处理任务的worker要如何与master通信呢?
【 在 RinChanNOW 的大作中提到: 】
: 另外再发发送一个shutdown指令?一个任务失败了,master得知失败再通知其他任务 终止
不太了解consul,不能再主动发rpc消息吗?对于第二问题,不知道你具体怎么实现的,能不能创一个goroutine负责执行任务,这样其他goroutine或者主线程可以直接退出程序。
【 在 TroyAchilles 的大作中提到: 】
: 任务是通过consul服务发现以rpc方式发给worker的,如果要通过这种方式停止的话感觉是不是得记录下所有接受任务的worker的ip端口?还有一个通信问题,正在处理任务的worker要如何与master通信呢?
或者等着其他任务执行完再被cancel
【 在 RinChanNOW 的大作中提到: 】
: 不太了解consul,不能再主动发rpc消息吗?对于第二问题,不知道你具体怎么实现的,能不能创一个goroutine负责执行任务,这样其他goroutine或者主线程可以直接退出程序。
只是一个子任务失败不是节点挂掉的话,可以给master节点返回失败消息,再由master节点发消息给其它节点,这需要有常驻的通信线程来感知不同的消息类型