golang fastflow 库流程整理

组件介绍

先抄一张官网的,其实这张图里面画的不全,Leader 节点也会执行任务。

在这里插入图片描述

  • keeper:负责上报心跳,同时负责选举 leader。
  • store:存储层的抽象,负责提供存储相关的 api。
  • dispatcher:监听等待执行的图,通过负载均衡算法将图分配给不同的 worker。
  • parser:监听分配给自己的任务,将图解析成树,找到下一个要执行的节点,发送给 executor 执行。
  • executor:负责单个节点的运行。
  • commander:封装了一些常见的执行,比如停止,重试,继续等。
  • watchDog:负责监听执行超时的节点将其更新为失败,同时也会重新调度那些一直得不到执行的图到其他worker。

分布式示意图

只有 leader 节点会对任务进行分配,leader 和 worker 都会负责执行任务。

在这里插入图片描述

系统执行流程

任务执行流程

在这里插入图片描述

  1. 用户创建工作流任务。
  2. dispatcher 监听到有待执行的任务后,分配一个 worker 给这个任务,然后将任务写回数据库。
  3. parser 监听到有分配给自己的任务后,将图解析成树,寻找可以执行的节点,然后将节点发送给 executor。
  4. executor 执行单个的节点,并将执行结果返回给 parser。
  5. parser 收到结果后,根据树找到下一个要执行的节点,继续发送给 executor。如果整个树都执行完毕则更新任务状态。

命令执行流程

在这里插入图片描述

command 流程和任务执行流程相似,命令会先存储到 db 中,然后又 parser 进行命令的解析,发送给 executor 执行。

详细流程

在这里插入图片描述

  1. 要创建一个工作流,首先要找到对应的 dag 图,然后传入必要的参数,再将这个带有参数的图存到数据库。
  2. dispatcher 组件有一个协程负责监听数据库里面待执行的图,拿到图后通过负载均衡算法分配一个 worker,然后把这个图存入数据库。
  3. worker 节点的 parser 组件会监听数据库,查找分配给自己的图,找到图后生成一棵树,放入内存中,然后通过树查询可以执行的节点,通过 queue 传递给 executor 组件。
  4. executor 组件拿到要执行的节点后,执行顺序为 preCheck->runBefore->run->runAfter,执行完成后将节点和执行结果通过 queue 传递给 parser。
  5. parser 通过 queue 拿到 executor 执行完成后的节点之后,再通过树找到下一个可以执行的节点,通过 queue 传递给 executor 执行。如果没有下一个可以执行的节点,那么就计算整个树的执行结果,存入数据库。

具体逻辑说明

选主逻辑

leader 会在二分之一超时时间的时候去更新数据库的 update_time 字段。worker 会在二分之一的超时时间查询一次 leader 是否已经超时,如果超时则将数据库中 worker_key 字段更新为自己。

优点

  • 对流程支持使用编码和yaml文件的形式进行编排

  • 不依赖其他的组件,只依赖 mysql

改进点

  1. 如果自身负载比较低,那么生成任务后就由自身节点去立即执行,而不是走 dispatcher 分配流程。
  2. 执行命令时,由接收到该命令的机器去执行该命令,同时抢占任务的执行权,省略了监听再执行的步骤,缺点是可能造成单个机器负载较高。
  3. 继续,重试命令会重试节点的所有动作,可以改进为精准重试,哪里阻塞在重试的时候就重试哪里。

github 地址

原版

mysql 版

  • 23
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用: golang 私人仓主要是为了解决认证问题。一般通过 go get 拉取的是公共仓的代码,这些代码是不需要任何认证就可以拉取的,例如在 GitHub 上的公共仓。但是配置的私人仓则需要用户名和密码来登录才能拉取代码。因此,私人仓可以提供更高级的安全性和权限控制。 当我们需要使用私人仓的代码时,可以使用类似于以下的命令: go get git.example.com/private-repo 其中,git.example.com/private-repo 是私人仓的地址。根据仓的配置,可能会需要输入用户名和密码来进行身份验证,以确保只有授权的用户才能访问私人仓中的代码。 在 Windows 环境下,还可以使用免密登录方式,即在 git config 中配置用户名和密码,这样在执行 go get 时就不需要手动输入用户名和密码了。 需要注意的是,私人仓的地址需要按照特定的格式来指定,即协议加仓地址的形式。例如,http://git.example.com/private-repo.git。这是为了确保正确连接到私人仓并下载代码。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [一篇文章彻底弄懂Golang私有仓配置问题](https://blog.csdn.net/pillar04/article/details/131206819)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Golang使用私有仓](https://blog.csdn.net/ijijni/article/details/118891606)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值