Партиционирование
и горячие точки
Двенадцать ключей, три владельца и достаточная общая мощность. Измените распределение запросов и узнайте, почему одна очередь растёт, пока другие партиции простаивают.
Те же ключи. Другая нагрузка.
12 ключей → 3 партиции. Маршрут: остаток от деления ключа на 3. Каждая партиция выполняет до 4 запросов одинаковой стоимости за шаг.
Сначала поступает пакет, затем каждая партиция обрабатывает свою очередь. Шаг без новых запросов только разгружает очередь. Сброс очищает счётчики, сохраняя настройки.
Запросов пока нет. Предскажите распределение и отправьте пакет.
| Партиция / ключи | Поступило за шаг | Всего получено | Всего выполнено | Сейчас в очереди |
|---|---|---|---|---|
| P0Ключи 0, 3, 6, 9 | 0 | 0 | 0 | 0 |
| P1Ключи 1, 4, 7, 10 | 0 | 0 | 0 | 0 |
| P2Ключи 2, 5, 8, 11 | 0 | 0 | 0 | 0 |
Ключи по-прежнему распределены поровну: по четыре на партицию. Трафик может быть неравномерным. Работа остаётся у своего владельца; свободная мощность других партиций не используется.
Предскажите самого занятого владельца
Представьте запросы к двенадцати страницам товаров с ключами 0–11. У каждого ключа фиксированный владелец: партиция = остаток от деления ключа на 3. P0 владеет ключами 0, 3, 6 и 9; P1 — 1, 4, 7 и 10; P2 — 2, 5, 8 и 11. По четыре ключа у каждой. Гарантирует ли это равную нагрузку?
За шаг каждая партиция выполняет до четырёх запросов одинаковой стоимости. Пакет добавляет двенадцать запросов до начала обработки. Предскажите очереди и сравните:
- Оставьте режим Равномерно и нажмите 12 запросов + шаг. На каждый ключ приходится один запрос. Поступления — 4 / 4 / 4; все двенадцать выполняются, очереди пусты.
- Выберите Горячий ключ. Начинается новый запуск с тем же размещением. Ключ 0 получает девять запросов; ключи 1, 2 и 3 — по одному. Предскажите, какая партиция владеет большей частью этой работы.
- Отправьте пакет. Поступления — 10 / 1 / 1. P0 выполняет четыре запроса и оставляет шесть в очереди. P1 и P2 выполняют по одному. Общая мощность составляла двенадцать запросов, но завершились только шесть.
- Отправьте ещё пакет. Очередь P0 вырастет до двенадцати. Трижды нажмите Шаг без новых запросов, чтобы очистить её без новых поступлений.
Столбцы показывают долю каждой партиции во всех полученных запросах по фиксированной шкале 0–100%. Таблица содержит точные поступления, завершённую работу и очередь. Сумма округлённых долей может отличаться от 100%.
Размещение — не трафик
Обе нагрузки размещают по четыре ключа на партиции. Отличаются только частоты запросов. При горячем ключе 75% запросов идут на один ключ. Ещё один запрос обращается к другому ключу того же владельца, поэтому эта партиция получает 10 из 12 запросов, около 83%.
Попробуйте горячий ключ 1. Нагрузка переместится на P1. Выберите ключ 3 — она вернётся на P0. Смена ключа не равнозначна распределению нагрузки между владельцами. Владельца каждого ключа можно посмотреть в списке и таблице.
Поддерживайте давление
Повторные пакеты показывают несоответствие нагрузки и мощности. Самая занятая партиция получает десять запросов, но выполняет только четыре за шаг: её очередь растёт на шесть с каждым пакетом. Свободная мощность другого владельца не обрабатывает эти запросы автоматически. Шаг без новых запросов останавливает поступления, но не обработку, поэтому очередь сокращается максимум на четыре.
Смена нагрузки или горячего ключа очищает запуск для сравнения с нуля, а не переносит уже поступившие запросы. Сбросить запуск очищает счётчики, сохраняя настройки. Перезагрузка возвращает исходную равномерную нагрузку.
Что может изменить инженер?
Популярная страница товара концентрирует работу, даже если число ключей распределено поровну. Изучайте активность по ключам и партициям, стоимость запросов, очереди и мощность, а не только количество хранимых ключей.
Кеширование повторных чтений уменьшает работу, доходящую до владельца. Перемещение горячего ключа меняет владельца его трафика. Разделение логического ключа на несколько физических может распределить некоторые нагрузки, но потребует чтений с нескольких узлов, агрегации или иных гарантий порядка и атомарности. Новые партиции распределяют другие ключи; один неделимый горячий ключ при этом правиле маршрутизации всё равно имеет одного владельца. Ни один из этих способов в эксперименте не реализован.
Границы модели
- Три фиксированные логические партиции, двенадцать целочисленных ключей и явная маршрутизация по остатку от деления. Это учебное правило, а не промышленная хеш-функция или модель физического размещения конкретного продукта.
- Стоимость всех запросов одинакова. Каждый владелец выполняет до четырёх запросов за логический шаг после поступления новых, включая работу из прежней очереди. Неиспользованная мощность теряется для этого шага и не передаётся другим.
- Равномерный пакет содержит каждый ключ один раз. Горячий пакет содержит девять копий выбранного ключа и по одной копии следующих трёх ключей по кругу. Случайности и измеренной промышленной нагрузки нет.
- Запросы представлены счётчиками по партициям, а не записями, значениями, индивидуальным временем ответа или упорядоченными операциями. Модель не измеряет перцентили задержки, надёжность хранения и производительность.
- Очереди сохраняют всю невыполненную работу; нет отказов в приёме, таймаутов, повторов и обратного давления. Перегрузка намеренно показана ростом очереди. Реальные системы могут ограничивать или отбрасывать нагрузку.
- Только отправка пакета и шаг без новых запросов двигают логическое время. Нет часов, сетевых отказов, репликации, параллельного выполнения, перераспределения, хранения и автоматического масштабирования. Смена настроек начинает новый эксперимент, а не моделирует миграцию.
Обсудите при проектировании
Каталог распределён равномерно, но один запуск перегружает страницу товара. Что ограничивает систему: размещение ключей, частота запросов, их стоимость или мощность? Какой способ меняет работу, поступающую владельцу, а какой лишь перемещает её? Какие гарантии придётся пересмотреть при разделении ключа?
Источники и дальнейшее чтение
Текст, диаграмма, нагрузка и модель — авторские. В рекомендациях для конкретного продукта AWS советует учитывать шаблоны доступа и распределять активность по ключам партиций: рекомендации по ключам DynamoDB (проверено 26.10.2026). Единицы мощности, адаптивная мощность и размещение DynamoDB специфичны для продукта; правило четырёх запросов за шаг здесь придумано для обучения.