Часы и упорядочивание событий
в распределённой системе нет единого времени — приходится использовать логические часы.
Почему это важно: Системные часы рассинхронизированы, и опираться на timestamp для упорядочивания событий приводит к багам в проде.
Главная идея
Lamport timestamps и vector clocks дают способ упорядочить события без единого источника времени.
Как это выглядит на практике
- Сервис A создаёт событие в 12:00:00.123.
- Сервис B получает событие и пишет своё в 11:59:59.999 (его часы отстают).
- Если сортировать по timestamp — событие B окажется раньше A, что неверно.
- Логические часы (Lamport) дают правильный порядок без зависимости от физических часов.
Что происходит под капотом
- Lamport clock: счётчик, увеличивающийся при каждом событии и при получении сообщения.
- Vector clock: массив счётчиков, по одному на каждую ноду — позволяет обнаруживать конкуррентные события.
- NTP синхронизирует часы, но не до миллисекунд и не идеально.
- Spanner от Google использует TrueTime — атомные часы с гарантированной погрешностью.
Типичные ошибки и заблуждения
- Ошибка: NTP даёт точное время. Скachки до сотен миллисекунд — нормальная практика.
- Ошибка: timestamp подходит для упорядочивания. Только в рамках одной ноды.
- Ошибка: vector clocks нужны всем. Это сложная штука только для специфических задач.
- Ошибка: 'сейчас' одинаково для всех. В распределённой системе — нет.
Ключевые выводы
- Физические часы рассинхронизированы.
- Lamport clock — простой способ упорядочивания.
- Vector clock — обнаружение конкуррентности.
- TrueTime — экзотика, доступная единицам.
Термины урока
Связь с работой backend-разработчика
Понимание часов и порядка — фундамент работы с любой распределённой БД, особенно с eventual consistency.
Мини-разбор реальной ситуации
Распределённый чат сортировал сообщения по timestamp клиента. На устройствах с неправильными часами сообщения появлялись в неверном порядке. Перешли на logical clocks — проблема исчезла.
Что запомнить
- Времени единого нет.
- Используйте логические часы для порядка.
- NTP — не панацея.
Итог
В распределённых системах время — иллюзия, и опираться на него нельзя. Логические часы — единственный надёжный способ упорядочивать события.
Комментарии к уроку
Войдите, чтобы оставить комментарий.
Пока нет комментариев — будьте первым.