Экспоненциальная задержка вызовов API на стороне клиента

Я взаимодействую со сторонним API, который возвращает порог лимита вызовов и сколько вызовов порога я использовал до сих пор. Я считаю, что каждую минуту это 60 звонков. Через 1 минуту он сбрасывается.

Я хотел бы отложить вызовы API по мере того, как я все больше и больше достигаю этого предела, что-то вроде экспоненциальной кривой, где кривая удваивает максимальный порог при максимальном пороге.

Таким образом, при 0 это 0 задержка. На 60 это будет 120-секундная задержка.

И если они изменят лимит звонков, я хочу иметь возможность ответить и снова настроить мой максимальный лимит до 2 * нового лимита с кривой экспоненциальной сортировки.

Какой алгоритм я могу использовать для этого? (Предпочтительно VB.NET, иначе C#)

Sleeping for Math.Pow (x, y) -z даст вам экспоненциальную задержку, которая вам нужна, но мне нужно будет решить, какие значения вам нужны, чтобы соответствовать кривой, которую вы ищете ...

Richardissimo 13.04.2018 00:18

Почему не Delay(timeRemaining/callsRemaining) (в соответствующих единицах), чтобы оставшиеся вызовы распределялись равномерно?

John Wu 13.04.2018 00:28

@JohnWu, потому что большую часть времени я, скорее всего, не буду приближаться к порогу, и я не хочу без надобности дросселировать. Но в загруженные дни я все чаще обращаюсь к API, как и другие наши приложения, которые все вызывают один и тот же API. Мы также ведем переговоры с поставщиком о превышении нашего лимита.

John 13.04.2018 00:41

В чем смысл? Разве вы не искусственно реализуете то, что дросселирование API делает?

MickyD 13.04.2018 01:53
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
91
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы потенциально могли бы сделать что-то в этом роде, мы сделали это, чтобы не бомбардировать наш почтовый сервер, когда камера отключилась или произошла ошибка.

public static class Delay
{
     public static double ByInterval(int maximum, int interval) => Math.Round((maximum / (Math.Pow(2, interval) - 1)), 0);
}

Так, например, если максимальная задержка должна быть сто двадцать, а нам нужен интервал в три, на выходе будет пятнадцать. Я тоже округляю до целого числа. Не уверен, что это то, что вы ищете, но мы связали это с приложением, поэтому мы храним электронные письма до тех пор, пока не будет достигнут наш порог. Мы использовали наши значения, чтобы, например, приравнять секунды к (10000000 * Delay.By(120, 3)). Поскольку мы храним в первую очередь в виде клещей.

Это выглядит хорошо и, вероятно, сработает. Но я просто сэкономил на этом и вместо этого закодировал несколько множителей для нескольких конкретных диапазонов. Однако, спасибо!

John 13.04.2018 20:06

@John Да, не виню тебя. Шансы столкнуться с этим невелики, так зачем переоптимизировать.

Greg 13.04.2018 20:52

Другие вопросы по теме