Documentation
¶
Overview ¶
Package exchangepace — темп «запросов в секунду на ключ» у поверхности выдачи (kaname#315): ведро в одну секунду объявленного темпа.
Держит две оси приёмки ceremony-pace-is-named-by-number.md: П2 — обменов в секунду на ЗАЯВЛЕННЫЙ идентификатор клиента (машинные полосы токен-эндпоинта; тратят только принятые предъявления — вызывающий возвращает бронь) и П4 — запросов авторизации в секунду на источник (точка авторизации; тратит всякий запрос, прошедший проверку метода, — бронь не возвращается).
Бронь, а не «спросить» и «списать» ¶
Решение и его следствие — ОДНА операция: Pace.Reserve сам списывает обмен и сам отвечает, остался ли он. Отдельного вопроса «есть ли темп» на пути решения нет: разнесённые, вопрос и списание пропускают параллельные запросы сверх темпа, и потолок становится «темп × параллелизм».
Списанное возвращается вызывающим, когда обмен НЕ состоялся (отвергнут до принятия предъявления). Так темп клиента тратят только принятые предъявления: предъявитель без ключа клиента, назвавший чужой идентификатор, держит бронь лишь пока его проверяют, и чужой темп не расходует.
Ведро и его запас ¶
У каждого ключа — ведро ёмкостью в одну секунду объявленного темпа, пополняемое непрерывно. Запас сверх секунды не копится: клиент, молчавший час, не получает права на всплеск за этот час.
Память ограничена числом обменивавшихся, а не числом заявленных ¶
Ключ ведра — ЗАЯВЛЕННЫЙ идентификатор, и заявить можно любой. Поэтому ведро, вернувшееся к полному, удаляется: полное ведро неотличимо от отсутствующего. Возвращённая бронь (отвергнутый обмен) оставляет полное ведро — и строки не оставляет. Удержанная бронь пополняется за горизонт в одну секунду; проход уборки идёт, когда таблица удвоилась с прошлого прохода либо горизонт прошёл, поэтому в таблице живут только обменивавшиеся за последний горизонт.
Величина — на процесс ¶
Ведро живёт в памяти процесса. Несколько реплик за балансировщиком дают клиенту до «темп × число реплик»: величина объявляется в расчёте на реплику, и это сказано в описании ручки.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Pace ¶
type Pace struct {
// contains filtered or unexported fields
}
Pace — темп обменов по ключу.
func New ¶
New собирает темп. Незаданная величина — ОТКАЗ ПОСТРОЕНИЯ: ноль означал бы «без ограничения», а темп, подставленный построением, стражу старта не различить с объявленным.
func (*Pace) PerSecond ¶
PerSecond — объявленный темп в секунду: ёмкость ведра и скорость его пополнения.