O que são o actual estado de coisas em enfiar, concorrência e processos bifurcados, em Ruby on Rails?

StackOverflow https://stackoverflow.com/questions/129226

  •  02-07-2019
  •  | 
  •  

Pergunta

Ruby on Rails não faz vários segmentos de solicitação-resposta muito bem, ou pelo menos, ActiveRecord não.

A noção de apenas uma solicitação-resposta ativa ao mesmo tempo pode ser uma trabalheira ao criar aplicações web que garfo fora de um shell de comando que leva muito tempo para terminar.

O que eu gostaria são alguns de seus pontos de vista sobre esses tipos de configurações? É Rails talvez não um bom ajuste para algumas aplicações?

Além disso, qual é o estado atual das coisas em relação à simultaneidade em Ruby on Rails? Quais são as melhores práticas. Existem soluções para as deficiências?

Foi útil?

Solução

Trilhos atualmente não manipula solicitações simultâneas dentro de um único processo de MRI (Matz Rubi Interpreter) Ruby. Cada pedido é essentally envolvido com uma mutex gigante. Um monte de trabalho tem ido para tornar as próximas Rails 2.2 thread-safe, mas você não está indo para obter uma série de benefícios a partir deste quando executados no rubi 1,8x. Eu não posso comentar se Ruby 1.9 será diferente porque eu não sou muito familiarizado com ele, mas provavelmente não eu teria pensamento.

Uma área que parece muito promissor neste sentido está em execução Rails usando JRuby, porque a JVM é geralmente reconhecido como sendo bom em multi-threading. Arun Gupta da Sun Microsystems deu algum noreferrer desempenho números interessantes sobre esta configuração na RailsConf Europa recentemente.

Outras dicas

Neverblock permite a funcionalidade não bloqueio sem modificar a maneira de escrever programas. É realmente um excitante projeto olhando, e foi portado para trabalhar no Ruby 1.8.x (ele depende de fibras de Ruby 1.9 de). Ele funciona tanto com o PostgreSQL e MySQL para executar consultas sem bloqueio. A benchmarks são loucos ...

O Matz Ruby 1.8 usos tópicos verdes , e de Matz Ruby 1.9 usará O nativo / S tópicos. Outras implementações do Ruby 1.8, tais como JRuby e IronRuby, usar o O nativo / S tópicos. YARV, curto para Yet Another Rubi VM, também usa O nativo / s tópicos, mas tem um bloqueio intérprete global para garantir que apenas um thread Ruby está executando em um determinado momento.

Se o que você executar ao shell não é necessário para o processamento da página (por exemplo, você só está provocando tarefas de manutenção ou algo assim), você deve começar-los como processos em segundo plano. Confira Starling e Workling.

Se isto não se aplica à sua situação, você tem que ter certeza várias instâncias dos servidores de aplicativos executados. Tradicionalmente, as pessoas começariam várias instâncias do Mongrel. Mas agora eu diria que a maneira mais fácil de ter uma configuração sólida é, de longe, usando Phusion Passenger . É um módulo do Apache que permite especificar facilmente quantas instâncias (mínimo e máximo) de seus servidores de aplicativos que você quer ter em execução. Passageiro faz o resto. E se bem me lembro, ele não faz round robin estúpido para despachar os pedidos. Eu acho que é por disponibilidade.

Ruby 1.9 é a adição de fibras leves:

http://www.infoq.com/news / 2007/08 / ruby-1-9-fibras

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top