Генерация уникального идентификатора кажется простой задачей, но не в высоконагруженных распределенных системах!
Эта тема состоит из:
Понимание требований и почему это сложная задача Возможные решения: Репликация с несколькими мастерами Универсальный уникальный идентификатор (UUID) Сервер билетов Подход Twitter SNOWFLAKE (похоже, что он наилучший!) Подробности: Штамп времени Номер последовательности Другие вопросы Синхронизация часов Настройка длины секции Высокая доступность Эти пункты раскрыты в очень интересной главе 7 книги:
Дизайн хранилища типа Ключ-Значене состоит из понимания следующих тем:
Что мы хотим от хранилища Ключ-Значение? Односерверное хранилище Ключ-Значение РАСПРЕДЕЛЕННОЕ хранилище Ключ-Значение: Теорема CAP Реальные компромиссы для распределенных систем Системные компоненты: Партиционирование данных Репликация данных Консистентность Разрешение неконсистентности: Версии Обработка всех типов сбоев: Обнаружение сбоев, Обработка ВРЕМЕННЫХ сбоев, Обработка ПОСТОЯННЫХ сбоев, Устранение сбоев в работе центра обработки данных Схема архитектуры системы Путь записи Путь чтения Эти пункты раскрыты в очень интересной главе 6 книги:
Консистентное хеширование является краеугольной технологией для распределенных систем. Многие разработчики программного обеспечения этого не осознают, но консистентное хеширование необходимо во многих местах: балансировщики нагрузки, кэши, CDN, генераторы id, базы данных, чаты/социальные сети и многие другие системы.
Эта тема состоит из:
Проблема с перехешированием и почему нам нужно, чтобы хеширование было ПОСЛЕДОВАТЕЛЬНЫМ Хэш-пространство и хэш-кольцо БАЗОВЫЙ подход (введенный Каргером и др. в MIT) Расширенный подход с ВИРТУАЛЬНЫМИ УЗЛАМИ Эти моменты раскрыты в очень интересной главе 5 книги: