zoukankan      html  css  js  c++  java
  • 调度思路+EurekaServer获得当前机器的instanceid

    调度思路

    概念
    Build 一次完整的构建 整个流水线
    Task(BuidStep) 流水线中的某一个步骤单元

    先假设对于一个Build(流水线)而言里面所有Task是串行执行的
    并且各Task之间不需要文件共享

    前端:

    1. 创建一个Build及Build里的所有Task 先持久化,然后将Build的ID发送给调度服务。

    调度:
    2.调度服务:

    收到一个Buildid,取出Build信息
    查看有没有空闲的机器 
       有空闲的机器 
              查看是否有需要执行的Build(先检查传入的Build,如果传入的Build并不需要执行了,则再看有没有其他要执行的Build,此处容易产生竞争):
                     有要执行的Build:
                           有要执行的Task:
                                  调用BuildService(发送taskId)执行对应的任务,在Task上记录执行者的id.
                           没有要执行的任务:
                                 更新Build的状态,回到检查是否有要执行的Build
                     没有要执行的Build:
                           什么也不做
       没有空闲的机器:
              则什么也不做
    
    收到一个taskId,通过taskId取出Build信息,执行与收到Build相同的逻辑。
    

    构建服务:

    收到一个taskId
    
    将这个task标记为正在执行的状态,如果发现这个task已经被别人执行,则什么也不用做.
    
    执行这个任务  将自己标记为忙的状态
           任务执行完毕后异步更新任务的状态,并且通知调度服务该taskid执行完毕. 将自己标记为空闲的状态.
    
    

    问题:

    中间出现异常时,可能导致后续的任务也没有执行,或过了很久才被别的条件给触发。
    可能需要更多的规则.

    如何实现异步持久化数据:

    将sheduleBuild的FutureTask保存到容器对象中,使用定时器检查该对象的状态。如果对象为isDone则持久化相关的数据.
    
    
    DiscoveryManager.getInstance().discoveryClient.instanceInfo.getInstanceId()
    
  • 相关阅读:
    VBA中的ColorIndex信息
    登录测试页面
    HttpHandler HttpModule入门篇
    vs 2005的条件断点(调试多线程必会)
    VBA中操作Excel的部分方法代码示例
    c# 线程同步: 详解lock,monitor,同步事件和等待句柄以及mutex
    一个对Entity Framework数据层的封装
    中华人民共和国 第二代身份证 号码规则
    什么是.NET应用程序域
    VBA编程常用语句(转载)
  • 原文地址:https://www.cnblogs.com/laoniu85/p/5107959.html
Copyright © 2011-2022 走看看