Как только у меня есть несколько серверов, я не могу предположить, что глобальные непротиворечивые часы
Хорошо, вы можете настроить серверы для синхронизации их часов с сервером времени.Вы также можете настроить сервер базы данных для синхронизации с сервером времени и настроить другие серверы для синхронизации с сервером базы данных так часто, как вам нужно.(Я не говорю, что это отличная идея, просто говорю, что это возможно. Если у вас есть доступ ко всем серверам.)
В любом случае.,,таким образом, внешние интерфейсы - это единственное программное обеспечение, которое у вас есть, которое на самом деле знает, когда приходит запрос.Это верно?
Если это так, тогда задача внешнего интерфейса - записать время запроса клиента, возможно, в UTC, а затем переслать эту метку времени в базу данных.
Если вы не можете синхронизировать часы сервера, то я думаю, что ваша единственная надежда состоит в том, чтобы каждый интерфейс запрашивал только один конкретный сервер - может быть, ваш сервер баз данных, но, возможно, нет - который час, когдаприходит запрос клиента.Внешний интерфейс может сделать это, запросив дневное время на порту 13 (протокол DAYTIME, RFC-867), запросив время на порту 37 (протокол TIME, RFC-868) или запросив сервер времени на порту 123 (NTP или SNTPпротокол, RFC-1305 и RFC-2030).
Но после прочтения вашего редактирования я думаю, что вы хотите, невозможно.Похоже, вы говорите, что
- то, что отправляют внешние интерфейсы, не содержит достаточно информации для восстановления «истинного» порядка
- то, что отправляют внешние интерфейсы, изменить нельзя
Если внешние интерфейсы не могут отправить вам какую-либо другую информацию, векторные часы и интервальные деревья не помогут.