InfoQ

InfoQ

技术访谈

我的书签

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

该内容已经被标记书签!

标记书签错误,请重试!

录制于:
Recorded at

Luke Galea谈Ruby和Erlang

受访人 Luke Galea 采访人 Werner Schuster 发布于 2009年11月20日 长度 00:16:07

领域
架构 & 设计,
语言 & 开发
主题
Web框架 ,
Ruby ,
Ruby on Rails ,
性能和可伸缩性
标签
Erlang ,
Merb
 
概要
Luke Galea是Avid Life Media的开发总监,这是一家拥有多个大型约会网站的多伦多公司。他是Rails的Hyperactive Resource插件的作者,活跃于Ruby和Erlang社区。他最近的项目是http://www.cougarlife.com。

个人简介
本视频由李永伦翻译,刘申审校。

Luke Galea是Avid Life Media的开发总监,这是一家拥有多个大型约会网站的多伦多公司。他是Rails的Hyperactive Resource插件的作者,活跃于Ruby和Erlang社区。他最近的项目是http://www.cougarlife.com。

关于会议
FutureRuby并不是一个Ruby大会,但却是一个Rubyists大会。我们为大家提供一个机会来描绘长远的目标,我们希望在未来,Ruby会为我们的生活带来更多的创新。
这里是FutureRuby 2009,多伦多。坐在我旁边的是Luke Galea。何不先来个自我介绍?
我是一名Ruby开发者,在多伦多的Avid Life Media公司工作。我们拥有很多约会网站,最著名的是www.establishmen.com。我们处理来自世界各地的大量用户的请求。我们克服了很多技术难题,我们用Merb创建了一个非常棒的平台,以Erlang作为后端,用这个平台驱动了我们最新的网站的开发,比如说 www.establishmen.com,还有许多网站在做。这真是个有趣的经历,从我们的老网站上吸取经验,比如说www.hotornot.com 和www.ashleymadison.com,并且融入使用最新技术创建的网站里。Ruby、Merb、Erlang使我们可以在极短时间里把一些很棒的东西融到一起,这些东西无论从开发的角度还是从用户的角度都有着令人惊异的性能。真让人兴奋。
在把不同的网站从其它平台转到Ruby的过程中,你也把这些不同的网站统一到一个通用平台上,对吗?
没错。在这一点上,我们更关注使平台的功能完善和稳定。我们不打算换掉所有网站的PHP,但最终我们希望有一个平台可以处理所有东西。按照我们的开发进度,通过我们所有现代工具获得的开发速度,我预期我们很快就可以实现目标,所以很兴奋。然而,在这一点上,我们正在开发一系列网站,一个比一个更困难、更复杂,这迫使我们不断地往这个平台里添加功能,以便证明这个平台适用于非常艰难的情况以及允许我们逐渐地往里面添加功能。这的确有很多乐趣,挑战也很大。我们努力使所有东西保持抽象和通用,同时也能适应每个网站的特殊性。
你在前端(也就是网站)使用Merb和Rails,你也把它用于其它部分的逻辑吗?
我们使用这种逐渐被认为是标准的模式:jQuery在前端,Haml和SASS处理所有显示,然后我们用Merb和DataMapper做网站本身,但是,为了使事情来得更好,我们在后端结合RabbitMQ使用了Erlang。基本上,所有可以异步处理的东西我们都交给Erlang处理,而我们也正是这样做的。从用户的角度来看,他们很快就能看到他们的页面,但在后台,事情还在处理。当某人登录进来,我们马上在后台开始工作,为的是预先帮他们准备好需要的东西,或者找出它们接下来会看到谁,或者预先生成一组可能的搜索结果诸如此类。当然,后台还会碰到很多需求,但Merb处理了大部分逻辑。
你是怎么接触Erlang的?
几年前我遇到Erlang,那时我正在为大学的帮助网络中心工作。一开始我把它看作一门ETL(提取、转换和装载)语言,从各个不同的医疗系统获取数据,然后对它进行转换并把它装载到数据仓库或者之类的东西里。现在,所有东西要么通过自定义的专有语言完成,这些语言是函数式语言,要么人们通过他们恰好懂得的语言把它整理到一起。我认为Erlang是负责这项工作的极佳语言,但是,我逐渐发现,它缺少了很多很多Ruby爱好者喜欢的东西。

