[Cristiano Casado] Phusion Passenger 2.0.5 + global queuing

Saiu do forno a release 2.0.5 do Phusion Passenger com um fix importante para a feature global queuing, que foi introduzida na versão 2.0.4, porém era a causa de deadlocks quando usada em combinação com o MPM worker do apache.

Mas qual a utilidade desta feature ? O Passenger trabalha com múltiplos processos Ruby on Rails, cada um com a responsabilidade em processar os requests HTTP. O processo leva determinado tempo para processar um request HTTP específico. Se a aplicação estiver sob alto tráfego, estes processos de backend podem não responder em tempo hábil, podendo haver um enfileramento de novos requests a serem processados.

Quando não temos o global queuing, cada processo possui sua própria fila para requests pendentes (private queue), com possibilidades de um processo estar mais carregado, ou seja com mais requests pendentes, do que outros.

Com o global queuing, temos a implementação de uma fila compartilhada entre todos os processos de backend. Se todos os processos estiverem ocupados o Passenger mantém o novo request nesta fila global, até que o primeiro processo tenha disponibilidade de processamento. A distribuição destes requests é mais eficiente, com o processo mais desocupado recebendo o novo request.

O download do Passenger versão 2.0.5 está disponível aqui no RubyForge.