He escuchado rumores de que suceden cosas malas a la base de datos y los servidores de correo si cambia la hora del sistema mientras se están ejecutando. Sin embargo, me cuesta encontrar información concreta sobre los riesgos reales.
Tengo un servidor Postgres 9.3 de producción que se ejecuta en un host Debian Wheezy y el tiempo de espera es de 367 segundos. ¿Puedo ejecutar ntpdate
o iniciar openntp mientras se ejecuta Postgres, o es probable que eso cause un problema? Si es así, ¿cuál es un método más seguro para corregir el tiempo?
¿Hay otros servicios que sean más sensibles a un cambio en la hora del sistema? ¿Quizás servidores de correo (exim, sendmail, etc.) o colas de mensajes (activemq, rabbitmq, zeromq, etc.)?
fuente
now()
. ¿Puedes agregar algún método seguro para cambiar el tiempo de tu respuesta?Por lo general, no es el servidor de la base de datos el que es vulnerable a errores cuando ocurre un salto de tiempo instantáneo: son las aplicaciones las que usan el tiempo.
En general, hay dos formas de realizar un seguimiento del tiempo: seguimiento del tiempo propio o comparación del tiempo del sistema. Ambos tienen algunas compensaciones positivas y negativas.
Seguimiento del tiempo propio
Veo esto usado en algunos programas y sistemas embebidos donde el tiempo exacto no es tan crítico. En un bucle de aplicación principal, se soluciona una forma de rastrear un 'tic'. Esto podría ser una alarma dada por el núcleo, suspensión o selección que da una indicación de la cantidad de tiempo transcurrido. Cuando sabes qué tiempo pasa, sabes que puedes sumar o restar este tiempo a un contador. Este contador es lo que hace que su aplicación de temporización suceda. Por ejemplo, si el contador es superior a 10 segundos, puede descartar algo o debe hacer algo.
Si la aplicación no registra el tiempo, el contador no cambiará. Esto puede desearse dependiendo del diseño de su aplicación. Por ejemplo, realizar un seguimiento de cuánto tiempo se está manejando un proceso de larga duración es más fácil con un contador que con una lista de marcas de tiempo de inicio / parada.
Pro:
Estafa:
Comparación del tiempo del sistema
Este es el sistema que se usa con más frecuencia: almacene una marca de tiempo y compárela con la marca de tiempo utilizando una llamada de tiempo del sistema. Grandes sesgos en el tiempo del sistema podrían amenazar la integridad de su aplicación, una tarea de unos pocos segundos podría llevar horas o terminar de inmediato dependiendo de la dirección del reloj.
Pro:
Estafa:
Sistemas afectados
La mayoría de las aplicaciones usarán marcas de tiempo en comparación con las tareas programadas. Para sistemas de bases de datos que podrían ser limpiezas de caché.
Todas las aplicaciones que usan una base de datos y funciones de tiempo de llamada en el lenguaje de consulta se verán afectadas por sesgos si la aplicación no detecta y maneja en consecuencia. Las aplicaciones nunca podrían dejar de ejecutarse o permitir períodos de inicio de sesión indefinidos según su propósito.
Los sistemas de correo utilizarán marcas de tiempo y / o tiempos de espera para manejar correos obsoletos o no entregados. Un sesgo del reloj podría afectar eso, pero con un impacto mucho menor. Los temporizadores de retroceso relacionados con la reconexión a los servidores podrían perderse, lo que generaría penalizaciones en el servidor de conexión.
No creo (no he investigado) que las alarmas del kernel se activen al cambiar la hora del sistema. Los sistemas que usan estos podrían ser seguros.
Soluciones
Mueve el tiempo suavemente. Esto se puede encontrar en la documentación de su solución de tiempo favorita.
fuente