文档
设计概况
背景情况
许多批量任务可以很容易地细分为可以平行执行的工作单位. 在亚马逊EC2等云服务上,运行一个单服务器100小时的费用与运行100服务器1小时的费用相同. 换句话说,对于可以平行处理的问题,这样就可以在必要的云服务器上分配批量,以便完成在 不到一小时 为了充分利用这些经济学,一个易于使用的自动系统,即根据需要可靠地发射和销毁服务器实例并在其中分配工作, 需要的,请说明
术语和定义
- 任务: 代表工作原子单位的 shell 命令
- 任务: 工作序列
- 任务模板: 预配置的任务
- 会话: 特定时间运行的任务状态。 包括任务配置、 已完成的工作状况以及待执行的工作列表 。
- 拆分( E): 任务岗位的工人人数由各行各业。
- 工人: 运行着 SSH 的服务器, 我们执行的任务。 这可以是持续服务器, 也可以是动态分配的 EC2 云服务器实例 。
- TurnKey Hub 密码资源: a 网络服务 用于启动和销毁预配置的 TurnKey 服务器,以完成特定任务。
特征
任务只是简单的 shell 命令远程执行:没有特殊的API. 壳牌指令被很好的理解,语言不可知性,易于测试和发展.
通过命令行选项/环境进行临时任务配置:云盘可以直接从命令行使用,这对一次性任务有用,或者用于实验/调试新的例行任务.
预配置的任务模板:常规任务的配置参数可以嵌入到一个预配置的任务模板中,它本身就像云塔克一样可以执行,并继承其界面.
在引擎盖下,通过定义继承任务的一个Python类来实施任务模板:
#!/usr/bin/python
from cloudtask import Task
class HelloWorld(Task):
DESCRIPTION = "This is a hello world cloudtask template"
COMMAND = 'echo hello world'
SPLIT = 2
REPORT = 'mail: cloudtask@example.com liraz@example.com'
HelloWorld.main()
以实时记录方式透明执行:云盘任务提供实时记录,方便用户跟踪任务进度. 例如,在SSH上执行的任何命令的进展都可以跟随工人的会话日志:
cd ~/.cloudtask/$session_id/workers/ tail -f 1234
过失容忍: CloudTask 设计是为了可靠地在多种类型的失败中生存下来. 例如:
- 工人服务器不断被监测失败,这样,在失败服务器上执行的任务就可以被重新导向工作服务器. 只要一个工人能活下来,一项任务就将继续执行。
- 用户可以指定每个工作时间的超时,这样,无论出于何种原因冻结的工作都会优雅地超时,而不会无限期地干扰工人。
- 以防Hub API故障云盘会等待几秒钟再试一次.
中止和恢复能力:一个任务可以随时通过按下Ctrl-C,或者向主进程发送TERM信号来中止. 在自动启动的所有服务器实例被销毁后,会话状态将被保存,以便从它遗留的地方以后恢复.
报告钩:当一个会话的执行完成一个报告钩钩可以配置来进行任意动作(例如发送通知电子邮件,更新数据库等). 目前支持三种报告处理者:
- 邮件:向一个或多个收件人发送带有会话日志的电子邮件。
- 嘘:执行 shell 命令。当前工作目录设置为会话路径,环境包含会话上下文。
- 树皮: 执行 Python 代码的任意片段。会话和任务配置可以作为本地变量访问 。
如何运作
用户执行任务时,执行以下步骤:
创建了临时 SSH 会话密钥 。
给工人的初始认证假设您已经设置了SSH代理或等效(云任务不支持密码认证).
临时会话键将在任务运行期间加入工人授权的键,然后删除。 我们需要授权一个临时会议钥匙,以确保不依赖SSH代理,而接触工人。
工人得到分配。
工人云服务器通过云任务自动启动,以满足请求的分割,除非通过--workers选项提供了足够的预先分配的工人.
可以在TurnKey Core之上提供TKLBAM备份id,以安装所需的任务执行依赖性(如脚本,软件包等).
工人设置.
在分配工人后,将设立工人。 临时会话键添加到授权密钥中, 覆盖应用到根文件系统( 如果用户已配置了 overlay) , 并且执行预命令 (如果用户已配置了预命令).
工作执行。
CloudTask 将构成任务的所有任务列表输入任务队列 。 每个远程工人都有一个本地监督程序,从排队中读出一个工作命令,然后在工人身上执行SSH.
如果 --timeout 配置完毕, 任务可能在其完成前超时 。
工作执行期间,监管过程会定期检查工人是否每30秒还活着,如果工作没有产生任何控制台输出. 如果工人不再能够达到,则被摧毁,中止的工作被重新排入工作队列,由另一名工人执行。
工人清理
当输入队列中没有留下工作命令提供工人时,通过运行邮局命令来清理,从授权的会话键中移除临时会话键 键。
如果云图启动工人,它也将在这个时候摧毁,以停止增加的使用费。
届会报告
报告钩可以配置,一旦会话执行完毕,即可执行动作。
邮件:使用 /usr/sbin/sendmail 发送一个简单的未加密的电子邮件,其中包含正文中的会话日志.
sh:执行 shell 命令,任务配置嵌入环境,当前工作目录设置到会话路径. 您可以像这样测试执行背景 :
--report='sh: env && pwd'py: 执行 Python 代码片段, 将会话值设定为本地变量。 您可以像这样测试执行上下文 :
--report='py: import pprint; pprint.pprint(locals())'