Mesos のさまざまなコンポーネントがどのように連携するかを理解しようとしていますが、次のアーキテクチャの概要を含む この優れたチュートリアル が見つかりました。
私はこれについていくつかの懸念がありますが、明確にされていません(記事でも公式でも Mesos docs ):
素晴らしい質問です! Rendler のようなサンプルフレームワークを見てみると本当に役立つと思います。これはおそらくあなたの質問のほとんどに答え、フレームワーク内部の感覚を与えるでしょう。
この後もまだ開いているかもしれない質問に答えてみましょう。
スケジューラーは特別なノードではオンになりませんが、スケジューラーは(分散システムの任意の部分と同様に)フェイルオーバーできることに注意してください。
Rendlerまたは フレームワーク開発ガイドを参照 をご覧ください。
Rendlerは、タスクとエグゼキュータの関係を理解するための良い例だと思います。 githubのメインページでREADME/descriptionを読み始めてください。
エグゼキュータは、そのようなエグゼキュータを必要とする最初のタスクがこのノードに送信されるときに、各ノードで開始されます。この後、それはそのノードに残ります。
これがお役に立てば幸いです。
Js84の優れた応答に追加するには、
resourceOffers()
コールバックでリソースオファーの取得を開始します。このコールバックでは、スケジューラーはサブセット(またはすべて)提供されているリソースのすべて。タスクの完了/失敗を処理するために、statusUpdate()
コールバックも実装することをお勧めします。 Marathon/Chronos/Aurora/Kubernetesのような既存のフレームワークで十分な場合は、独自のスケジューラを実装する必要がない場合もあることに注意してください。CommandInfo
内に埋め込むのではなく、TaskInfo
に直接ExecutorInfo
を指定することにより)。ただし、カスタムエグゼキュータを構築する場合は、少なくともlaunchTask()
を実装する必要があり、理想的にはkillTask()
も実装する必要があります。sleep 1000
やecho "Hello World"
のような単純なLinuxコマンド、またはimage : 'mysql'
のようなDockerコンテナ(ContainerInfo
経由)です。または、カスタムエグゼキュータを使用する場合、エグゼキュータはタスクとは何か、およびその実行方法を定義するため、代わりにタスクをエグゼキュータのプロセスで別のスレッドとして実行するか、単一のキューのアイテムにすることができます。スレッド化されたエグゼキュータ。Schedulers:は、オファーを受け入れるか拒否するための戦略です。独自に作成できるスケジューラー、またはクロノスのような既存のスケジューラーを使用できます。スケジューラーでは、使用可能なリソースを評価してから、受け入れるか拒否する必要があります。
スケジューラー機能:例は、実行に8 CPUを必要とするタスクがあると仮定するようなものですが、mesosからのオファーは6 CPUである可能性があり、この場合、uは拒否できます。
エグゼキュータ機能:エグゼキュータはタスクの状態関連情報を処理します。 mesosスレーブで割り当てられたタスクのステータスなど、実装する必要のあるAPIのセット。エグゼキュータが実行されているmesosスレーブで現在使用可能なCPUの数はいくつですか。
エグゼキュータの具体例:クロノス
動的に/オンザフライでインストールおよび実行されます:これらは不可能です。エグゼキュータを事前に設定する必要があります。ただし、自動スケーリングを使用してエグゼキュータを複製できます。