背景
私たちが直面している問題は、ビデオエンコードを行い、クラスタ内の複数のノードに負荷を分散したいということです。負荷を分散する動的サービス作成
特定のノードのビデオエンコードジョブの数を最大限に制限したいと考えています。小さなビデオエンコーディングジョブをクラスタ内の特定のノードグループに送信し、長いビデオエンコーディングジョブをクラスタ内の別のノードグループに送信することもできます。
これは、大きなジョブを別々のノードのプールに分割することで、クライアント間の公平性を維持することを目的としています。これにより、小さなエンコードジョブが長いエンコードジョブを実行している1人のテナントによってブロックされたり抑制されたりしないようになります。サービスファブリック
を使用して
は、我々は、ビデオ符号化のためのASFサービスを使用する予定。これを念頭において、各ジョブのサービスを動的に作成するアイデアがありました。配置制約を使用して、ジョブを実行するノードのプールを決定できます。メモリ使用量、CPU使用率に基づくカスタムメトリックノード上のアクティブ・ジョブの数を制限するために使用できます。
この方法では、ジョブを配布するノードは、配置制約とメトリックを満たす新しいサービスを現在作成できるかどうかをポーリングする必要があります。
質問
- サービスがノード上に置くことができないときはどうなりますか? (私はCreateServiceAsyncを使用しますか?)
- このポーリングは非常に高価でしょうか?
私たちのビデオエンコード実行ファイルは、約80MBのサービスと共にパッケージ化されています。これにより、新しいサービスのスピンアップには長い時間がかかりますか? (分/秒)
これに代わる方法として、大きなジョブプールが1つのキューからプルし、小さなジョブプールが別のキューからプルする信頼性の高いキューベースのシステムを使用できます。これはもっと簡単な方法ですが、Service Fabricの機能のいくつかを逃していないことを確認するために、すべてのオプションを調べたいと思います。あなたが提案する別のよりよい方法がありますか?