hellgate/doc/route_pins.md
ndiezel0 5accc10b24
Fix pins unrandomizing (#134)
* Add extra test to pins

* Fix pins unrandomizing

* Fix pins finally

* Add test and docs
2024-05-30 12:06:37 +05:00

2.9 KiB
Raw Permalink Blame History

Пины роутов

Какая задача

У нас есть 2 и более роутов с одинаковым приоритетом и какой-то там разбивкой по весу. Например 3 роута с весами 33:33:33.

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

Теперь мы хотим чтобы этот плательщик в будущем ходим через тот же самый роут.

Плательщика определяем каким-то там способом.

Решение

Мы в каждом роут кандидате можем указать список характеристик по которым мы будем определять какой именно плательщик к нам пришел.

Когда к нам приходит запрос на проведение платежа, то мы собираем все указанные в конкретном кандидате характеристики и вычисляем хэш этих характеристик. Этот хэш учитывается при сортировке роутов по самым желаемым.

Если как в примере выше у нас 3 роут кандидата с одинаковым весом и список характеристик (например смотрим только на имейл) совпадает, то мы лочим роут с этим значением характеристики. Все последующие платежи с этими значениями будут проходить по тому роуту, что был использован в первой операции. Соответственно вес у нас в одном приоритете становится 100:0:0.

Если же один из этих роутов имеет другой набор характеристик, например имейл и IP адрес клиента, то он участвует в локе пинов с роутами у которых такой же набор характеристик. В данном примере, так как он один, то распределение становится 66:0:33. Если бы был еще один роут с тем же приоритетом и набором характеристик имейл и IP, то распределение было бы 50:0:50:0