跳到正文
TURNKEYGNU / LINUX
应用文档博客截图GitHubTurnKey Hub
文中文
EnglishEspañol中文日本語PortuguêsDeutsch
ưμ㼯A/设计概况

文档

设计概况

背景情况

许多批量任务可以很容易地细分为可以平行执行的工作单位. 在亚马逊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信号来中止. 在自动启动的所有服务器实例被销毁后,会话状态将被保存,以便从它遗留的地方以后恢复.

  • 报告钩:当一个会话的执行完成一个报告钩钩可以配置来进行任意动作(例如发送通知电子邮件,更新数据库等). 目前支持三种报告处理者:

    1. 邮件:向一个或多个收件人发送带有会话日志的电子邮件。
    2. 嘘:执行 shell 命令。当前工作目录设置为会话路径,环境包含会话上下文。
    3. 树皮: 执行 Python 代码的任意片段。会话和任务配置可以作为本地变量访问 。

如何运作

用户执行任务时,执行以下步骤:

  1. 创建了临时 SSH 会话密钥 。

    给工人的初始认证假设您已经设置了SSH代理或等效(云任务不支持密码认证).

    临时会话键将在任务运行期间加入工人授权的键,然后删除。 我们需要授权一个临时会议钥匙,以确保不依赖SSH代理,而接触工人。

  2. 工人得到分配。

    工人云服务器通过云任务自动启动,以满足请求的分割,除非通过--workers选项提供了足够的预先分配的工人.

    可以在TurnKey Core之上提供TKLBAM备份id,以安装所需的任务执行依赖性(如脚本,软件包等).

  3. 工人设置.

    在分配工人后,将设立工人。 临时会话键添加到授权密钥中, 覆盖应用到根文件系统( 如果用户已配置了 overlay) , 并且执行预命令 (如果用户已配置了预命令).

  4. 工作执行。

    CloudTask 将构成任务的所有任务列表输入任务队列 。 每个远程工人都有一个本地监督程序,从排队中读出一个工作命令,然后在工人身上执行SSH.

    如果 --timeout 配置完毕, 任务可能在其完成前超时 。

    工作执行期间,监管过程会定期检查工人是否每30秒还活着,如果工作没有产生任何控制台输出. 如果工人不再能够达到,则被摧毁,中止的工作被重新排入工作队列,由另一名工人执行。

  5. 工人清理

    当输入队列中没有留下工作命令提供工人时,通过运行邮局命令来清理,从授权的会话键中移除临时会话键 键。

    如果云图启动工人,它也将在这个时候摧毁,以停止增加的使用费。

  6. 届会报告

    报告钩可以配置,一旦会话执行完毕,即可执行动作。

    1. 邮件:使用 /usr/sbin/sendmail 发送一个简单的未加密的电子邮件,其中包含正文中的会话日志.

    2. sh:执行 shell 命令,任务配置嵌入环境,当前工作目录设置到会话路径. 您可以像这样测试执行背景 :

      --report='sh: env && pwd'
    3. py: 执行 Python 代码片段, 将会话值设定为本地变量。 您可以像这样测试执行上下文 :

      --report='py: import pprint; pprint.pprint(locals())'
TURNKEYGNU / LINUX

无需从零开始,掌控自己的基础设施。

探索 TurnKey
关于文档常见问题博客GitHub
自由开源默认安全随时可部署