Как оптимизировать принятие POST запросов?

Я отправляю 20 запросов к сайту-поставщику, указываю адрес на который он мне пришлет ответ (Call Back) и получается так, что он присылает мне все 20 в течении 2-3 секунд каждый запрос по отдельности. Соответственно получается он делает к моему сайту 20 POST запросов и мой сайт блокирует этот поток, тем самым некоторые ответы пропадают.

Вопрос, можно ли как-то оптимизировать и настроить получение post запросов в количестве 20-30 штук?)
p.s. Пообщался с поддержкой хостинга (Cloud хост) сказали мол если только на VPS перейдете (дорого получается в моем случае) и на VPS говорят можете больше чем 30 даже получать если хотите.
p.s. И даже если мой сайт принимает 5-7 запросов нормально, то при выполнении скрипта (получается, что скрипт запускается для каждого callBackа почти одновременно 7 скриптов и куча запросов к БД в 2-3 секунды этих) в результате при загрузке сайта я получаю Error 500. пока скрипт не выполнит свои действия.

Как с этим Call Back живут в итоге, ведь кто-то пользуется этим...
  • Вопрос задан
  • 722 просмотра
Пригласить эксперта
Ответы на вопрос 5
inoise
@inoise
Solution Architect, AWS Certified, Serverless
Перейдите уже на нормальный хостинг. VPS это норма
Ответ написан
Есть простое решение: использовать очереди сообщений. Это позволит откладывать обработку POST запросов и тогда ничем не будет блокироваться.
То есть это
получается, что скрипт запускается для каждого callBackа почти одновременно 7 скриптов и куча запросов к БД в 2-3 секунды этих

будет выполняться в фоне отдельным процессом.
И тогда никакие апгрейды не понадобятся совсем.
Ответ написан
virtual_hack2root
@virtual_hack2root
.NET Core, JS, DevOps
В общем, подними столько бесптатных сервсисов, сколько сможешь, потом на одном из бесплтаных серверов реализуй неконфигурируемый балансировщик нагрузки на бесплатном VPS, пропиши туда +100500 серверов и вуаля.

Если вы в Python сайт написали, то asyncio поможет, и логика работы в БД переезжает задачи в chrontab. Как жто делается. Выполнять запросы в обработчике POST в контроллерах не надо (любой ЯП), регстрируете запрос, регистрируете данные, и досвидос. Прокладкой между рулем и сиденьем может служить dynamodb, благо он есть и в докере и на локалхосте, куда обращаться будут два сервиса - первый ваг веб сервис, второй - daemon для работы с базой данных, который при поступлении нового запроса, тупо фигачит в БД с таймаутами задержки 24 часа и лимитами на подключение в 2 Gb, вашему же вебсерверу остается только функция посыльного, прямая ассциация с ресепшн отеля, получили конвертик, положили в ячейку комнаты, запрос пришел от владельца ячейки, содержимое ячейки отдали, если есть если нет, не отдали, все просто.
Если вы в ASP.NET, то то же самое, принимаете запрос, говорите, спасибо, вот возьми с полки пирожок, отправляете уникальный ID запроса, и с богом, а задачу по выгрузке всего барахла опять же в EF Core, и в crontab
Ответ написан
Комментировать
AleksandrB
@AleksandrB
Совсем недавно вывел "Hello world"
Во-первых, можете настроить многопоточность. Это есть на практически всех back языках (хоть иногда и на костылях). Во-вторых, можете попросить их слать callback с таймаутом. Если у вашего хостинга стоит ограничение на количество принимаемых запросов, это никак не оптимизировать. Так же, можно отправлять в одном post несколько или распределить нагрузку на несколько серверов.
Ответ написан
Не понятно как проверялось не прохождение запросов. Изучался лог сервера?
Если хостер не адекватный и дропает запросы через проксирование, то лучше его сменить.
Если речь о приёме вебхуков по POST ничего не возвращающих кроме статуса 200, то лучше принятые данные сохранить и передать id или имя файла скрипту запускающемуся в фоне.
Если речь об запросах к REST API на PHP, то узкое место при множественных одновременных запросах от одного клиента это сессии в PHP. Сессии при REST API как правило не нужны, а потому максимально быстро переключаем их в режим только чтения.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы