BT

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

REST与Web即平台,Subbu Allamaraju访谈​
录制于:

| 受访者 Subbu Allamaraju 关注 1 他的粉丝 作者 Dio Synodinos 关注 3 他的粉丝 发布于 2011年2月16日 | QCon北京2018全面起航:开启与Netflix、微软、ThoughtWorks等公司的技术创新之路!
15:02

个人简介 Subbu Allamaraju是Yahoo!的架构师​,他负责监管以开发者为中心的应用程序平台,设计RESTful Web服务。​多年来他一直投身于设计并开发基于HTTP之上的分布式系统的基础设施。​他参与了多本JEE相关书籍的编著,是《RESTful Web Services Cookbook》​的合著者。​

QCon是一个由社区组织、服务于社区的大会​。它备受关注,由社区中的精英就那些最重要的话题为大家带来最棒的内容,提供了高质量的会议体验​。QCon的技术深度与关注企业级领域​很合适技术团队领导人、架构师和项目经理。​

   

1. 嗨,Subbu,给大家做个自我介绍吧。​

我叫Subbu,就职于Yahoo!。我有两项日常工作:主要工作关注于提供大量用户数据​,例如我管理提供用户内容的平台,其中提供用户产生内容、地点、​身份信息等内容​。我的第二个职责是去理解并找到让我们的平台​具有互操作性的方法。​

   

2. 过去几年里RESTful架构非常流行。团队犯的常见错​误时什么,引起了什么问题?​

这是个好问题,不太好回答,原因有两个:从细节层面来看,很多的讨论是什么才是正确的东西,做什么才是正确的,某个特定的HTTP方法是否该这么用,或者一个URI是否该是这样的。我觉得最近几年里这类讨论​正在逐渐减少,以前此类争论​有很多。但我认为在宏观层面,问题是如何搞对系统的质量属性(quality attribute)​。​在学习REST时,我们中的绝大多数人​是从约束开始的,而不是带来这些约束的质量属性。我发现这么做是很有用的,我鼓励从质量属性开始学起,再是约束,你会受益匪浅的。​

我们要关注的第二个错误,或者说第二件事​ ,是让东西能工作在一起。互操作性对我们来说是一个挑战​。​如果有很多基于HTTP的应用程序​,它们由分散在全球各地的不同团队开发,让他们对某个东西达成共识对互操作性至关重要。那是一个挑战,当人们对REST的理解越来越好时,会有不一致的地方,我们需要能理解这些不一致。

   

3. 你谈到了质量属性,能不能详细说说?​

我们所说的质量属性就是那些你希望系统能做到的事,这样才能满足某些用户场景。举例来说,在出现一个错误或一类错误时,你的系统应该如何应对?​这就是一个质量属性,你需要针对它来做设计,它不会自动冒出来。REST对此不做保证,你要自己来考虑对策,让系统来做处理。

   

4. 理论上来说运用RESTful架构有很多好处。根据你的经验,相比其他集成方法,你从实际的REST集成项目中​看到了什么具体的好处?​

