Słyszałem pogłoski o złych rzeczach, które zdarzają się serwerom bazy danych i poczty, jeśli zmienisz czas systemu podczas ich działania. Mam jednak trudności ze znalezieniem konkretnych informacji na temat rzeczywistego ryzyka.
Mam produkcyjny serwer Postgres 9.3 działający na hoście Debian Wheezy, a czas jest wyłączony o 367 sekund. Czy mogę po prostu uruchomić ntpdate
lub uruchomić openntp, gdy działa Postgres, czy może to powodować problemy? Jeśli tak, jaka jest bezpieczniejsza metoda korygowania czasu?
Czy istnieją inne usługi, które są bardziej wrażliwe na zmianę czasu systemowego? Może serwery pocztowe (exim, sendmail itp.) Lub kolejki wiadomości (activemq, rabbitmq, zeromq itp.)?
źródło
now()
. Czy możesz dodać bezpieczną metodę zmiany czasu do swojej odpowiedzi?Zwykle nie jest to serwer bazy danych, który jest podatny na błędy, gdy nastąpi natychmiastowy upływ czasu: są to aplikacje, które wykorzystują ten czas.
Istnieją dwa sposoby śledzenia czasu: śledzenie własnego czasu lub porównywanie czasu systemowego. Oba mają pewne pozytywne i negatywne kompromisy.
Własne śledzenie czasu
Widzę to stosowane w niektórych programach wbudowanych i systemach, w których dokładne taktowanie nie jest tak ważne. W głównej pętli aplikacji obsługiwany jest sposób śledzenia „tyknięcia”. Może to być alarm wysyłany przez jądro, tryb uśpienia lub wybór, który wskazuje, ile czasu minęło. Kiedy wiesz, która godzina minęła, wiesz, że możesz dodać lub odjąć ten czas do licznika. Ten licznik sprawia, że twoja aplikacja pomiaru czasu się wydarza. Na przykład, jeśli licznik jest dłuższy niż 10 sekund, możesz coś odrzucić lub musisz coś zrobić.
Jeśli aplikacja nie śledzi czasu, licznik się nie zmieni. Może to być pożądane w zależności od projektu aplikacji. Na przykład śledzenie, jak długo trwa proces długotrwały, jest łatwiejsze dzięki licznikowi niż liście znaczników czasowych start / stop.
Zawodowiec:
Kon:
Porównywanie czasu systemowego
Jest to system używany częściej: przechowuj znacznik czasu i porównuj go ze znacznikiem czasu za pomocą systemowego wywołania czasowego. Ogromne przekrzywienia w czasie systemowym mogą zagrozić integralności aplikacji, zadanie kilku sekund może zająć godziny lub zakończyć się natychmiast, w zależności od kierunku zegara.
Zawodowiec:
Kon:
Dotknięte systemy
Większość aplikacji korzysta ze znaczników czasu w porównaniu do planowania zadań. W przypadku systemów baz danych, które mogą być porządkami pamięci podręcznej.
Wszystkie aplikacje korzystające z bazy danych i funkcji czasu wywołania w języku zapytań będą miały wpływ na przesunięcia, jeśli aplikacja nie wykryje odpowiednio i nie obsługuje. Aplikacje nigdy nie mogą przestać działać ani dopuszczać nieokreślonych okresów logowania w zależności od celu.
Systemy pocztowe będą używać znaczników czasu i / lub limitów czasu do obsługi starych lub niedostarczonych wiadomości e-mail. Odchylenie zegara może na to wpłynąć, ale przy znacznie mniejszym wpływie. Liczniki czasu wycofania dotyczące ponownego połączenia z serwerami mogą zostać pominięte, co może skutkować karami na łączącym się serwerze.
Nie sądzę (nie badałem), że alarmy jądra będą się włączać przy zmianie czasu systemowego. Systemy, które z nich korzystają, mogą być bezpieczne.
Rozwiązania
Delikatnie przesuwaj czas. Można to znaleźć w dokumentacji swojego ulubionego rozwiązania czasowego.
źródło