lenboo opened a new issue #4355:
URL: https://github.com/apache/incubator-dolphinscheduler/issues/4355


   
   
   ## 1. API修改部分
      
      - api收到执行工作流命令,或者暂停/停止命令,将命令发送给指定的scheduler/master,失败则重试三次,三次失败以后抛出失败。
    
   ## 2. 重构通信功能   
   
   -  同步: 发送线程send消息(阻塞) -> 接收方收到消息,并且处理消息(存db,写数据等)->接收方返回消息给发送方 -> 发送方解除阻塞
       
   - 异步: 发送线程send消息->发送线程缓存消息-> 接收方收到消息,并处理->处理完消息回复发送方command -> 
发送方收到command,移除缓存消息
     
   ## 3. 新增scheduler功能
   
     - 实现ha功能
     - 实现scheduler启动流程,先扫描cmd表,再启动监听cmd功能,将cmd数据缓存到本地队列
     - 监听cmd接收处理流程(同步)/定时(异步)
     - cmd缓存队列处理线程,将cmd发送给master
     - 实现cmd发送策略,可以同时支持多个策略,且可以易扩展策略,例如:cmd的优先级,master的负载。。
   
   ## 4. 容错流程修改:
     - master容错
       - 容错master负责的工作流实例: 找到未完成的工作流实例,生成容错cmd,将cmd发给active的scheduler. 
       - 找到master负责的未完成的任务实例,检查(任务实例worker是否活着+worker启动时间<任务开始时间)
       - 找到还未处理完的command,发送到scheduler进行重新处理(去掉host,重新分配master)
     
     - worker容错
       - worker挂掉,每个master负责容错自己的任务,跳过不属于自己的任务。
       
   ## 5. master执行流程
     - 修改master处理工作流线程池,从获取cmd到生成工作流实例,到提交完开始任务结束
     
         * master提交任务的时候,发现此任务正在执行,需要通知任务所在的worker,将worker汇报的host更换到当前master
     
     - 增加master任务监听,从worker/api/master收到任务/工作流状态,将接收到的任务状态存到本地状态队列。
     
     - 增加master任务状态处理线程池,同一个工作流的所有任务状态只能顺序处理
     
        * master接收到任务,需要判断此任务所属的DAG是否本master处理,如不是,则不能处理。
     
     - 增加轮询线程,针对需要知道外部工作流/任务状态的需求(依赖/子工作流),进行轮询。
     
     - 增加超时监控队列,将需要监控的任务/工作流加入队列,由一个时间轮/线程进行超时监控,发生超时,则触发超时处理。
   
     - master监听cmd线程,对cmd标记,cmd缓存到本地cmd队列。
     - master处理不完的cmd可以反馈回scheduler进行重新分发
     - 主动上报资源使用情况,master向scheduler汇报资源使用情况。
   
   ## 6. 定时
   1. master定时:防止一个定时触发多次:master将定时发给scheduler过程中可能会有多次定时出现。
      - 对cmd表和工作流实例表增加唯一索引防止问题产生 


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to