Продвинутый

Часы и упорядочивание событий

Урок 3 из 3 в курсе Распределённые системы: основы

Содержание курса (3/3)

Часы и упорядочивание событий

в распределённой системе нет единого времени — приходится использовать логические часы.

Почему это важно: Системные часы рассинхронизированы, и опираться на timestamp для упорядочивания событий приводит к багам в проде.

Главная идея

Lamport timestamps и vector clocks дают способ упорядочить события без единого источника времени.

Как это выглядит на практике

  1. Сервис A создаёт событие в 12:00:00.123.
  2. Сервис B получает событие и пишет своё в 11:59:59.999 (его часы отстают).
  3. Если сортировать по timestamp — событие B окажется раньше A, что неверно.
  4. Логические часы (Lamport) дают правильный порядок без зависимости от физических часов.

Что происходит под капотом

  • Lamport clock: счётчик, увеличивающийся при каждом событии и при получении сообщения.
  • Vector clock: массив счётчиков, по одному на каждую ноду — позволяет обнаруживать конкуррентные события.
  • NTP синхронизирует часы, но не до миллисекунд и не идеально.
  • Spanner от Google использует TrueTime — атомные часы с гарантированной погрешностью.

Типичные ошибки и заблуждения

  • Ошибка: NTP даёт точное время. Скachки до сотен миллисекунд — нормальная практика.
  • Ошибка: timestamp подходит для упорядочивания. Только в рамках одной ноды.
  • Ошибка: vector clocks нужны всем. Это сложная штука только для специфических задач.
  • Ошибка: 'сейчас' одинаково для всех. В распределённой системе — нет.

Ключевые выводы

  • Физические часы рассинхронизированы.
  • Lamport clock — простой способ упорядочивания.
  • Vector clock — обнаружение конкуррентности.
  • TrueTime — экзотика, доступная единицам.

Термины урока

Lamport timestamp: монотонный счётчик событий.
Vector clock: вектор счётчиков для всех нод.
NTP: Network Time Protocol, синхронизация часов.
Causality: причинно-следственная связь между событиями.

Связь с работой backend-разработчика

Понимание часов и порядка — фундамент работы с любой распределённой БД, особенно с eventual consistency.

Мини-разбор реальной ситуации

Распределённый чат сортировал сообщения по timestamp клиента. На устройствах с неправильными часами сообщения появлялись в неверном порядке. Перешли на logical clocks — проблема исчезла.

Что запомнить

  • Времени единого нет.
  • Используйте логические часы для порядка.
  • NTP — не панацея.

Итог

В распределённых системах время — иллюзия, и опираться на него нельзя. Логические часы — единственный надёжный способ упорядочивать события.

Комментарии к уроку

Войдите, чтобы оставить комментарий.

Пока нет комментариев — будьте первым.