Я слышал слухи о плохих вещах, происходящих с базами данных и почтовыми серверами, если вы меняете системное время во время их работы. Однако мне трудно найти конкретную информацию о реальных рисках.
У меня есть рабочий сервер Postgres 9.3, работающий на хосте Debian Wheezy, и время отключено на 367 секунд. Могу ли я просто запустить ntpdate
или запустить openntp во время работы Postgres, или это может вызвать проблемы? Если да, то какой метод коррекции времени безопаснее?
Существуют ли другие службы, которые более чувствительны к изменению системного времени? Может быть, почтовые серверы (exim, sendmail и т. Д.) Или очереди сообщений (activemq, rabbitmq, zeromq и т. Д.)?
источник
now()
. Можете ли вы добавить какой-либо безопасный метод изменения времени в вашем ответе?Обычно не сервер базы данных подвержен ошибкам при мгновенном скачке времени: это приложения, которые используют время.
Обычно существует два способа отслеживания времени: отслеживание собственного времени или сравнение системного времени. Оба имеют некоторые положительные и отрицательные компромиссы.
Собственное время отслеживания
Я вижу, что это используется в некоторых встроенных программах и системах, где точное время не так критично. В основном цикле приложения используется способ отслеживания «галочки». Это может быть сигнал тревоги, выданный ядром, сном или выбором, который показывает количество прошедшего времени. Когда вы знаете, сколько времени прошло, вы знаете, что можете прибавить или вычесть это время к счетчику. Этот счетчик - то, что заставляет Ваше приложение времени происходить. Например, если счетчик больше 10 секунд, вы можете что-то отменить или вам нужно что-то сделать.
Если приложение не отслеживает время, счетчик не изменится. Это может быть желательно в зависимости от дизайна вашего приложения. Например, отследить, сколько времени занимает длительный процесс, что-то обрабатывается, легче с помощью счетчика, чем список отметок времени запуска / остановки.
Pro:
Против:
Сравнение системного времени
Эта система используется чаще: сохраняйте временную метку и сравнивайте ее с временной меткой, используя системный вызов времени. Огромные перекосы в системном времени могут поставить под угрозу целостность вашего приложения, задача в несколько секунд может занять часы или завершиться немедленно, в зависимости от направления часов.
Pro:
Против:
Затронутые системы
Большинство приложений будет использовать сравнение временных меток для планирования задач. Для систем баз данных это может быть очистка кеша.
Все приложения, которые используют базу данных и функции времени вызова на языке запросов, будут подвержены перекосам, если приложение не обнаружит и не обработает соответствующим образом. Приложения никогда не могут прекратить работу или разрешить неопределенные периоды входа в зависимости от его цели.
Почтовые системы будут использовать временные метки и / или тайм-ауты для обработки устаревших или недоставленных писем. На это может повлиять перекос часов, но с гораздо меньшим влиянием. Таймеры отсрочки в отношении повторного подключения к серверам могут быть пропущены, что приведет к штрафам на подключающемся сервере.
Я не думаю (не исследовал), что аварийные сигналы ядра сработают при изменении системного времени. Системы, которые их используют, могут быть безопасными.
Решения
Осторожно двигайте время. Это можно найти в документации вашего любимого решения времени.
источник