InfoQ

InfoQ

新闻

我的书签

登录注册 以永久保存书签。

该内容已经被标记书签!

标记书签错误,请重试!

Ruby on Rails正式引入Metal

作者 Robert Bazinet 译者 李明(nasi) 发布于 2008年12月25日

领域
语言 & 开发
主题
Web框架 ,
Ruby ,
Ruby on Rails
标签
Rails

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

译者 李明(nasi) 毕业于东北大学,曾供职于百度网页搜索部,从事分布式网络爬虫及其国际化的研发工作。

rack在文章中间怎么写成rake 发表人 vincent xie 发表于
Re: rack在文章中间怎么写成rake 发表人 Li Ming 发表于
  1. 返回顶部

    rack在文章中间怎么写成rake

    发表人 vincent xie

    如题

  2. 返回顶部

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

    发表人 Li Ming

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

深度内容

大规模视频网站的计费与流量管理

本次分享将会就大规模视频网站的计费与流量管理这个话题,从操作层面细细进行讲解和分析,为系统工程师们揭示平日里我们没有关心的另一些内容。同时也希望本次分享能揭示行业中的一些“潜规则”,让互联网行业的流量与带宽管理更为开放与简洁。
本次演讲视频录制于QCon杭州2011

专访Jeffrey Richter:Windows 8是微软的重中之重

Jeffrey Richter以其多本Windows核心技术的经典著作而闻名,同时,他深入掌握微软的.NET等一系列核心技术,2012年1月,Jeffrey Richter在北京接受了InfoQ中文站的专访,谈到Windows 8和WinRT编程,并就异步编程、Windows编程中的可扩展性、性能和安全性方面给出自己的建议。

应用云平台的可用性——从新浪SAE看云平台设计

云计算平台的可用性,相比传统互联网服务而言,更加复杂和困难,也更具有挑战性。本文借助新浪SAE云平台为读者讲述了云平台可用性的定义、如何打造高可用的平台,以及对云计算的用户提出了建议。

JVM定制改进 @ 淘宝

淘宝高度重视Java平台的健康发展,组建了一个团队专注于Java平台的底层部分的性能、功能与稳定性改进;工作主要基于OpenJDK中的HotSpot VM开展,其中一些通用的功能随后也会逐渐反馈给OpenJDK社区。希望能与使用Java平台开发应用的大家交流经验。
本次演讲视频录制于QCon杭州2011

"伤得起"的云计算应用——对云端应用之架构的思考

2011年4月21日至22日是值得云计算从业者纪念的日子。Amazon的IaaS服务出现故障,导致许多商业网站的服务中断,影响非常严重。作为云计算用户,我们需要思考的是,如何保证即便在云服务不可用的情况,我们的应用架构仍然能够屹立不倒?本文正是站在云计算用户的角度试图探讨这一问题。

让交付的速度跟上思考的速度

12人的技术团队,4组刀片服务器,每月20亿的访问量,每日1次准时部署,99.9%的可用性。这可能吗?当然。想知道如何做的吗?百姓网将与您分享他们在DevOps实践过程中的经验和技巧。
本次演讲视频录制于QCon杭州2011

架构之路——穿行在产品和业务之间

篱笆作为一家起源于社区的电子商务公司,反映到技术层面就是同时要面对产品和业务,以及经营战略的变化调整。如何在产品和业务的夹缝之间完成技术架构的抽象与平衡,寻找更有效的价值定位,这当中有些经验教训和个人感悟愿与众人分享。
本次演讲视频录制于QCon杭州2011

特性注入:成功三部曲

本文将对特性注入以及相关方法做一个扫盲性的介绍。我们会解释这个框架的关键要素,并附上实例来证实它们。为了让文章保持相对较短,我们不会深入到某个工具或方法中,而是会给出一些参考资料,以便大家做进一步的研究。