Ouvi rumores de coisas ruins acontecendo nos servidores de banco de dados e correio se você alterar a hora do sistema enquanto eles estão em execução. No entanto, estou tendo dificuldades para encontrar informações concretas sobre os riscos reais.
Eu tenho um servidor Postgres 9.3 de produção rodando em um host Debian Wheezy e o tempo é baixo em 367 segundos. Posso apenas executar ntpdate
ou iniciar o openntp enquanto o Postgres está em execução ou isso pode causar um problema? Em caso afirmativo, qual é o método mais seguro de corrigir o tempo?
Existem outros serviços mais sensíveis a uma mudança na hora do sistema? Talvez servidores de correio (exim, sendmail, etc) ou filas de mensagens (activemq, rabbitmq, zeromq, etc)?
fonte
now()
. Você pode adicionar algum método seguro para alterar o horário da sua resposta?Geralmente, não é o servidor de banco de dados que está vulnerável a erros quando ocorre um salto instantâneo: são os aplicativos que usam o tempo que está.
Geralmente, existem duas maneiras de rastrear o tempo: rastrear o próprio tempo ou comparar o horário do sistema. Ambos têm algumas trocas positivas e negativas.
Rastreamento de tempo próprio
Vejo isso usado em alguns programas e sistemas embarcados em que o tempo exato não é tão crítico. Em um loop principal do aplicativo, é tratada uma maneira de rastrear um 'tick'. Este poderia ser um alarme dado pelo kernel, sleep ou select que fornece uma indicação da quantidade de tempo passado. Quando você sabe que horas são passadas, sabe que pode adicionar ou subtrair essa hora a um contador. Esse contador é o que faz o seu aplicativo de temporização acontecer. Por exemplo, se o contador for superior a 10 segundos, você poderá descartar algo ou precisará fazer algo.
Se o aplicativo não acompanhar o tempo, o contador não será alterado. Isso pode ser desejado, dependendo do design do seu aplicativo. Por exemplo, controlar quanto tempo um processo de longa execução leva para que algo seja tratado é mais fácil com um contador do que uma lista de carimbos de data / hora de início / parada.
Pró:
Vigarista:
Comparando a hora do sistema
Este é o sistema usado com mais frequência: armazene um carimbo de data e hora e compare-o com o carimbo de hora usando uma chamada de horário do sistema. Inclinações enormes no horário do sistema podem ameaçar a integridade do seu aplicativo, uma tarefa de alguns segundos pode levar horas ou terminar imediatamente, dependendo da direção do relógio.
Pró:
Vigarista:
Sistemas afetados
A maioria dos aplicativos utilizará o registro de data e hora para agendar tarefas. Para sistemas de banco de dados que podem ser limpezas de cache.
Todos os aplicativos que usam um banco de dados e funções de tempo de chamada no idioma da consulta serão afetados por distorções se o aplicativo não detectar e manipular adequadamente. Os aplicativos nunca poderiam parar de executar ou permitir períodos de login indefinidos, dependendo de sua finalidade.
Os sistemas de correio usarão carimbos de data e hora e / ou tempos limite para lidar com e-mails obsoletos ou não entregues. Uma inclinação do relógio pode afetar isso, mas com um impacto muito menor. Os temporizadores de retirada relativos à reconexão com os servidores podem ser perdidos, resultando em penalidades no servidor de conexão.
Eu não acho (não pesquisei) que os alarmes do kernel dispararão ao alterar a hora do sistema. Os sistemas que os utilizam podem ser seguros.
Soluções
Mova suavemente o tempo. Isso pode ser encontrado na documentação da sua solução de tempo favorita.
fonte