2010-05-14 4 views
7

Предполагая, что в веб-ферме существует несколько сбалансированных по нагрузке веб-серверов, безопасно ли использовать время приложения/веб-сервера в коде приложения для получения системной даты/времени или оставить эту ответственность на сервере базы данных? ?В среде веб-фермы мы должны основывать системную дату/время на веб-серверах или сервере базы данных?

Будет ли вероятность того, что установка даты и времени машины на всех серверах в webfarm не синхронизирована?

Если дата/время будет ответственным за СУБД, как эта стратегия будет работать, если у нас есть балансированные по нагрузке кластерные БД?

+0

Почему не стандартный UTC? –

+0

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

+0

Скорее используйте System.DateTime.UtcNow - это позволит избежать любых проблем, которые могут возникнуть, если машины не все настроены на один и тот же часовой пояс. –

ответ

3

Вы должны иметь сервер времени (- :)

Серьезно, первый подход должен убедиться, что все серверы используют протокол для синхронизации своих часов. Это оставит вас с известным худшим случаем отклонения. Только если это отклонение больше, чем вы можете терпеть (маловероятно в веб-приложении), вам нужно будет спроектировать что-то особенное. Обычно база данных будет в порядке, но если это кластер, вам может потребоваться назначить выделенный сервер в качестве хранителя времени.

Обратите внимание, что ваша точность всегда будет связана максимальной задержкой сети.

1

Лучше всего иметь одинаковое время, установленное на всех серверах, поэтому вам не нужно беспокоиться об этом, в противном случае всегда возникает путаница в отношении того, приходит ли время.

Если часы на серверах установлены с сервера времени регулярно, они должны быть точными с точностью до 100 мс друг от друга, что, вероятно, достаточно хорошо, хотя очевидно, что это зависит от того, что именно вы пытаетесь сделать.