libi / dcron

轻量分布式定时任务库 a lightweight distributed job scheduler library
MIT License
422 stars 73 forks source link

新增Driver:仅靠节点间通信同步状态 #47

Open libi opened 1 year ago

libi commented 1 year ago

大部分服务节点都部署在同一子网内,节点间通信不需要经过多级路由转换,通信效率会非常高。 所以可以考虑直接通过节点间通信来同步状态,大概思路如下:

  1. 初始化driver时,传入所有节点ip:port列表。
  2. 服务启动阶段每个节点依次与其他节点建立 rpc 连接,连接成功后当前节点保存所有节点状态。
  3. Job 执行判定阶段,直接通过 rpc 获取目前所有节点状态,如状态列表与上次不一致则重建 hash 环。
  4. 一致性hash选举执行节点。

这么做的优势在于可以去掉存储依赖,并且状态同步将更精准,不会产生心跳周期导致的瞬间状态不一致情况。

当然如果存在节点间跨机房等情况,不适用该 driver。

ailose commented 1 year ago

补充一下这些功能,会更好一些

1、添加任务监控和报警功能: 允许使用者配置邮件或者飞书、钉钉之类机器人,任务失败通知发送到相应地方 另外panic告警 2、bash 命令支持: 环境变量设定支持 / 命令宏替换支持

libi commented 1 year ago

补充一下这些功能,会更好一些

1、添加任务监控和报警功能: 允许使用者配置邮件或者飞书、钉钉之类机器人,任务失败通知发送到相应地方 另外panic告警 2、bash 命令支持: 环境变量设定支持 / 命令宏替换支持

第一个可以作为一个 web_hook 配置项,任务失败时触发. 第二个可以展开说说,建议新起一个issues。