使用 Node SDK 将任务发送到 Azure Batch Jobs

Sending tasks to Azure Batch Jobs with Node SDK

我正在尝试将大量任务发送到 Azure Batch。一共有三个作业,总共有 67,000 个任务分布在这些作业中。

当我只发送几个任务时,一切正常,当我打开它发送完整列表时,它似乎失败了,但没有任何有用的错误消息。总数有某种限制吗?或者我可以发送它们的速率?我正在使用 Azure Functions、Node SDK 并承诺异步添加任务。

                async.each(tasks, function(task, callback) {
                    var taskID = task.id + '_process';

                    var config = {
                        id: taskID,
                        displayName: 'Render portion ' + task.id + ' in job ' + task.job.id,
                        commandLine: "python3 main.py '" + JSON.stringify(task) + "'"
                    };

                    batchClient.task.add(task.job.id, config).then(function(result) {
                        context.log('Task for portion : ' + task.id + ' submitted successfully');
                        callback();
                    }).catch(function(error){
                        context.log('Task failed to be added');
                        callbacK(error);
                    });

                }, function(error) {
                    if( error ) {
                        context.log('Error adding task.');
                        context.res = { body: error };
                        context.done();
                    } else {
                        context.log('All tasks have been queued successfully');
                        context.res = { body: 'All tasks have been queued successfully' };
                        context.done();
                    }
                });

在这一点上,即使只是出现错误,我也会很高兴,只要能给我一些继续下去的东西。我试过发送 10 个任务,它工作正常,发送 65,000 个任务,它无声地失败了。

我建议您使用 Add task collection API 而不是添加任务 API,因为集合 API 在单个 API打电话。这应该可以让您将 API 调用的总数减少 100 倍。

如果您使用那个 API 并且仍然遇到问题,则可能是 SDK 中存在一些具有非常高并行度的问题...可能值得尝试删除对 Batch 和确认您现有的代码没有问题(只需将其替换为静态 URL 上的简单 http 获取?)