Как правильно планировать вызовы REST API в многопоточной среде с ограниченной скоростью - PullRequest
0 голосов
/ 06 мая 2020

Я пишу многопоточное приложение в bash 4.4.20 с несколькими серверами. Отдельные потоки читают сообщения AWS SQS, затем обрабатывают файлы и затем выполняют вызовы REST API.

Скорость REST API ограничена 8 вызовами в секунду. На ответ на каждый звонок потребуется около 1/2 секунды.

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

Какие рациональные концепции проектирования и передовые практики следует учитывать при попытке запланировать различные потоки и серверы, чтобы ограничить себя 8 вызовами в секунду, особенно когда они не взаимодействуют напрямую друг с другом?

Должен ли я использовать какой-то протокол времени и планирования, который сообщает каждому потоку, когда наступает их очередь делать вызов? Какой это будет протокол?

Если у меня два сервера, то только максимум четыре потока в секунду на каждый сервер может выполнить вызов REST API. Как они могут координировать свои действия, чтобы использовать все восемь допустимых вызовов в секунду, не пытаясь go перевыполнять и не вызывая штрафов от REST API?

Что, если у меня есть поток с запросом с высоким приоритетом? Как я могу управлять приоритизацией потоков / вызовов REST?

Спасибо!

...