Что такое проблема hot key (горячего ключа) в key-value хранилище и как её смягчают?
- Что делать с горячим ключом в DynamoDB или Redis?
Горячий ключ — один ключ получает непропорциональную долю запросов, и его шард перегружен, пока остальные простаивают. Хеширование делит ключи, но не нагрузку на ключ.
- Чтение: локальный кэш, реплики ключа под суффиксами, CDN
- Запись: шардированные счётчики (
key#0..N), агрегирование пачками - Обнаружение: метрики по шардам, топ ключей (count-min)
А ещё Добавление шардов не помогает
Подробно
Key-value БД масштабируются шардированием по ключу: ответственность за ключ несёт конкретный узел/партиция. Если на один ключ (популярный товар, лента знаменитости) приходится огромная доля запросов, его шард становится узким местом, тогда как остальные простаивают — данные распределены, а нагрузка нет. Смягчают: репликами на чтение (раскидать чтения), кэшем перед хранилищем, разбиением горячего значения на под-ключи (key1..keyN) с агрегацией, либо локальным кэшем на клиентах. В DynamoDB это «hot partition», и adaptive capacity помогает лишь частично.
Что хотят услышать
- Почему один ключ упирается в один шард.
- Разные приёмы для чтения и записи.
- Как обнаружить горячие ключи.
Частые ошибки
- Считать, что шардирование само по себе решает перекос нагрузки.
- Путать равномерное распределение данных с равномерным распределением трафика.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Ключ истёк по TTL раньше времени
- ✓Один ключ получает непропорционально много трафика; помогают дробление ключа, реплики чтения, кэш
- ✗Ключ слишком часто меняет значение, и его версии не успевают реплицироваться; помогает увеличение TTL
- ✗Два клиента случайно выбрали одинаковый ключ
Что спросят дальше
- Как разбиение ключа помогает против hot key?
- Что такое hot partition в DynamoDB?
Разбор темы
- Key-value хранилища
Простейшая модель доступа по ключу, типичные применения, Redis против DynamoDB, партиционирование и ограничения.
Связанные вопросы
- Что делать с горячими ключами, на которые приходится непропорционально большая нагрузка? Senior
- Данные шардированы по хешу от идентификатора клиента. Несколько крупных клиентов дают около 80% нагрузки, и она приходится на один шард. Что здесь поможет? Senior
- Почему выбор ключа партиционирования в key-value хранилище настолько важен? Middle
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.