dev-tools
Словарь ↗Дедупликация запросов
Дедупликация запросов — это практика распознавать, что входящий запрос повторяет уже выполняющийся или уже выполненный, и возвращать имеющийся результат вместо повторной работы. Она закрывает вид расточительства, невидимый в большинстве метрик: система выглядит занятой и здоровой, а заметная доля того, что она делает, уже была сделана раньше. Дубликаты приходят из предсказуемых мест. Клиенты повторяют запрос по таймауту, не зная, удался ли исходный. Пользователи жмут кнопку дважды, когда ответ медленный. Очереди с доставкой «хотя бы один раз» переотправляют сообщения после перезапуска потребителя. Балансировщики и шлюзы повторяют запросы, выглядящие идемпотентными. И несколько пользователей вполне могут задать один и тот же вопрос в одну минуту — обычное дело в инструментах поддержки и внутренних ассистентах. Стандартные механизмы различаются по типу. Ключ идемпотентности, присланный клиентом, позволяет серверу узнать повтор конкретной операции и вернуть исходный исход вместо повторного выполнения — обязательно для всего, что списывает деньги или создаёт запись. Схлопывание одновременных запросов сводит одинаковые параллельные вызовы к одному выполнению, результат которого раздаётся всем ожидающим, — именно это не даёт промаху кэша превратиться в лавину. А кэш результатов закрывает повторы, разнесённые во времени. Для ИИ-функций дедупликация особенно ценна, потому что каждое выполнение дорого и медленно. Два пользователя, спросившие одно и то же с разницей в секунду, повторная генерация после клиентского таймаута, агент, дважды вызвавший один инструмент в одном цикле, — каждый дубликат стоит полного вывода модели. Дедупликация по точному совпадению полезной нагрузки дешева и безопасна. Семантическая, где почти одинаковые вопросы делят ответ, экономит больше, но вносит риск вернуть ответ на не совсем тот вопрос, поэтому требует консервативного порога сходства и ясных границ. Безопасной её держат правила корректности. Дедуплицируйте только операции, повтор которых действительно избыточен: запрос, обязанный каждый раз создавать новую запись, схлопывать нельзя. Ограничивайте ключ арендатором и пользователем там, где результат зависит от прав, потому что дедуплицированный ответ, перешедший границу арендатора, — это утечка данных. Держите окно достаточно коротким, чтобы устаревшие ответы не жили дольше своей полезности, и следите, чтобы неудачное выполнение не закэшировалось как удачное. Наконец, измеряйте её. Доля дубликатов — это и экономия, и диагностика: резкий рост обычно означает, что клиент повторяет слишком агрессивно или таймаут выставлен ниже реальной задержки операции, и починить это выше по течению лучше, чем поглощать дубликаты ниже.
Похожие термины