Проблемы производительности долговременных функций - PullRequest
0 голосов
/ 23 октября 2019

Ниже, если в моем коде оркестратора я использую комбинацию цепочек и разветвления / разветвления

    const df = require("durable-functions");
const geocodeActivity = "getActualData";
const getDataActivity = "getDataFromDB";
const ld = require('lodash')

module.exports = df.orchestrator(function* (context) {
const outputs = [];
const parallelTasks = [];
try {
let payload = context.bindingData.input;
payload.dataType = "truth";
let truthData = yield context.df.callActivity(getDataActivity, payload);

    for (const data of truthData) {
        const truthDataObj = payload;
        truthDataObj.data = data;
        //console.log("ORCHESTRATOR: " + JSON.stringify(truthDataObj));
        parallelTasks.push(context.df.callActivity(geocodeActivity, ld.cloneDeep(truthDataObj)));
    }
    let actualData = yield context.df.Task.all(parallelTasks);
    let uploadDataInfo = payload;
    uploadDataInfo['actual_data'] = actualData;
    let uploadedCsv = yield context.df.callActivity("uploadActualData", uploadDataInfo);
    if (uploadedCsv == false || uploadedCsv == null || uploadedCsv === undefined) {
        outputs.push("failed");
    } else {
        outputs.push(uploadedCsv);
    }

} catch (err) {
    context.log(JSON.stringify(err));
    outputs.push('-1');
}
return outputs;

У меня ниже наблюдений

Много раз оркестровщики застревают в работе

1-е действие, которое вызывается для getDataActivity, возвращает запись из БД, которая может доходить до миллиона в строках, а каждая строка содержит по меньшей мере 20 столбцов

Затем я перебираю каждую запись и выполняю некоторые действия

Но я много раз замечал, что он зависает при работе или иногда перезапускается сервер, на котором работает оркестратор

Это как-то связано с огромным количеством данных, которые возвращаются из"GetDataActivity"? Если да, что вы посоветуете здесь, как я могу попытаться решить эту проблему

1 Ответ

0 голосов
/ 23 октября 2019

Эта ошибка возникает из-за нехватки памяти. Потребление памяти в куче превышает лимит, и JavaScript завершает ваш процесс. Чтобы установить его выше, вы можете использовать --max-old-space-size. Но не устанавливайте слишком высокое значение, поскольку это приведет к нехватке памяти в вашей системе.

использование --max-old-space-size:

node --max-old-space-size=4096 index.js
...