Sempre existe a discussão de “Ruby é lento” vs “Ruby é rápido os suficiente”, idem para o Rails. No entanto, é bem difícil você achar medições reais por aí, sei lá porque, já que o log de produção do Rails é perfeito pra isso.
Agora estamos aqui, fazendo nosso dever de casa, sem comparar com nenhum outro site (até porque não temos dados de nenhum outro site mesmo) seguem os gráficos dos tempos que tiramos do RubyOnBr medidos entre 2006-09-11 a 2006-09-18.
Importante notar que o site estava rodando em Apache + CGI, uma das configurações mais lentas possíveis para produção. O site agora roda em Lighttpd + Mongrel, que dizem ser mais rápido. Para tirar a dúvida, daqui duas semanas vamos refazer esse relatório e ver no que dá.
Foram cerca de 9500 requisições de páginas no CMS e mais 4500 requisições no fórum. Lembrando que as páginas do fórum chamam os anúncios na página do CMS, gerando uma requisição extra lá.
Primeiro o Fórum, que é uma aplicação mais “tradicional”.
42% das requições do fórum foram atendidas em menos de 0,1 segundos (10 req/seg). O que é um tempo meio lerdinho, mas legal para a quantidade de gente que acessa o site hoje. Seguindo um pouco, em 73% (cerca de 3 de cada 4 requições) ainda conseguem ser atendidas abaixo de 0,2 segundos (5 req/seg).
A maior parte das requisições (95%) ainda estão dentro de 0,5 segundos. Muito ruim, mas esperar meio segundo pela página ainda não é um absurdo. A partir daí a coisa descamba de vez, e 3% das requisições demora mais de 1 segundo!!!
Finalmente, o tempo médio para o fórum ficou em 0,19 segundos.
No geral, quem usou o fórum nesse período teve ter percebido um pequeno “suspense” antes da página começar a vir. E 3 em cada 100 deve ter mandado o fórum passear pq estava demorando demais.
Não sei se os tempos do com lighttp + mongrel vão ser muito melhores do que isso. Quando trocamos, achei que o fórum ficou mais rápido, mas pode ter sido apenas impressão. No geral, até que os tempos são bem satisfatórios. Imagino que uma aplicação tradicional fique mais ou menos com a mesma curva de tempo (os tempos reais dependem muito da máquina), já que o beast não usa caching algum.
Outra coisa que não se pode esquecer nesse comparativo é que estamos em um servidor compartilhado no RailsPlayground. Ele NÃO é dedicado.
Os dados estão aqui se você quiser baixar e analisar por si mesmo.
Agora os dados do CMS. Esses são muito mais interessantes por causa do sistema de caching que o Radiant faz. Ele não usa o caching do Rails diretamente, as páginas são armazenadas como objetos serializados em YAML. Cada requisição deserializa os objetos e apresenta eles de volta na tela.
A classe resposável por isso é o ResponseCache e ele está bem simples de se entender.
Por padrão, requisições feitas até cinco minutos depois da página gerada são atendidas pelo cache, depois disso a próxima requisição gera novamente a página e coloca ela no cache por mais cinco minutos.
A técnica é simples e muito boa porque páginas mais acessadas são servidas mais rapidamente, e se o movimento do site aumenta, não causa muito impacto, já que todo o movimento em um espaço de cinco minutos também é servido via caching. Bãozinho ele, não?
Como os tempos são menores que o fórum, este gráfico está com um pouco de zoom, comparado com o anterior.
Cerca de 55% das requisições foram atendidas em menos de 0,015 segundos (66 req/seg) o que é um tempo bastante bom, ainda mais quando se considera que estava sendo usado o Apache + CGI. Imaginei que esses tempos não iriam melhorar com Lighttp + Mongrel, então fiz um pequeno teste pra confirmar, entrei na página principal do RubyOnBr e olhei o log… (suspense pra dar clima), tempo? 0,0056 segundos (178 req/seg). A velocidade quase triplicou para uma página em cache. No log inteirinho que eu tenho, nenhum tempo está abaixo de 0,01, nem mesmo as páginas mais simples (de anúncio). E quanto está a velocidade das páginas mais simples? Um pequeno teste com algumas requisições deu 0,0013 (749 req/seg). Nada mau! Entretanto, é muito pouco pra concluir qualquer coisa, daqui duas semanas pretendo tirar os logs novamente e fazer outra vez a comparação.
E se no fórum, 42% das requisições eram geradas em menos de 0,1 seg, aqui, 75% delas caem nessa faixa. Apesar do crescimento rápido, a coisa vai muito bem até 90% das requisições, que são atendidas em menos de 0,3 seg. A partir daí a coisa degringola rápido e 1% das requisições demorou mais de um segundo. Teve uma que, sei lá por que, demorou 33 segundos! Uma só em 9470 requisições, ainda bem. A segunda colocada entre as piores ficou com 8 segundos.
O tempo médio do CMS ficou em 0,11 segundos.
Aqui está o gráfico para o CMS, na mesma escala do gráfico do Fórum.
Se você quiser comparar por si mesmo, os dados podem ser baixados aqui .
Finalmente, aqui está um gráfico comparativo do fórum e do CMS. Dá pra ver que o sistema de caching faz uma grande diferença.
Como o Beast (nosso fórum), tem o objetivo de ser escrito em menos de 500 linhas, o pessoal não se preocupou em fazer caching, imagino que seria legal e bastante simples cachear ao menos as páginas com as discussões, já que são mais vistas que editadas.
Outro ponto interessante é que ambos os sites estão rodando no mesmo servidor, então a comparação está realmente na mesma escala.
Aqui o gráfico em uma escala um menor para facilitar a comparação:
É isso aí, quem quiser deixar um comentário, poste nesse tópico do fórum
Todos os diretos reservados a RubyOnBr. Copyright RubyOnBr .
This site is powered by Radiant CMS.