BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Ruby on Rails正式引入Metal

| 作者 Robert Bazinet 关注 0 他的粉丝 ,译者 李明(nasi) 关注 0 他的粉丝 发布于 2008年12月26日. 估计阅读时间: 6 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

Ruby on Rails团队正忙于采用Rack将Rails推升至新的高度。Rack的实现方式使得开发者可以在自己的应用中使用许多现成的中间件,而这种特性使得Rails团队开发Metal成为可能。Metal是通用Rack中间件的包装,放置在Rails请求之前,并且可以访问Rails的会话。对于那些要求运行速度非常快,需要每秒处理成百上千个请求的应用来说,Metal简直就是量身定做的一般。

David Heinemeier HanssonRuby on Rails的官方博客上正式宣布引入Rails Metal,并举例说明了其适用范围:

目前为止我们已经实现了一个轻量级的包装器,它封装了通用Rack中间件,并命名为"Metal"。 Rails Metal对类似与Campfire投票服务的应用非常有用,Campfire每秒需要处理成百上千的请求,速度要求非常快,同时其逻辑又很简单(2个数据库调用然后返回一个字符串)。目前这个服务是用C编写的,不过我们将会看到,它很快将会被Rails Metal所取代。

Jesse Newland也发表了一篇名为Rails Metal:借Rails之力的微框架的博文,其中写到:

最近我们用Rack取代了Rails原有的请求处理代码,并且集成了中间件的支持,Rails Metal是一项睿智的改进,它允许Rails应用使用Rack中间件来创建一个超级快的action。

Jesse提供了Rails Metal的“hello word”的例子,并与普通的Rails控制器做了比较:

class Poller < Rails::Rack::Metal
    def call(env)
      if env["PATH_INFO"] =~ /^\/poller/
        [[200], {"Content-Type" => "text/html"}, "Hello, World!"]
      else
        [[404], {"Content-Type" => "text/html"}, "Not Found"]
      end
    end
end

普通的Rails控制器:

class OldPollerController < ApplicationController
      def poller
        render :text => "Hello World!"
      end
end

这两段代码迥异,在一个简单的基准测试上的结果是:Metal比老版本的controller快25倍。

InfoQ采访了Rails核心团队成员、Rails Metal的开发者Joshua Peek,了解到了一些这个前景一片光明的新兴技术的细节。

当被问道Rails Metal是什么时,Joshua回答说:

Rails Metal应用是一种面向特定类型的应用,小而且快。它们可以和Rails应用在相同的进程里运行,这意味着它应该很容易开发,或者你也可以单独部署。

哪些类型的问题适合使用Rail Metal来解决?

Metal适用于构建需要每秒处理成百上千请求的微型服务。

Rails Metal是一种新技术,并不是人人都适用,那么Metal对于一般的Rails开发者来说有什么价值呢?

虽然对于任何一个Rails开发者来说,建立metal应用都是件非常容易的事,但是它确实是一件利器。Rails开发者还是应该继续按照原来的方式使用Rails,当他们确认某个特定的action有特别高的性能要求时,Metal就能派上用场了。

Metal似乎是用到了最新的Rack实现最本质的功能,但是实际上,Rails引入Metal的目的却并不在此,就此Josh解释说:

Rails提供了一个全栈的MVC框架,包罗万象,你可以用来构建一个真正的应用。然而,Rails也允许你使用“metal”来实现最快的速度。无论是两者中的哪一个,我们都希望给开发者提供最好的支持。

有意思的是,人们在看到Merb-Core时,可能会拿它和Metal做比较,而事实上两者迥然不同。

Merb是一个完整的MVC框架。然而,Metal就不是那么有血有肉了。它简化了Rack API,你得到的是一个原始的请求环境散列,你需要返回一个状态码,应答包头和一个应答包体。在Metal里面没有控制器或者视图的概念,开发者可以用最少的代码来实现想要的功能。

我们已经听过很多微框架及其适用范围了。Jesse Newland把Metal和其他的“微框架”相提并论。我们询问了Joshua,Metal是否会造成其他的微框架的需求降低:

不会的。对于像Sinatra这类微框架来说,还有一定的空间,把它做得足够简单,来编写简单的API处理程序。事实上,你可以把Sinatra当成一个metal应用来使用。因为Sinatra构建于Rack之上,所以会工作的很好。

最后,开发者如何才能获取到Metal?

现在Edge Rails已经引入了Metal。或者你也可以等Rails的下一个gem发布,应该是2.3版。

Rails Metal的发布已经引起了广泛的关注,它给需要速度的Rails应用带来了好消息。更多关于Rails Metal的信息,请访问Ruby on Rails官方博客以及GitHub代码库,你可以从Github库中获取Rails。

查看英文原文:Ruby on Rails gets down to the Metal

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

rack在文章中间怎么写成rake by vincent xie

如题

Re: rack在文章中间怎么写成rake by Li Ming

是笔误,已经修改,谢谢提醒 :-)

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

2 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT