Consistent Hashing

System Design. Подготовка к сложному интервью - Глава 8 - Проектирование системы для сокращения URL адресов

System Design. Подготовка к сложному интервью - Глава 8 - Проектирование системы для сокращения URL адресов

Переводы: EN

Ранее описанные технологии, такие как согласованное хеширование, генератор ID позволяют разработать сокращатель URL, который способен генерировать 100 миллионов URL в день.

Проектирование включает в себя следующие элементы:

  • конечные точки API
  • перенаправление URL
  • сокращение URL
  • модель данных
  • хеш-функции: хеширование + разрешение коллизий VS преобразования в base-62
  • а также такие вопросы, как:
    • ограничитель частоты
    • масштабирование веб-сервера
    • масштабирование базы данных
    • аналитика
    • доступность, согласованность и надежность

Эти пункты раскрыты в очень интересной главе 8 книги:

System Design. Подготовка к сложному интервью - Глава 6 - Проектирование хранилища типа Ключ-Значение

System Design. Подготовка к сложному интервью - Глава 6 - Проектирование хранилища типа Ключ-Значение

Переводы: EN

Дизайн хранилища типа Ключ-Значене состоит из понимания следующих тем:

  • Что мы хотим от хранилища Ключ-Значение?
  • Односерверное хранилище Ключ-Значение
  • РАСПРЕДЕЛЕННОЕ хранилище Ключ-Значение:
    • Теорема CAP
    • Реальные компромиссы для распределенных систем
  • Системные компоненты:
    • Партиционирование данных
    • Репликация данных
    • Консистентность
    • Разрешение неконсистентности: Версии
    • Обработка всех типов сбоев: Обнаружение сбоев, Обработка ВРЕМЕННЫХ сбоев, Обработка ПОСТОЯННЫХ сбоев, Устранение сбоев в работе центра обработки данных
  • Схема архитектуры системы
  • Путь записи
  • Путь чтения

Эти пункты раскрыты в очень интересной главе 6 книги:

System Design. Подготовка к сложному интервью - Глава 5 - Консистентное хэширование

System Design. Подготовка к сложному интервью - Глава 5 - Консистентное хэширование

Переводы: EN

Консистентное хеширование является краеугольной технологией для распределенных систем. Многие разработчики программного обеспечения этого не осознают, но консистентное хеширование необходимо во многих местах: балансировщики нагрузки, кэши, CDN, генераторы id, базы данных, чаты/социальные сети и многие другие системы.

Эта тема состоит из:

  • Проблема с перехешированием и почему нам нужно, чтобы хеширование было ПОСЛЕДОВАТЕЛЬНЫМ
  • Хэш-пространство и хэш-кольцо
  • БАЗОВЫЙ подход (введенный Каргером и др. в MIT)
  • Расширенный подход с ВИРТУАЛЬНЫМИ УЗЛАМИ

Эти моменты раскрыты в очень интересной главе 5 книги: