ruby 网页 服务器_认识Ruby应用服务器的巨人

ruby 网页 服务器

PostRank Labs宣布他们发布了支持PostRank的Ruby Web服务器框架的开源版本。 这个名为Goliath的项目是一个为提高速度而设计的异步服务器,它利用Ruby 1.9+的关键功能来完成工作。

与Mongrel,Unicorn或Thin等其他Ruby Web服务器不同,Goliath使用EventMachine进行事件驱动的设计。 将其与MRI Ruby 1.9+结合使用,以及使用Ruby的Fibers ,可实现快速且可管理的应用程序。

从Goliath项目网站:

Goliath是为PostRank提供支持的非阻塞(异步)Ruby Web服务器框架的开源版本。 它是一个轻型框架,旨在满足以下目标:裸机性能,Rack API和中间件支持,简单配置,完全异步处理以及可读可维护的代码(阅读:无回调)。

该框架由EventMachineReact器,高性能HTTP解析器和Ruby 1.9运行时提供支持。 与其他异步框架相比,Goliath的一大主要优势是,通过利用Ruby 1.9+中引入的Ruby纤维,它可以将复杂的基于回调的代码解开成我们都熟悉并熟悉的格式:线性执行,这导致更具可维护性和可读性的代码。

每个Goliath请求都在其自己的Ruby光纤中执行,并且所有异步I / O操作都可以透明地挂起,并随后恢复处理,而无需开发人员编写任何其他代码。 请求处理和响应处理都可以完全异步的方式完成:流上传,firehose API,请求/响应等。

InfoQ采访了伊利亚·格里戈里克 ,创始人兼CTO 图解! ,有关巨人和所涉及的技术。 PostRank开发了供自己使用的Goliath,并决定为社区的利益开源该技术。 Ilya上周在他的博客宣布了该项目

由于这是一个如此新的项目,并且新发布的,所以我们想询问Ilya详细信息。

罗伯特·巴赞特(RB):您能告诉读者什么是歌利亚?

Ilya Grigorik(IG): Goliath是为PostRank提供支持的非阻塞(异步)Ruby Web服务器框架的开源版本。 它既是应用程序服务器又是轻型框架,旨在满足以下目标:裸机性能,Rack API和中间件支持,简单的配置,完全异步处理以及可读性和可维护性的代码(最后两个可以说是与众不同的来自其他竞争和类似框架的Goliath)。

RB:为什么PostRank选择开发它?

IG:从技术上讲,Goliath的发行版是我们在PostRank开发的内部Web堆栈的v4。 我们的第一个版本可以追溯到2008年初-当时,我们对Ruby应用服务器领域的可用替代方案不满意,因此我们选择了EventMachine并开始开发自己的版本。 随着时间的流逝,我们已经经历了三个主要版本,每个版本都包含很多学习和改进。

话虽如此,我们对Goliath的主要目标仍然保持不变:它是用于开发Web服务(API)的框架。 这意味着,我们并不是要竞争或替换我们的Rails或Sinatra应用程序,而是Goliath旨在充当这些应用程序的数据源。 在内部,我们使用Goliath在干净的高性能HTTP端点之后抽象了数据库,调度系统等。

RB:您可以在PostRank上使用它; 它为您的公司解决了什么问题?

IG:第一个版本可以追溯到2008年初,但是利用Ruby 1.9功能的最新迭代自2010年初开始投入生产。它对我们来说是坚如磐石的性能-今天,我们通过Goliath提供500多个请求/秒,正常运行时间以月为单位-因此我们决定开源。 PostRank上Goliath的大多数内部用例是简单的请求/响应样式API,但是我们也使用它向合作伙伴提供“ firehose”样式API,在该伙伴中,数据直接从AMQP队列中流式传输,过滤并作为HTTP流。

我们自己的许多内部服务都依赖于我们向合作伙伴公开的相同HTTP端点,并且我们倾向于推送大量数据,因此我们之所以想要一台能够有效处理并行请求处理的服务器,原因是活动和流水线化,并提供简单易读的API。

RB:您能解释一下Goliath的一些用例,它最适合什么用?

IG:如果您希望建立一个网络服务来解耦或抽象某些资源,那么Goliath是最合适的选择-不要将其视为Rails或相关框架的替代品,而应将其视为数据下一个Web应用程序的源(JSON / XML终结点)。 Goliath允许您编写高性能的API,这些API可以支持流,保持活动状态以及功能齐全的异步HTTP 1.1 Web服务器所期望的所有其他功能。

RB: Goliath是Node.js的Ruby版本吗?

IG: Goliath与node.js属于同一服务器类别:完全异步并围绕事件循环进行架构。 对于node.js,您使用V8作为运行时,对于Goliath,您使用Ruby 1.9和Eventmachine。 在这方面,是的,它们非常相似。

但是,正如我前面提到的,我们自己的内部Goliath版本经历了三个主要修订。 在其中一个修订的过程中,我们发现,通过回调编写异步代码(Ruby或Javascript)导致代码库变得非常难以维护,读取和测试。 因此,当我们看到node.js的流行度上升时,在内部,我们开始走另一条路:我们正在寻找一种解开代码的方法。 老实说,“回调意大利面条”和Ruby的风格有些矛盾,老实说,尽管我们喜欢PostRank上的Javascript,但我们并不需要抛弃Ruby及其支持Javascript的所有优秀库和框架。

那就是Ruby 1.9和Fibers出现的地方-这就是我们的解决方案。 但更多的是在一秒钟...

RB:使用Goliath时需要Ruby 1.9。 利用了Ruby 1.9的哪些特定方面?

IG:在Goliath中使用Ruby 1.9的主要原因是由于引入了Fibers [1]。 什么是Ruby纤维? 它们是连续的,这使我们可以任意地暂停和恢复任何处理功能(又称为协作调度)。 这使我们能够随意透明地暂停和恢复任何IO操作,而无需向开发人员公开此交互。 因此,通过利用光纤,我们可以将所有回调代码隐藏在后台,在Goliath中公开“同步外观的API”,同时保留在事件循环中运行的所有不错的属性。

净结果? 我们可以摆脱Goliath API中的所有回调,从而大大简化了我们的代码,使其可读性强并且易于维护。 实际上,从PostRank的Goliath开始的新开发人员可能会完全忽略他们正在编写异步应用程序的事实-那时,我们知道我们选择了一个值得追求的模型。

RB: PostRank如何利用MySQL或MongoDB等数据存储?

IG:在大多数情况下,我们实际上试图保持“尽可能接近金属”,这意味着我们倾向于滚动自己SQL并遍历结果集,但这主要是因为我们SQL通常非常简单,但是我们*做*很多*的查找。 话虽如此,我们确实使用了其他驱动程序(如Cassandra等)来抽象出实际的污物。

RB:我很好奇,我可以使用ActiveRecord或其他OR / M(例如DataMapper)从Ruby on Rails应用程序中获得现有模型吗?

只要它们在后台使用异步驱动程序,就没有理由不能将这些ORM与Goliath一起使用。 这是AR的一个简单示例

RB:项目缺少哪些功能?

IG:作为应用服务器,Goliath已经支持您期望的大多数功能:保持活动,流水线,健壮的HTTP解析器,异步请求处理和中间件支持等。展望未来,我很乐意添加对处理和公开websocket连接,并致力于简化利用多个内核的部署方案。

除此之外,Goliath还是用于开发Web服务的(准系统)框架,在改善DSL,配置语法,测试基础结构等方面,还有很多改进的余地。 好消息是,Ruby生态系统提供了以上所有方面的许多出色示例,而借助Goliath,我们可以利用和整合很多工作,这也是我们寻求社区反馈和帮助的地方。

RB:您希望Goliath如何发展?

IG: Goliath现在可以在MRI Ruby,Rubinius和JRuby上运行。 目前,MRI是表现最好的,但是JRuby中有一些非常有前途的工作可能使它成为整体赢家。 我希望我们能真正推动该部门的发展水平,因为这将带来许多有趣的机会。 例如,一旦JRuby和Rubinius是可行的生产平台,那么我们将在“非GIL'ed”环境中运行,这意味着我们可以考虑使Goliath在同一VM中利用多个内核。

当然,正如我前面提到的,DSL和支持框架还有很多改进的余地-绝对是我们希望改进的地方。

RB:伊利亚,非常感谢您的宝贵时间。

有趣的是,Goliath在它可以解决的问题上与node.js非常相似,唯一不同的是node.js使用JavaScript。 现在,Goliath的引入使那些不希望编写服务器端JavaScript的Ruby开发人员能够解决相同的问题,但仍可以使用Ruby。

Goliath看起来像是一种解决一些基本问题的方法,而不必使用完整的Ruby on Rails堆栈,而是创建小型服务来提供数据或为应用程序实现API。 在巨人谷歌A组线程最近询问如何部署 Rails应用程序,伊利亚响应表明巨人可以一个Rails或Sinatra的应用程序一起使用:

实际上,我们将Goliath用作许多Rails应用程序的“数据源”。 因此,请考虑下一个金属端点或sinatra应用程序,您可能希望在其中抽象一些外部资源(数据库,一些自定义逻辑等)。 Rails对于开发面向用户的组件非常有用,我倾向于将Goliath视为“以开发者为中心”的组件-换句话说,是服务于JSON,XML等的终结点。

这里要了解的关键是Goliath是后端管道,用于创建真正快速的基于Rack的API(Web服务),数据服务以及任何其他需要裸机性能的应用程序。

有兴趣了解有关Goliath的更多信息的开发人员,可以在Goliath.io网站GitHub存储库文档Google Group 上找到相关信息 。 对于那些想知道如何使用Goliath测试应用程序的开发人员,PostRanker Dan Sinclair撰写了一篇冗长而详尽的文章 。 Dan为读者提供了Goliath的基础知识,然后直接向开发人员展示了如何正确测试Goliath应用程序。

关于作者

Robert Bazinet是.NET和Ruby开发人员,还是系统架构师,在从事小型到企业级系统开发方面拥有20多年的经验。 他是Still River Software Company,LLC的独立顾问和创始人,客户范围从小型公司到《财富》 10强公司。 罗布与妻子和女儿住在康涅狄格州伍德斯托克。

[1] 查看此链接

翻译自: https://www.infoq.com/articles/meet-goliath/?topicPageSponsorship=c1246725-b0a7-43a6-9ef9-68102c8d48e1

ruby 网页 服务器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值