При создании облачной функции с включенными повторными попытками, как я могу реализовать постепенное откат? - PullRequest
1 голос
/ 27 марта 2019

Я пытаюсь создать облачную функцию Google, которая загружает данные в API. Их руководства показывают примеры того, как избежать бесконечных повторных попыток (https://cloud.google.com/functions/docs/bestpractices/retries#functions-tips-retry-node6),, но я не могу найти руководство, объясняющее, как реализовать добавочный откат.

Если API выходит из строя, функция GCP, по-видимому, повторяется как можно быстрее. Идеальным вариантом будет увеличение задержки при увеличении числа повторных попыток.

У кого-нибудь есть примеры кода (узла) для реализации этого? Если не код, объяснение или план атаки также помогут.

Исследовал документы безрезультатно.

Ответы [ 3 ]

1 голос
/ 27 марта 2019

https://cloud.google.com/functions/docs/bestpractices/retries#set_an_end_condition_to_avoid_infinite_retry_loops

 /**
 * Background Cloud Function that only executes within
 * a certain time period after the triggering event
 *
 * @param {object} event The Cloud Functions event.
 * @param {function} callback The callback function.
 */
exports.avoidInfiniteRetries = (event, callback) => {
  const eventAge = Date.now() - Date.parse(event.timestamp);
  const eventMaxAge = 10000;

  // Ignore events that are too old
  if (eventAge > eventMaxAge) {
    console.log(`Dropping event ${event} with age ${eventAge} ms.`);
    callback();
    return;
  }

  // Do what the function is supposed to do
  console.log(`Processing event ${event} with age ${eventAge} ms.`);
  callback();
};

Кажется, что функция всегда будет повторяться принудительно. Однако вы можете убедиться, что актуальная важная часть функции вызывается в интервале задержки.

Просто сделайте следующее:

if(eventAge < 1000 && eventAge > 0)
{
   //Do stuff
}else if (eventAge < 3000 && eventAge > 1000) {
   // Do stuff
}(...)
else{
 return;
}

Таким образом, ваш фактический код будет выполняться только с интервалами, которые вы установили с помощью логики.

0 голосов
/ 22 апреля 2019

Проверка документов для GCS , есть довольно хорошее объяснение об усеченном экспоненциальном откате.

Однако, что более интересно, говорится:

Клиентские библиотеки Google Cloud для Node.js могут автоматически использовать Стратегии возврата для повторных запросов с параметром autoRetry.

Итак, копаясь в любой случайной @google-cloud библиотеке и ища эту опцию, мы получаем указание на этот фрагмент кода , обрабатывающий выход на пенсию.

Поскольку этот код находится под Apache License 2.0 , я предполагаю, что вы можете просто скопировать этот фрагмент кода, если вы соблюдаете лицензионные ограничения.

0 голосов
/ 28 марта 2019

В дополнение к официальной документации, которую вы просмотрели. Вы можете попытаться взглянуть на этот документ [1], даже если он указан для Cloud IoT Core. Вы найдете различные примеры в зависимости от среды выполнения. Это может помочь проиллюстрировать, как можно реализовать экспоненциальный откат.

[1] https://cloud.google.com/iot/docs/how-tos/exponential-backoff

...