Синхронизация часов экземпляра сервера Google AppEngine
Я только что натолкнулся на следующий абзац в документации AppEngine для курсоров запросов:
Интересное применение курсоров - отслеживать сущности на предмет невидимых изменений. Если приложение устанавливает свойство timestamp с текущей датой и временем каждый раз, когда изменяется объект, приложение может использовать запрос, отсортированный по свойству timestamp, по возрастанию, с курсором хранилища данных, чтобы проверить, перемещаются ли объекты в конец списка результатов., Если метка времени объекта обновляется, запрос с курсором возвращает обновленный объект. Если ни одна сущность не была обновлена с момента последнего выполнения запроса, результаты не возвращаются, и курсор не перемещается.
Чтобы это работало надежно, должны быть какие-то гарантии синхронизации часов между различными экземплярами сервера. В противном случае вы можете получить следующий сценарий:
- Экземпляр сервера 1 (быстрые часы) сохраняет обновление с отметкой времени 1000.
- Клиент запрашивает обновления и находит это обновление.
- Экземпляр сервера 2 (медленные часы) сохраняет другое обновление с отметкой времени 950.
- Клиент запрашивает обновления и НЕ находит это обновление, поскольку отметка времени не увеличилась.
Насколько я понял, таких гарантий синхронизации часов никогда не было. Это изменило???
Обновить:
Я просто понял, что даже если часы были синхронизированы идеально, этот подход может пропустить результаты из-за возможной последовательности запросов. Если более позднее обновление завершается подтверждением перед более ранним обновлением и превращает его в одновременный запрос, а более раннее - нет, оно скрывает более раннее обновление. Или я что-то упустил?
1 ответ
Единственные документы, которые я нашел на часах и Google Cloud Platform, находятся здесь и здесь. Согласно первой ссылке, экземпляры синхронизируются с помощью службы NTP, и это сделано для вас.