Рейтинг:2

Что может вызвать задержку/отставание TCP/HTTP-запроса

флаг in

У нас есть устройство, которое отправляет запросы POST или TCP-сообщения с фиксированными интервалами с полезной нагрузкой JSON через Интернет на наш сервер, на котором запущено приложение узла, в другом месте.

Полезная нагрузка JSON имеет метку времени и некоторые другие значения.Мы сравниваем эту временную метку с временной меткой сервера, чтобы вычислить разницу во времени, которую мы называем отставанием.

Интервал составляет 100 мс. Что мы наблюдаем, так это то, что изначально задержка составляет менее 200 мс. Мы позволяем системе работать в течение нескольких дней, и мы наблюдаем, что задержка увеличивается, через 2-3 дня она составляет 2000–3000 мс, а затем увеличивается ... через 6 дней около 6000 мс.

Как только мы перезапустим серверный процесс, задержка вернется к норме, поэтому я предполагаю, что отправитель в порядке. Это происходит как с реализацией запросов POST, так и с реализацией сообщений TCP.

Кто-нибудь знает, почему это может произойти, или как сузить проблему?

флаг sh
Ben
Как указывает AlexD, часы сервера и клиента могут отличаться. Для проверки времени лучше всего взять время начала/окончания на одной и той же машине.
флаг jp
Не могли бы вы попробовать вручную запустить/рассчитать время сообщения в день 1 и день 3 и сравнить производительность? Вы будете запускать его вручную, поэтому вы захотите игнорировать временные метки/регистрацию в пользу визуального наблюдения за производительностью. Это поможет определить, связана ли проблема с синхронизацией (если ручной запуск быстрый) или с фактической задержкой (если ручной запуск медленный)?
VL-80 avatar
флаг cn
Если возможно, настройте пару тестовых устройств и серверов в контролируемой среде рядом друг с другом и посмотрите, сохраняется ли проблема. Это позволит вам устранить сетевой аспект проблемы и поможет сузить круг проблем, если вы подозреваете, что маршрутизация через Интернет способствует возникновению проблемы.
Ben Voigt avatar
флаг pl
Вы также должны измерить время приема-передачи, так как это требует двух измерений от одного источника тактового сигнала, любое несоответствие/ошибку/перекос часов нельзя спутать с задержкой/задержкой.
флаг in
Клиент — это устройство с собственной ОС. Я попытался эмулировать устройство, но не смог воспроизвести проблему. Время прохождения туда и обратно довольно мало, обычно менее 20 мс. Поскольку воспроизведение занимает дни, процесс его обнаружения относительно медленный.
Рейтинг:6
флаг jp

У вас синхронизированы часы как на сервере, так и на отправителе? 1 секунда в день не является необычным сдвигом часов.

флаг cn
«Как только мы перезапустим серверный процесс, отставание вернется к норме» предполагает обратное.
флаг jp
@rtaft, возможно, они используют какие-то неточные часы («setInterval»?) в своем сервисном процессе, которые со временем дрейфуют. Или они перезапускают процесс, перезапуская сервер, который запускает ntpdate при загрузке, но не запускает службу ntpd.
флаг jp
@AlexD: Это не должно быть связано с неточным интервалом, поскольку они отправляют метку времени сервера в полезной нагрузке. Интервальный дрейф также приведет к смещению включенной временной метки. Однако смещение часов вполне реально, особенно если OP использует виртуальный/облачный сервер, а не выделенную машину.
флаг jp
@ Брайан, мы не знаем, как они рассчитывают свои метки времени. Они могут получить системное время один раз при запуске, а затем добавить интервалы.
флаг in
Мы получаем дату через javascript `new Date()` на сервере. Смещение часов маловероятно, но я буду иметь это в виду.
Рейтинг:3
флаг cn

Это указывает на так называемую утечку ресурсов. Что-то в вашем приложении со временем замедляет обработку по мере накопления очереди, памяти или какого-либо другого ресурса.

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

Если вы работаете в облаке, есть хорошие инструменты для помощи в программировании кода, такие как AWS X-Ray.

флаг in
Спасибо. Я дважды проверю свой код.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.