没有变形库(inflection libraries)帮你把字符串或之类的东西复数化或者单数化,所以我要到Ruby那里拿到Erlang这里用,我认为那些东西非常酷,因为大部分 Erlang开发者都是做电信的。所以他们从不写复数库或者变形库,但是,如果Erlang想得到更多的支持,它就该有这些使Ruby变得很棒的东西。尽管如此,从专业的角度来说,我们实际上只用Erlang做一些消息通信和后台处理之类的东西。我希望他们继续增强类库和语言的功能,使之最终成为一个可以用来轻松开发整个网络应用程序的地方。

很高兴看到Ruby社区的人逐渐对Erlang产生兴趣。在去年的RubyFringe,很多人开始讨论我们各自是如何使用Erlang的,很多人都觉得对于Ruby爱好者来说它将会是下一个焦点。所以我们创建了多伦多Erlang小组T.Erl,Ruby爱好者聚集到这里讨论Erlang,我们还有少数人每天领取工资从事Erlang开发的,我认为随着时间的推移,我们将会逐渐看到更多人领取工资从事Erlang开发,越来越多Ruby爱好者会发现 Erlang对其工作的帮助。
你是怎样与Erlang进行互操作的?Erlang是以某种网络格式获取消息的吗,Jabber还是其它方式?
我们使用的是RabbitMQ,这是一个消息队列。基本上,我们从Ruby往队列发送消息,然后它们会在后台处理,这是一种做法。另一种做法是按照网站,更确切地说,按照使用情况通过XMPP进行交互,这是一个Jabber协议。如果我们要做通知机制,或者试图获得接近实时的效果,那么我们会把它看作聊天协议。我们有一些自定义的聊天数据包可以发送到ejabberd,这是Erlang Jabber后台程序,然后把它分发给所有需要知道礼物已经发出或者新的私人消息已经收到的人。
你提到使用Merb,它快要被淘汰了。你会不会对此感到高兴?你打算使用Rails吗?你是否为此使用Rails的子集?你有什么计划?
这绝对是个好问题。过去,我只用Rails,但直到你用了Merb才意识到你错过了什么。事后发现Rails很不一致。它的API不像Merb那样深思熟虑的简洁,我明白这是因为Merb从Rails 那吸取了教训,并且无需顾虑向后兼容等问题。在这一点上,很难想像它们之间是如何协调的,因为在Merb开发者和Rails开发者的角度来看,这些API 如此不同,以至于我不能简单地来回切换。

如果我写了一整天Merb代码然后回家,我无法轻易用回它,因为它快要关闭了,我猜这是因为Rails有一个很大的用户群,所以Rails 3.0将会偏向Rails而不是Merb。从我们的角度来看,我们要么在将来某个时刻饮弹自尽,要么把所有东西都转到Rails 3.0,或者,如果我们找到足够的支持使Merb存活下来,那么我们会坚持下去,但我预料大部分使用Merb的人都会转到Rails 3.0。
据说有人计划提供了一些工具,帮助从Merb转到Rails。你见过这些工具吗?
没有,我还没试过这些工具。我怀疑有些东西用过就忘了。我不认为你会在它里面运行某些东西。甚至曾经有些工具可以帮助你从Rails 1.0转到Rails 2.0,它会找出代码里的参数、添加参数或者诸如此类的问题。API的改变只需进行文本搜索,找出你在哪里使用了它们,然后你自己去那里修正。我相信这些东西是有用的,但我们的工作量仍然很大。即使Rails的一次小改动的升级也是一个大问题。

过去,在我工作过的MDL(Medical Decision Logic),我们的原则是,如果我们想用新版Rails的一个功能,这将会是我们升级的合理理由,但我们不会为了升级而升级,因为在很多情况下,网站工作良好,所有人都感到很满意。我们不会被任何版本不一致性拖累,要证明花费的时间是合理的真的很难。Active Resource就曾经导致我们这样做。我们在MDL有个应用程序用于临床癌症研究,它大约有55,000-60,000行Ruby代码,这是一个大型 Rails应用程序。我们决定升级到新版的Rails,是Active Resource使我们踏出这一步的,因为我们需要连接不同的系统,而这似乎是最佳的途径。
你创建了新版的ActiveResource?
是的,我们详细检查了把这个庞大的应用程序升级到新版的Rails将会遇到的所有问题,然后我们开始使用ActiveResource,我们发现所有需要注意的问题都出现了,比如说,我们启动它并查看所有文档,但注意事项不正确。它的API应该和活动记录(active record)的一样,但它只有很小的一部分,甚至在某些情况下,相同的方法实现了,但这个实现包含了不同的语义,行为也不一样。它们很接近,以至于你发现你期望能做的事情做不到,以及你通常能做的事情突然在后面出错了。