我想最大的好处就是互操作性,并且你从缓存上获得了70-80%的好处。如果你不知道如何正确运用HTTP的其他部分、超文本或别的东西,你还是可以从大规模缓存中获得80%的好处。​对我而言,这就像一个后场高远球得分(clear winner)。​我开始意识到一件有趣的事,即这个意外新发现的概念的运用(原文:An interesting thing that I'm beginning to realize is this notion of serendipities to use.)。这句话是4年前Steve Vinsoski说过的,我想也是在这个大会上。​当时他提到这是如何发生的,我还不太明白,但用REST和HTTP亲身实践后,我每天都在见证​,这是最大的好处。​

   

5. 关于REST相对于其他方式(尤其是Web服务)的好处​的争论有很多,你对此的看法是什么?

有了Sam Ruby和Richardson关于REST的经典之作,Ian Robison和Jim Webber的演讲,还有我写的关于REST的书​,我觉得这类争论已经少很多了。我认为我们正视图去搞清楚的唯一的东西是超文本约束​,除此之外,我没看到最近有太多的争论。​

   

6. 关于REST,人们经常问的一个问题是“我该怎么处理事务?”​对于这个问题,有很多观点,从“如果你需要事务,那你的架构就是非RESTful的”到多种事务协议和模式。你怎么看?

我认为这是一个非常好的问题。在我的印象中,REST是一种​针对去中心化的相当解耦的系统的架构​。当你引入事务这类东西时,你所讨论的就是两个解耦的应用程序之间的某类耦合和依赖。当你在两个你自己无法控制的系统上写东西时​,让它们提交某些数据、维持一致性和其他质量属性是一件很困难的事。​我觉得在尝试​事务和Web即架构两者之间存在固有的冲突。​

你不会用在受控环境(你可以赞成或期待协定)中使用事务的方式在Web上使用事务​。​此处你无法期待协定(agreement),这是Web即平台​的一个有趣的方面,​你不会就什么事达成一致,这些协议可能不会同意任何东西。这是去中心化Web的要点。​

   

7. 你觉得什么是将Web作为集成平台的基本限制?​比如,我们刚才​讨论到的事务。你持什么观点?HTTP差不多有20年的历史了,尽管它是可扩展的,但创造它的初衷与我们现在的使用并不一样。​

即使我们用于Web的协议(比如HTTP和URI)​很古老了​、不够​现代,但在Internet时代,我们依然能从中受益匪浅,因为它们的设计采用了正确的抽象,设计者脑海中有正确的质量属性。​有这些保证,我实际上没发现什么限制。事实上,我们还从这些技术中​收获了不少东西。​像Tim Berners-Lee这样的先锋为人类做了杰出贡献,我们至今还能从中受益。

当然,限制还是存在的,源自HTTP栈、HTML等方面的不一致性、互操作性问题。这些方面要取得进展很困难,因为这些都是协议​,而且需要时间才能搞定。我个人对目前的进展很满意,我相信专家们一直在努力,考虑当今Web的基本问题。

   

8. 你是O'Reilly​的《RESTful Web Services Cookbook》​的作者。能不能给我们描述一些最常用的技巧?​

据我所知最常用的技巧,源自那些与我交流过的人,就是寻找资源。​我认为我要着重强调的一点是​你的客户端应用程序需要更好的资源。另一个重要的技巧是控制并发​,比如执行多种不同的写入,像那些有SOA背景的人问的​事务问题​,最近我都有看到。​

   

9. 有没有一些模式你觉得接受程度还不够,应该被用得再广泛些?​

回到并发控制,这是最重要的一块​,我觉得开发者应该更加关注它,我也会更强调它。当然,缓存也是大家需要的,要好好设计。经常有开发者设计不佳,没有发送正确的响应头,比如最后修改时间,正确使用ETags等等。​

   

10. 有时开发者为了快速响应市场,走了一些捷径​,比如穿隧(tunnel)​动词和URI,你怎么看?​这些是无可避免的​、合理的吗(至少在一个小范围内)?​他们应该为此羞愧吗?

回到质量属性:如果Web的好处不是你的目标,为了质量属性你不得不穿隧读和写,那就干吧,但你需要意识到​这么做的后果。我认为关键是你要意识到你在做什么样的权衡。如果时间对市场很重要,那就为此做权衡​。​

   

11. 对于那些开发基于REST项目的开发者,工具支持目前是什么情况?​为了让开发和调试更方便一些,有什么推荐的工具么?​

我想说,对于基于HTTP的应用程序,​任何语言下都有很多工具​。​我可以用JavaScript,用Ruby,用PHP和Python,它们都有完整的工具栈,那些语言的工具就和Java、C#等语言一样成熟,但这些工具是由社区推动的,或者由市场推动。对我而言,​我在自己的台式机上也有很多工具,比如curl和wget,像lighttpd和Apache这样的Web服务器,这些就是我的工具​。​

   

12. OAuth很受关注,你好像支持最近发布的​版本2。能否给我们解释一下,是什么让OAuth成为保护资源的好方法的?​

在协议的进化过程中,我看到了两个主要的变化。第一个是密钥。作为协议,它更简单了,它解耦了访问令牌授予客户端的方式和与服务器交互的方式​,这样OAuth能成为一个可扩展的协议,你会找到新的获取令牌的方法。它还尝试统一其他身份验证形式,比如SAML,因此它是可扩展的。这是协议中的一个非常重要的特性。​第二个变化​是现在不再强制签名了​,我不太清楚规范以后会如何发展,但目前对我而言这看上去还不错,我知道这两方面都有人关注。

我认为出于互操作性考虑,没有签名,像使用Cookie那样使用访问令牌​,这让客户端更方便了。​如果顺利的话,在客户端应用程序上设置好TLS就可以不用使用签名,同时获得相同的信任程度。

   

13. 你说过“前30分钟的体验是一个质量属性,任何一个Web平台要成功都必须考虑它”。你能再详细说说吗?这是​什么意思?​

这个很有意思,我来自这样一家公司,在发布一个产品时要问一个问题​——“客户在下30分钟或给定时间里能做什么​?他能获得什么有意义的东西呢?​”我最近把这个观点提出来,是因为开发者在思考他们的平台、Web服务、应用程序时​,总觉得那是很特殊的。每个人都觉得自己的应用程序与众不同,有特别之处,某些方面独具匠心。实际上,从客户的观点来看,​​他感兴趣的是完成自己的任务​,并不想区别对待各个应用程序。​

对我而言这是一个重要的质量属性,因为客户认为他们需要的东西不必很特别,即使是在做一件很复杂的事。就算是在用Google Maps,或者Yahoo! Mail,你希望在使用它时和别的网站一样​​的。对最终用户而言,它们是一样的。对Web服务和任何大型系统而言都是如此。

   

14. 非常感谢,Subbu。​

谢谢,我很高兴。​

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


找回密码....

Follow

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

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

Like

内容自由定制

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

Notifications

获取更新

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

BT