【App Service】WebJobs 多可以下下書き:誰が実行する、いつ実行しますか? – Coder


Azure App Service が 3 つのインスタンスに拡張されました,WebJob 会会也也が 3 つ実行します 份?

毎日レポートを生成すると、レポートは 3 つ生成されませんか?

在门户里 手動で[一度実行]をクリックしてから、どのインスタンスを実行しますか?

答えは Web ジョブの種類によって異なり、App Service インスタンスの数のみに基づいて判断することはできません。

すべてのアプリケーション例でデフォルトで実行されます。

手動トリガー アプリケーションに 3 つのインスタンスがあるためではなく、1 つのインスタンスの実行ごとに時限トリガーします。 アプリケーションが 3 つのインスタンスを実行しているためではありません。

この項の文章は、PowerShell スクリプトが実行する名前の電子メールに使用され、インスタンス ID、UTC 時刻、および実行中のバッチを記録し、「どのインスタンスで実行されたか」をログから直接判断できるようにします。

门户中国ダウンロード下ダウンロード用法是 継続的に、トリガーされた/マニュアル 和 トリガーされた/プログラマー。

Microsoft ドキュメントの明確な説明では、スケジュールもトリガーされ、手動操作からのトリガー ソースのみが時間に変更されます。

【App Service】WebJobs 多可以下下書き:誰が実行する、いつ実行しますか? – Coder

ターゲット アプリケーションが 3 つのインスタンスで安定して実行されていると仮定すると、動作は次のようになります。

使用方法 フロアタイプ 多手机下載设计 安定した状態が期待される場合の 3 つの例
実行を継続する,複数のインスタンス 継続的に デフォルトでは、アプリケーションのすべてのインスタンスがタスクを開始します。 3 份手机手机设计
実行を継続する,単一インスタンス 継続的に 配置 is_singleton: true その後、タスクを 1 つのインスタンスでのみ実行します 1 つのタスクがまだ実行中です
手動トリガー トリガーされた トリガーが選択されるたびに、実行するサンプルを選択します 「一度実行」をクリックすると、3 回ではなく 1 回の実行が開始されます。
トリガー時間 トリガーされた 各プランは 1 回の実行インスタンスによってトリガーされます 通常、各トリガーポイントは 3 つのシェアではなく 1 つの実行を開始します。

ここでの「1 つのインスタンス」とは、「同じマシン内で永続的に固定される」という意味ではありません。

また、プラットフォームは、会依次车让 A、B、C を手動でトリガーすることを約束していないため、連続して数回クリックしても画井落上上にある場合は、上記のルールに違反しません。

実験の準備

PowerShell スクリプトの同じ段落で、現在の Web ジョブの実行時間、インスタンス ID などの情報を出力し、マルチインスタンス実行かシングルインスタンス実行かを判断します。

param(
    [ValidateRange(1, 3600)][int]$HeartbeatSeconds = 10,
    [ValidateRange(0, 3600)][int]$WorkSeconds = 10,
    [ValidateRange(0, 10000)][int]$MaxHeartbeats = 0,
    [string]$OutputRoot
)

$ErrorActionPreference = 'Stop'
$instance = $env:WEBSITE_INSTANCE_ID
if (-not $instance) { $instance = 'local-not-azure' }
$job = $env:WEBJOBS_NAME
if (-not $job) { $job = 'local-demo' }
$type = $env:WEBJOBS_TYPE
if (-not $type) { $type = 'triggered' }
$session = [guid]::NewGuid().ToString('N')

if (-not $OutputRoot) {
    if ($env:WEBSITE_INSTANCE_ID -and $env:HOME) {
        $OutputRoot = Join-Path $env:HOME 'data\webjob-instance-demo'
    } else {
        $OutputRoot = Join-Path ([IO.Path]::GetTempPath()) 'webjob-instance-demo'
    }
}
$safeJob = $job -replace '[^a-zA-Z0-9_-]', '_'
$safeInstance = $instance -replace '[^a-zA-Z0-9_-]', '_'
$directory = Join-Path (Join-Path $OutputRoot $safeJob) $safeInstance
$null = New-Item -ItemType Directory -Path $directory -Force
$logPath = Join-Path $directory "$session.jsonl"

function Write-Record([string]$EventName) {
    $record = [ordered]@{
        utc = [DateTime]::UtcNow.ToString('o')
        event = $EventName
        job = $job
        type = $type
        instance = $instance
        computer = $env:COMPUTERNAME
        processId = $PID
        session = $session
        platformRunId = $env:WEBJOBS_RUN_ID
    }
    $line = $record | ConvertTo-Json -Compress
    Write-Output $line
    # One file per process session: instances never append to the same file.
    Add-Content -LiteralPath $logPath -Value $line -Encoding UTF8
}

function Test-Shutdown {
    return ($env:WEBJOBS_SHUTDOWN_FILE -and
        (Test-Path -LiteralPath $env:WEBJOBS_SHUTDOWN_FILE))
}

function Wait-OrShutdown([int]$Seconds) {
    for ($i = 0; $i -lt $Seconds; $i++) {
        if (Test-Shutdown) { return }
        Start-Sleep -Seconds 1
    }
}

Write-Record 'START'
if ($type -eq 'continuous') {
    $count = 0
    while (-not (Test-Shutdown)) {
        Write-Record 'HEARTBEAT'
        $count++
        # A finite limit is for LOCAL tests only. Azure continuous jobs restart.
        if ($MaxHeartbeats -gt 0 -and $count -ge $MaxHeartbeats) { break }
        Wait-OrShutdown $HeartbeatSeconds
    }
} else {
    # Simulate a short task. This delay is not an exactly-once guarantee.
    Wait-OrShutdown $WorkSeconds
}
if (Test-Shutdown) { Write-Record 'STOP_REQUESTED' }
else { Write-Record 'END' }

コンテンツ画像のダウンロードを run.ps1 に入れて、個別に圧縮された画像の複数の zip ドキュメントを作成します。連続マルチ.zip 、 連続シングル.zip、マニュアル.zip 和 プログラムされた.zip。

次に、App Service Web ジョブ ポータルを通じて、4 つの Web ジョブを個別に作成しました。App Service によって作成された WebJob ドキュメントを参照してください。

画像

テスト結果

1:継続的-多数、 デプロイメント結果の複数のインスタンスを継続的に実行します。3 か月以上、この Web ジョブは、結果の 1 つの例で実行されます。

画像

2:連続単独、 継続的に実行される単一のインスタンスを 3 つのインスタンスの環境にデプロイした結果、この Web ジョブは 1 つの環境にのみ存在し、

画像

3:マニュアル,Web ジョブを手動でトリガーする,3 つのインスタンスの環境で,毎回 1 つのインスタンスでのみ実行します。

画像

4:プログラマー,時間駆動の Web ジョブ、3 つのインスタンスの環境では、一度に 1 つのインスタンスでのみ実行されます。ただし、一度実行されたインスタンスは変更される可能性があります。

画像

アプリケーションサービスWebJobs概要:

Azure App Service 上のタイマーでトリガーされる Web ジョブを複数の App Service インスタンスにスケールするにはどうすればよいですか?



Source link

By 政権

Leave a Reply

Your email address will not be published. Required fields are marked *