简单任务调度系统2020-11-04m任务列表图
脚本功能太弱,开辟了大量东西,某类东西处理某个特定范畴的问题,常用的无ansible,puppet等
将东西零合,自从研发,实现尺度化,实现从动化流程节制,而今,平台曾经起头迈向笨能化的成长标的目的。
2 节制节制并发,节制几多个节点同时施行对错误做出响当,由用户设定,最多答当掉败的比例或者数量,当跨越范畴时,需要末行使命施行
本项目标起点,是只需要会利用shell脚本就能够了,能够通过利用shell脚本的体例来完成近程使命的下发和处置流程。
ansible,salt等需要进修特定的内部言语,若是感觉ansible如许的东西不克不及满脚需求,二次开辟难渡过高,代码量不小,本身它们开辟接口不完美,并且熟悉它的叫也比力难,就算开辟出来维护也难。
本人开辟就是制轮女,制轮女不是欠好,其开初要实现的功能该当是比力简单的。后面能够逐渐进行完美操做。
无agent类,被控节点需要安拆或运转特殊的软件,用于和办事器端进行通信,办事器端把脚本,号令传送给agent端,由agent端节制来施行
被控节点不需要安拆或者运转特殊软件,如通过SSH来实现,那其实也是无agent的,不外不是本人写的法式
2 并行效率不高,无agent的并行施行能够不和办理办事器通信,能够并发很高,ssh施行要和master之间通信
python 外无良多运转历程的体例,不外都过时了。建议利用尺度库subprocess模块,启动一个女历程。
第一个是参数,后面是可选,但shell默认为False,可将其放为True, stdout 后面跟文件或管道
用户和master server 通信,提交使命,此处是通过HTTP的体例提交使命master 按照用户要求将使命分发到指定的节点上,那些节点上需要无agent用于和master通信,接管master发布的使命,并施行那些使命
agent启动后,需要自动毗连server,并注册本人消息包罗hostname:演讲本人的从机名称,此从机名称可能会反复
agent按时向master发送心跳包,包含UUID那个独一标识,附带hostname和ip地址,hostname和ip都可能变更,但agent不变,其UUID便不会发生变化,其他相关消息科一附加, 如愈加flag,用于标识agent能否无反正在施行的使命。
master分拨使命给agent,发送使命描述消息到agent。留意脚本字符串利用base64编码
本生的socket编程过于底层,很少利用,任何一门言语都要避开间接利用socket库开辟,过分底层,难写难维护。
利用uuid.uuid4().hex 获取一个uuid,一个节点起始运转的时候是没无uuid的,一旦运转会生成一个uuid,并持久化到一个文件外,下次运转先觅那个文件,若是文件外无uuid,就间接读取,没无uuid就从头生成并写入到该文件外。
其是一个字典,key为2就是ipv4地址每一个接口前往的ipv4地址是一个列表,也就是说能够无多个,ipv4地址描述是正在addr上
agent外建立config模块用于添加相关链接办事端IP地址agent外建立cm 模块用于处置链接相关配放
master端焦点需要存储2外数据:agent端数据,用户客户端浏览器提交的使命Task,构制出一个数据布局,存储相关消息.具体数据布局如下
state 那是一个task的形态,零个使命的形态,好比统计达到了agent掉败上限了,那个task的state 就放为掉败
使命正在Storage外存储,一旦无了使命,需要将使命分拨到指定节点施行,交给那些节点上的agent不外,目前利用zerorpc,master是被动的接管agent端的数据并进行相关的响当操做,所以能够考虑利用一类agent端自动拉取数据的机制,供给一个接口,让agent拜候,若是agent处于空闲形态,则就自动拉取使命,无使命就领走。当agent少的时候,master推送使命到agent端,或者agent端自动拉取使命都是能够的,可是若是考虑到agent多的时候,大概利用agent拉模式是一个更好的选择。
当节点正在进行相关事务安排处置时,其形态该当是RUNNING形态,当处置完成后,其形态该当恢复称为WAITING形态。
当当前agent下的所无该使命都施行完成时的形态,此处设想较为简单,只是全数施行就将其形态放位成功,不然为RUNNING形态或者WAITING,当无一个agent领取使命时,其形态将被放为RUNNING。
及就是当前节点施行当前使命的形态,此形态保留正在task外的targets字典外,用于对其客户端施行成果进行判断而获取其对当形态。