ドキュメント
デザイン概要
背景:
複数のバッチタスクは、並列で実行できる作業単位に簡単に分解できます。 Amazon EC2などのクラウドサービスでは、1時間100時間サーバーを1台稼働させると、1時間100サーバの稼働率が1時間に抑えられます。 言い換えれば、並列化できる問題は、ジョブの実行を完了するために必要なように、複数のクラウドサーバーにバッチを配布する有利になります わずか1時間。 これらの経済を十分に活用するために、使いやすく、サーバーインスタンスを確実に起動および破壊するための自動システムが要求され、それらの間で作業を分配する 必須。
規約と定義
- 求人情報: 作業の原子単位を表すシェルコマンド
- タスク: ジョブのシーケンス
- タスクテンプレート: 事前構成されたタスク
- セッション: タスクの状態は特定の時間で実行されます。これはタスク設定、実行終了したジョブの状態、ジョブの一覧が実行中状態を含みます。
- ツイート: 作業者のタスクジョブが分割される件数。
- ワーカー: ジョブを実行するSSHを実行しているサーバー。これは永続サーバーか、動的に割り当てられたEC2クラウドサーバーインスタンスです。
- 名称: TurnKey Hub: ? ウェブサービス そのクラウドタスクは、指定されたタスクを実行するためにあらかじめ設定されたTurnKeyサーバーを起動し、破壊するために使用することがあります。
仕様
ジョブは、リモートで実行される単純シェルコマンドです。: 特別な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 上で実行されるコマンドの進捗は、ワーカーのセッションログをtailing で続くことができます。
cd ~/.cloudtask/$session_id/workers/ tail -f 1234
故障許容: CloudTaskは、複数のタイプの障害を確実に生き残るように設計されています。例えば:
- 作業者サーバーは、失敗したサーバーで実行するジョブが、作業サーバーに再ルートされる可能性があるため、障害を常に監視しています。 作業は、作業者が生き残る限り、作業が継続して実行されます。
- ユーザーは、作業者の不明確な作業を妨げずに、何らかの理由で解放するジョブが、作業者の不明確な作業を終わらせずに、優雅に時間を計るように、ジョブ毎回タイムアウトを指定できます。
- Hub API 障害クラウドタスクの場合、数秒待ってから再度試行します。
能力を回復し、再開して下さい: タスクは、Ctrl-C を押すか、TERM 信号をメインプロセスに送信することでいつでも中止できます。 起動したサーバインスタンスが全て破棄されると、セッションの状態が保存され、その場所から後で再開されることがあります。
レポート・ホック: セッションの実行がレポートの実行が完了すると、任意のアクションを実行するように設定することができます(例えば、通知メールの送信、データベースの更新など)。 レポートハンドラの3種類が現在サポートされています。
- 電子メール: セッションログにメールを1つ以上送信する。
- シュミ: シェルコマンドを実行します。現在の作業ディレクトリはセッションパスに設定され、セッションコンテキストで環境がポップアップされます。
- ピーピー: Python コードの任意のスニペットを実行します。セッションとタスクの設定は、ローカル変数としてアクセス可能です。
作品の使い方
タスクを実行すると、次の手順を実行します。
一時的なSSHセッションキーが作成されます。
ワーカーへの初期認証は、SSH エージェントまたは同等の設定を設定したとします(クラウドタスクはパスワード認証をサポートしていません)。
タスク実行期間のワーカーの認証鍵に仮セッションキーを追加し、削除します。 SSHエージェントに依存することなく、作業員へのアクセスを確保するために、一時的なセッションキーを認証する必要があります。
労働者は割り当てられます。
ワーカークラウドサーバーは、クラウドタスクが自動で起動し、--workersオプションで事前割り当てワーカーが提供されている場合を除き、リクエストされた分割を満たすことができます。
TurnKey Core の上で必要なジョブ実行依存(スクリプト、パッケージなど)をインストールするには、TKLBAM バックアップ ID が提供される場合があります。
ワーカーのセットアップ。
労働者が割り当てられた後、それらはセットアップされます。 権限のあるキーに仮セッションキーを追加し、オーバーレイはrootファイルシステム(ユーザーがオーバーレイを設定している場合)に適用され、プリコマンドが実行されます。 (ユーザがあらかじめコマンドを設定している場合)
ジョブの実行。
CloudTask は、タスクをジョブキューに引き上げる全てのジョブのリストをフィードします。 リモートワーカーには、ジョブコマンドをキューから読み出し、ワーカーでSSH上で実行するローカルスーパーバイザープロセスがあります。
--timeout が設定されている場合、ジョブが終了する前にタイムアウトされる場合があります。
ジョブが実行中、監視プロセスは、ジョブが任意のコンソール出力を生成しない場合、作業員が30秒ごとに生き残っていることを定期的に確認します。 ワーカーが到達できなかった場合、それは破壊され、中絶されたジョブは、別のワーカーで実行するためのジョブキューに戻ります。
作業者のクリーンアップ
ジョブコマンドが入力キューに残っていない場合、後コマンドを実行してワーカーをクリーンアップし、権限の一時的なセッションキーを削除 キー。
クラウドタスクがワーカーを立ち上げると、この時点では、割増量使用料を削減します。
セッションレポート
セッションが実行終了したら、アクションを実行するレポートのホックを設定できます。 3種類のレポートのホックがサポートされています。
mail: /usr/sbin/sendmail を使用して、セッションログをボディに含んだ単純な暗号化されていないメールを送信します。
sh: シェルコマンドを実行し、環境に埋め込まれたタスク構成と、セッションパスにセットされた現在の作業ディレクトリがセットされます。 このように実行コンテキストをテストできます:
--report='sh: env && pwd'py: ローカル変数として設定されたセッション値で Python コードスニペットを実行します。このような実行コンテキストをテストできます。
--report='py: import pprint; pprint.pprint(locals())'