Выбор ответа Senior Разборы систем обновлено

Генерация id в распределённой системе

Вопрос

Нужны 64-битные id сообщений, уникальные без центральной БД и примерно сортируемые по времени. Что подходит?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Snowflake: время, машина, счётчик. Snowflake-подобный id (метка времени в миллисекундах, id машины и счётчик внутри миллисекунды) помещается в 64 бита, генерируется локально на каждом узле и сортируется по времени, потому что старшие биты это время.

Варианты ответа

  1. UUID v4 в каждом сервисе
  2. Автоинкремент каждого шарда
  3. Хеш содержимого сообщения
  4. Snowflake: время, машина, счётчикправильный ответ

Разбор

Snowflake-подобный id (метка времени в миллисекундах, id машины и счётчик внутри миллисекунды) помещается в 64 бита, генерируется локально на каждом узле и сортируется по времени, потому что старшие биты это время. UUID v4 случаен и занимает 128 бит. Автоинкременты разных шардов пересекаются. Хеш содержимого совпадёт у одинаковых сообщений и не отражает время.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.