BT

Ruby on Rails chega ao Metal

por Robert Bazinet , traduzido por Douglas Masson em 30 Jan 2009 |

A equipe do Ruby on Rails esteveocupada trazendo o Rails para o próximo nível com a adoção do Rack. A implementação do Rack permitiu aos desenvolvedores usarem várias partes disponíveis de middleware em suas aplicações. Esta adição tem permitido ao time do Rails criar o Rails Metal, um wrapper em torno do middleware genérico Rackque fica entre um request Rails com acesso a sessões Rails. O Metal foi criado para aplicações que necessitam ser muito rápidas e processar centenas de pedidos por segundo.

David Heinemeier Hansson anunciou o Rails Metal no blog do Ruby on Rails e descreve um exemplo de seu uso:

Para este cenário, nós temos contruímos um wrapper fino ao redor do middleware genérico Rack e demos a ele um lugar na hierarquia assim como o nome de “Metal”. Rails Metal objetiva coisas como o poller de serviços Campfire que está fazendo centenas de pedidos por segundo e precisa ser realmente rápido e é ao mesmo tempo realmente simples (duas chamadas ao banco de dados e retornando uma string). Este serviço é atualmente escrito em C, mas pretendemos convertê-lo para Rails Metal de vez.

Jesse Newland também postou no blog descrevendo o Rails Metal como um micro-framework com o poder do Rails e tinha isso para dizer:

Depois do trabalho para substituir o código porcaria de processamento de requests do Rails pelo Rack e integrar seu suporte de middleware, o Rails Metal é uma progressão lógica que permite aplicativos Rails usar o poder do Rack middleware para criar ações super rápidas.

Jesse fornece um exemplo do típico “Hello World” usando o Metal comparado com um controller normal do Rails:

‑­
class Poller < Rails::Rack::Metal
    def call(env)
      if env["PATH_INFO"] =~ /^\/poller/
        [[200], {"Content-Type" => "text/html"}, "Oi Mundo!"]
      else

        [[404], {"Content-Type" => "text/html"}, "Não encontrado"]
      end
    end
end

Controller normal do Rails:

class OldPollerController < ApplicationController
      def poller
        render :text => "Oi Mundo!"
      end
end

O código é evidentemente muito diferente com um simples benchmark mostrando que o Metal é 25x mais rápido do que o código do controller.

InfoQ falou com Joshua Peek da equipe do Rails core e o desenvolvedor por atrás do Rails Metal para saber alguns detalhes sobre esta promissora nova tecnologia.

­

Quando perguntado o que é Rails Metal, Joshua respondeu:

Aplicações Rails Metal são pequenos pontos específicos em uma aplicação que são construídos para velocidade. Eles podem rodar junto da sua aplicação Rails no mesmo processo, o que significa que é realmente fácil de desenvolver ou podem ser feito o deploy standalone.

Em determinar quais os tipos de problemas o Rails Metal pretende resolver:

Metal foca pequenos serviços que precisam ser capazes de fazer centenas de requests por segundo.

Rails Metal é novo e não é para todos, então a questão de que o Metal significa para o desenvolvedor Rails normal:

Embora seja realmente fácil para qualquer desenvolvedor Rails começar a construir aplicações metal, é uma ferramenta muito afiada. Desenvolvedores Rails devem continuar a usar Rails como eles fazem normalmente mas quando eles tiverem a certeza de que uma ação específica requer performance extra, as ferramentas estão disponíveis.

O Metal pode parecer um uso natural da última implementação do Rack, mas a razão para sua criação pode não ser, Josh explica:

Nós queríamos dar aos desenvolvedores o melhor dos dois mundos. Rails dá a você um framework MVC full stack com tudo que precisa para construir uma aplicação real, mas ainda permite a você utilizar o "metal" quando precisar da maior velocidade possível.

É interessante olhar para o Merb-Core e possivelmente comparar com o Metal. Acontece que os dois são bastante diferentes:

Merb é um framework MVC full. Entretanto, os bits do Metal são extremamente bare bones. Ele é simplesmente a Rack API. Você recebeu um ambiente bruto de tratamento de requests e só precisa retornar um código de status, headers e uma corpo de resposta . Não há noção de controlers ou views. Cabe ao desenvolvedor implementar a quantidade mínima de código que eles queiram.

Nós ouvimos bastante sobre os micro-frameworks e seu nicho. O Metal é usado da mesma forma por Jesse Newland referindo a outros “micro-frameworks”. Nós perguntamos ao Joshua se o Metal eliminaria a necessidade de outros micro-frameworks:

Não. Existe ainda espaço para micro-frameworks como Sinatra que tornam extremamente simples improvisar um simples manipulador de API De fato, você realmente pode usar o Sinatra como uma aplicação Metal. Visto que o Sinatra é feito em Rack, basicamente funciona.

Finalmente, no assunto de como os desenvolvedores poderão obter o Metal:

Ele já está disponível no Edge Rails. Ou então você pode esperar a próxima gem da versão do Rails, que será a 2.3.

O Rails Metal recebeu bastante atenção com seu anúncio. Ele apresenta uma grande promessa para aplicações Rails que necessitam de velocidade. Mais informações sobre Rails Metal podem ser encontradas no Blog do Ruby on Rails bem como no repositório do GitHub onde o Rails é disponibilizado.

Olá visitante

Você precisa cadastrar-se no InfoQ Brasil ou para enviar comentários. Há muitas vantagens em se cadastrar.

Obtenha o máximo da experiência do InfoQ Brasil.

Dê sua opinião

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber menssagens dessa discussão
Comentários da comunidade

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber menssagens dessa discussão

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber menssagens dessa discussão

Dê sua opinião

Conteúdo educacional

Feedback geral
Bugs
Publicidade
Editorial
InfoQ Brasil e todo o seu conteúdo: todos os direitos reservados. © 2006-2013 C4Media Inc.
Política de privacidade
BT