Можно ли балансировать запросы в пассажире фьюжн на основе параметров? - PullRequest
0 голосов
/ 31 января 2019

Мы предполагаем, что приложение получает запросы для работы на ограниченном количестве ресурсов, которые поддерживают только одну операцию за раз.Пример:

/GET do_stuff?resource=A&other_params
/GET do_stuff?resource=B&other_params

Идея состоит в том, что операция из ресурса A должна быть помещена в процесс A, а запрос для B - в процесс B. Если любой другой запрос получен для ресурса A, он должен быть вочередь в процессе А. Вид гарантии синхронного режима работы для каждого ресурса.

Этого можно добиться с помощью Rabbit MQ или других подобных подходов, или даже с дискретным программированием вне phusion, но в моем случае было бы интересно и практично иметь способ сделать это прямо из конфигурации приложения или любого другогодругая идея.

Чтобы было немного понятнее, переменная ресурса может иметь примерно 500 значений, поэтому жесткое программирование или использование параметра имени группы приложений не подходит.

Сама логика должна выглядеть следующим образом:

incoming request 
      if there is a process that is running a request for the resource 
         put request into process queue
      else 
         spawn or use free process

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

1 Ответ

0 голосов
/ 31 января 2019

Пассажир балансирует запросы по очередям запросов, по одному на группу приложений.Документация здесь гласит, что группа может быть назначена для каждого оператора сервера / местоположения / если, поэтому сначала попробуйте использовать конфигурацию nginx, например:

location /do_stuff {
  if($arg_resource ~ (A|B) ){
    passenger_app_group_name "some_appliation_group_key_for_resource_$arg_resource";
  }
}
...