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()
    
  • 相关阅读:
    初心,勇敢~
    京东云,100倍故障时长赔付,呵呵
    京东万象数据接口,钱没花完,接口404,客服是白痴,无法维权
    随便写点
    关于UltraEdit的两个小问题
    Java
    2016年12月12日 回忆录随笔----------记录庸碌无为的一年四个月零十一天(一)
    iOS开发学习笔记
    sprintf函数php的详细使用方法
    BMS开发日记
  • 原文地址:https://www.cnblogs.com/laoniu85/p/5107959.html
Copyright © 2011-2022 走看看