Почему задержка при запросе на API проект на Heroku и как пофиксить?
Добрый день всем!
Я создал и загрузил Node.js (Fastify) бекэнд на Heroku (бесплатный тариф), локально работает ваще быстро (примерно 2-100ms), так как все сделал (cache(+ttl) + duplication check + checking) для ускорение скорости бека.
Но в Heroku на каждый запрос занимает примерно 500ms-5 сек (иногда до 10 секунд), которые невозможно сделать быстрый фронт для него.
Почему может происходить так и как можно пофиксить это?
Заранее спасибо!
Давлат Шавкатов, если приложение отдает контент быстро, то остается только потенциальная задержка из-за внутреннего роутинга Heroku или задержка+передача по сети.
Если есть возможность проверить географически близко к инфраструктуре Heroku, то было бы достаточно достоверно.
Давлат Шавкатов, время отдачи 10 секунд логично для первого запроса, когда дино еще спит. Последующие запросы будут без задержек и зависят лишь от расстояния от пользователя до сервера.
Давлат Шавкатов, это вопрос географической удаленности от сервера. Ни AWS ни другая инфраструктура не дадут лучшей скорости отдачи, если они далеко от клиента и также я не думаю, что отмеченное решение таковым является.
Если с Сан-Франциско ответ приходит за >140 мс, от меня за >170 мс, а от тебя за >500 мс, то это подтверждает мои мысли. Первый запрос можно не брать в расчет - пока дино стартует.
Если у вас проект чисто в виде API, то посмотрите на AWS, Azure. У них с этим все прекрасно и на старте вы вряд-ли вообще что-то заплатите (если не полезете куда не стоит)
Я знаю про Lambda / Serverless и спасибо за рекомендации, но мне нужно постоянный сервер, так как мне нужно кроме REST API еще и WebSocket.
В AWS год назад зарегался, не пользовался и как-то сам закончился срок и теперь шансов не осталось у меня. И еще раз спасибо за совет :)
Давлат Шавкатов, вот и я. А про WS посмотрите обязательно.я был в шоке когда они выкатили. Он ещё сыроват в удобстве разработки, но работает и это его главное преимущество. + Смотрите сразу в сторону serverless.com на предмет автоматизации (в разы удобнее получается)
спасибо! в бесплатный тариф есть такой лимит? в доке не нашел про этот. платный тариф дорого, $7/месяц для каждый проект. если бы у меня был деньги, я бы брал VPS с DigitalOcean.
Сергей Горностаев, даже после запроса, я делаю еще запрос после 2-секунд, задержка как минимум 500ms и это уже плохо и не знаю почему.
Вы правы, на бесплатных тарифах нет гарантии, спасибо.
Роман Мирр, какое должно быть расстояние для 5-секундного ответа? ДЦ на Луне? Я сейчас проверил, моё приложение за 200-250 мс отвечает. Я в Иркутске, приложение в ДЦ в Вирджинии.
Роман Мирр, да, может зависить от сети. Может зависеть от нагруженности сервера. Может зависит от расстояния до ДЦ. Может зависеть от производительности приложения. Причин может быть масса. Диагностика нужна. Но 5-10 секунд - это 100% сон.
Сергей Горностаев, бывает и такое, однако в логах у автора написано что 3-9 мс.
Я проверил, что с Сан-Франциско получает ответ за 140 мс. Так что не вижу другого объяснения кроме как задержка сети.
Небольшое исследование показало, что сервер на Хероку отдает контент за 3-9 мс и с Сан-Франциско получает ответ за 140 мс.
Я бы порекомендовал задеплоить приложение где-нибудь в регионе Европы во избежание сетевых задержек.
Хостить в AWS отдельно имеет смысл лишь если выбирать регион поближе к пользователю, чем США. Хероку работает на мощностях AWS в некоторых регионах.
Роман Мирр, Лучше Yandex.Cloud буду пробовать тогда. Если бы у Netlify был бек (есть lambda, но это не вариант), он был самый быстрый, мой фронт на Netlify отвечает за 250ms