Перейти к содержимому

Глоссарий

Предел частоты (rate limit)

Он есть у любого интерфейса, к которому стоит обращаться, а сценарий, его не замечающий, выглядит ровно как нападение. Знать, чей счёт вы тратите и что означает ожидание, и есть условие живой автоматизации.

Предел частоты это потолок числа вызовов от одного обращающегося за окно времени, после которого в ответ приходит ожидание.

Что на самом деле считает предел

Предел частоты это обещание про скорость, а не про итоговое количество. Он говорит, сколько вызовов один обращающийся делает внутри окна и что приходит на следующий.

Смысл не в том, чтобы замедлить честную работу. Смысл в том, что один цикл с ошибкой внутри не отнимет службу у всех остальных.

Где стоят наши пределы

Один потолок стоит перед всем облачным интерфейсом, а перед ходами, которые стоит ломать, стоят потолки потеснее.

  • Любой ход

    Общий потолок на минуту, поставленный одним стражем, а не вспоминаемый у каждого хода отдельно.

  • Вход

    Теснее остальных: это та поверхность, в которую стучится каждый подбирающий пароль.

  • Передача входа в программу

    Ещё теснее. Код, переносящий вход с сайта в программу, задуман как одноразовый.

  • Повторное письмо подтверждения

    Самый тесный из всех: эта кнопка достаёт до чужого почтового ящика.

  • Форма поддержки

    Считается за окно подлиннее, поэтому опечатка прощается, а сценарий нет.

Один страж перед всем сразу

Потолок, который вспоминают у каждого хода, однажды забудут у следующего. Этот объявлен один раз и по умолчанию стоит перед каждым адресом.

Чей это счёт

Потолок считает обращающихся, а обращающийся здесь это адрес. Два сценария на одной машине делят один счёт, а один сценарий на двух машинах не делит.

За пограничной службой, дописывающей адрес посетителя в заголовок, верят только тем записям, за которыми мы действительно стоим. Адрес, приписанный в начало заголовка, не меняет ничего.

Лишнее доверие заголовку стирает потолок

Если верить каждой записи заголовка, подбирающий допишет одну строку и начнёт свежий счёт на каждой попытке. Недостаток доверия всего лишь считает нескольких людей одним.

Как выглядит ожидание в коде

Выше потолка в ответ приходит «слишком часто», а не та работа, о которой вы просили. Это ожидание, а не приговор, и следующее окно начинается чистым.

Отступите и повторите с растущей паузой. Наш отправитель поступает с таким же ответом вашего сервера точно так же, поэтому занятого приёмника мы не примем за мёртвого.

Три предела и три разных нрава

Пределом в этом продукте называются три разные вещи, и ведут они себя по-разному.

  • Дневной темп профиля

    Считает открытые страницы, красит полосу и никогда не запрещает действие. Решение остаётся за вами.

  • Сколько профилей открыто

    Вот этот отказывает по-настоящему: сверх числа следующее окно не откроется, пока вы не закроете одно. Само число вы поднимаете сами.

  • Как часто можно обращаться

    Предел частоты, о котором эта страница. Он задаёт скорость вызовов и ничего не говорит про объём работы по тарифу.

Интерфейс на вашей машине

У интерфейса автоматизации на вашем компьютере своего потолка нет. Он доверяет машине, на которой идёт, и всю нагрузку там несут пропуск и отказ отвечать веб-странице.

Это размен со своей ценой, и цена ваша: сорвавшийся цикл на своей машине замечаете и останавливаете вы.

Чего это не делает

  • Отдельной квоты на ключ нет. Счёт идёт по адресу, с которого пришёл вызов, поэтому два ключа с одной машины тратят один счёт на двоих.
  • У интерфейса на вашем компьютере своего потолка нет, и поэтому всю работу там делают пропуск и отказ разговаривать со страницей.
  • Счётчик дневного темпа ничего не запрещает. Он считает открытые страницы, красит полосу и оставляет любое решение читающему.
  • Потолок на минуту это не квота на работу. Сколько у вас профилей и мест в команде, записано другим числом и в другом месте.

Проверить

Каждое утверждение выше указывает на файл, который можно открыть, и на стенд, идущий против настоящего сервера.

Потолок по умолчанию стоит перед каждым ходом, а у входа он теснее
apps/server/src/app.module.ts · apps/server/src/auth/auth.controller.ts
За посредником счёт идёт по адресу самого человека, и подделка заголовка его не сдвигает
apps/server/test/предел-попыток.js · apps/server/test/подбор-пароля.js
Форма, доходящая до человека, считается за окно подлиннее
apps/server/src/support/support.controller.ts · apps/server/test/поддержка.js
У интерфейса на вашей машине вместо потолка стоит пропуск
apps/desktop/src/lib/local-api.js · apps/desktop/test/local-api-gate.js

Вопросы

Что делать, когда просят подождать?
Выдержать паузу и повторить с растущим промежутком, а не сразу же. Тесный цикл повторов выглядит ровно как то нападение, ради которого потолок и поставлен.
Счёт идёт на мой ключ или на меня?
На адрес, с которого пришёл вызов. Ключ называет аккаунт, а потолок называет обращающегося, и это два разных вопроса.
Попытки входа считаются отдельно?
Да, и теснее обычных ходов. Подбор пароля это единственное, что чужой человек может попробовать, не имея у нас аккаунта.
Можно ли заголовком притвориться новым обращающимся?
Нет. Верят только тем посредникам, за которыми сервер действительно стоит, поэтому адрес в начале заголовка читается как утверждение, а не как правда.
Делит ли вся команда один потолок?
Только там, где у вас общий адрес. Счёт идёт по тому, откуда пришёл вызов, а не по тому, чьему аккаунту он принадлежит.

Потолки видны до первой строки кода

Каждый потолок здесь это одна строка в одном файле, а стенды идут против настоящего сервера, а не против его описания.