* Add extra test to pins * Fix pins unrandomizing * Fix pins finally * Add test and docs
2.9 KiB
Пины роутов
Какая задача
У нас есть 2 и более роутов с одинаковым приоритетом и какой-то там разбивкой по весу. Например 3 роута с весами 33:33:33.
К нам приходит плательщик. Он оплачивает какую-то услугу и этот платеж проходит через конкретный терминал конкретного провайдера. Проще говоря он выбрал один из кандидатов (роутов) из списка с одинаковым приоритетом.
Теперь мы хотим чтобы этот плательщик в будущем ходим через тот же самый роут.
Плательщика определяем каким-то там способом.
Решение
Мы в каждом роут кандидате можем указать список характеристик по которым мы будем определять какой именно плательщик к нам пришел.
Когда к нам приходит запрос на проведение платежа, то мы собираем все указанные в конкретном кандидате характеристики и вычисляем хэш этих характеристик. Этот хэш учитывается при сортировке роутов по самым желаемым.
Если как в примере выше у нас 3 роут кандидата с одинаковым весом и список характеристик (например смотрим только на имейл) совпадает, то мы лочим роут с этим значением характеристики. Все последующие платежи с этими значениями будут проходить по тому роуту, что был использован в первой операции. Соответственно вес у нас в одном приоритете становится 100:0:0.
Если же один из этих роутов имеет другой набор характеристик, например имейл и IP адрес клиента, то он участвует в локе пинов с роутами у которых такой же набор характеристик. В данном примере, так как он один, то распределение становится 66:0:33. Если бы был еще один роут с тем же приоритетом и набором характеристик имейл и IP, то распределение было бы 50:0:50:0