Синхронизация часов экземпляра сервера Google AppEngine

Я только что натолкнулся на следующий абзац в документации AppEngine для курсоров запросов:

Интересное применение курсоров - отслеживать сущности на предмет невидимых изменений. Если приложение устанавливает свойство timestamp с текущей датой и временем каждый раз, когда изменяется объект, приложение может использовать запрос, отсортированный по свойству timestamp, по возрастанию, с курсором хранилища данных, чтобы проверить, перемещаются ли объекты в конец списка результатов., Если метка времени объекта обновляется, запрос с курсором возвращает обновленный объект. Если ни одна сущность не была обновлена ​​с момента последнего выполнения запроса, результаты не возвращаются, и курсор не перемещается.

Чтобы это работало надежно, должны быть какие-то гарантии синхронизации часов между различными экземплярами сервера. В противном случае вы можете получить следующий сценарий:

  1. Экземпляр сервера 1 (быстрые часы) сохраняет обновление с отметкой времени 1000.
  2. Клиент запрашивает обновления и находит это обновление.
  3. Экземпляр сервера 2 (медленные часы) сохраняет другое обновление с отметкой времени 950.
  4. Клиент запрашивает обновления и НЕ находит это обновление, поскольку отметка времени не увеличилась.

Насколько я понял, таких гарантий синхронизации часов никогда не было. Это изменило???

Обновить:

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

1 ответ

Единственные документы, которые я нашел на часах и Google Cloud Platform, находятся здесь и здесь. Согласно первой ссылке, экземпляры синхронизируются с помощью службы NTP, и это сделано для вас.

Другие вопросы по тегам