我们当时的做法是创建了HyperactiveResource并让它扩展Active Resource,然后修改它的行为,还添加了新的行为,以便支持诸如关联之类的东西,并使一个活动资源(active resource)能从属于另一个活动资源或者一个模型,还有的就是使活动记录和活动资源共存并相互引用。我想说的是,如果你想使用 ActiveResource来创建映射,你真的需要看看Hyperactive Resource,否则等着你的将会是一个痛苦的世界。
你提到你曾在医疗领域工作过。你那时做的是什么?
开始时我为多伦多以及一个医疗网络的众多医院工作,我们的应用程序很多都是内部的,它们为医院里的多种不同功能提供支持。我第一次接触Ruby时就遇到Rails了,那时离1.0版的发布还有很久,我们看到一个试用它的机会,我们有5、6个用户,他们都是内部的,他们对停机时间以及我们期望遇到的奇怪问题都很宽容。

因此,我们引入Rails,用于图表跟踪以及许多其它需求,像健康记录。随着时间的推移,它逐渐成长,因为它使我们很容易就可以添加新特性。越来越多功能在我们的Rails应用程序里完成,比如说,在后台跟踪病人的图表去哪了或者两个医生之间的来往信件等等。最终,我从那转到从事医疗研究软件,我们协助医生进行大量临床试验,你有上千个病人试用新型抗癌药物,你需要跟踪他们的进展、实验结果以及所有这类东西。
这基本上是数据库应用程序?
粗略地说,是的。我想,临床研究管理系统的一大部分是时间表以及核对某些事实,比如说,你有一个药不能在特定实验结果出来的两天内服用,因为它会扭曲这个结果或者这个药会产生冲突。当你面对一个要试用不同实验提供的20到30个药的病人时,找出哪些天应该服用哪些药以及实验将在何时结束就会成为真正的问题。

我们允许他们输入这项研究的元数据,并使用它们从Ruby里调用Prolog,Prolog善于约束求解(constraint solving),于是Ruby会定义所有这些约束,然后Prolog会核对所有事情发生的理想时间并把结果转换到病人的日历里。他们可以说:“好了,我知道周一或者周二我要过来试用这个药,如果因为某些原因拖延了,就会和其它东西冲突。”
这是否意味着你从Ruby或者Prolog输入数据创建Prolog代码?
是的,我们创建了一个Prolog输入数据。最终也没有那么多Prolog代码。这是因为这个语言非常适用于这个问题,它很简洁。在 RubyFringe,有很多讨论是关于使用多种语言的,我个人认为这就是生活之道。我们在需要时使用Erlang,我们使用Ruby,过去我们也用 PHP,Prolog,在那种情况里,Rails应用程序生成Prolog输入,接着发送到一个正在运行的Prolog进程,然后它会取回结果并进行解析。
show all  show all show all
变形库(inflection libraries)zhe个翻译是在是太不达意了 发表人 田 乐 发表于
Re: 变形库(inflection libraries)zhe个翻译是在是太不达意了 发表人 刘 申 发表于
Re: 变形库(inflection libraries)zhe个翻译是在是太不达意了 发表人 李 永伦 发表于
  1. 返回顶部

    变形库(inflection libraries)zhe个翻译是在是太不达意了

    发表人 田 乐

    词尾变化,单词单复数变化。变型库让人联想到序列化,或者格式转化,但是实际上这里不是这个意思。作者只是举例说明Erlang没有Ruby那样自然的语法糖。

  2. 返回顶部

    Re: 变形库(inflection libraries)zhe个翻译是在是太不达意了

    发表人 刘 申

    恩,恩,这句话只能放在上下文中理解,单独看这个词是不太妥。当初也没找到太好的译法。

    那你认为,inflection libraries要怎么译?

  3. 返回顶部

    Re: 变形库(inflection libraries)zhe个翻译是在是太不达意了

    发表人 李 永伦

    inflection libraries在这里是直译,确实不达意,非常抱歉。

    你有没有发现,很多时候,我们在和别人交流技术的过程中使用某些术语的中文版居然会导致不知所然,最后不得不换会英文原版,才恍然大悟。

    我想,大多数时候,我们在学习的过程中都能够意会术语,只有到了翻译的过程才会被术语问题搞晕,你觉得呢?

深度内容

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

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

特性注入:成功三部曲

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