`
robbin
  • 浏览: 4825871 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
377a9ecd-1ea1-34ac-9530-9daa53bb2a7b
robbin谈管理
浏览量:137460
社区版块
存档分类
最新评论

从分布式系统的角度看REST

    博客分类:
  • Tech
阅读更多
上周末在杭州网侠大会做了关于REST的演讲。会后经过一些交流,特别是今天在msn上面和dlee的交流,感觉自己对于REST的理解更深入了一层。

我们说REST架构风格,从REST具备的内在特征来说,它包括了这些特征:

1、基于HTTP的资源
2、以HTTP协议去操作
3、数据和表象分离

但是如果我们换一个角度,即分布式应用系统的角度来看,我们会有一些更有意思的结论:

分布式应用系统的架构,经历了好几代的变迁,我们来简单回顾一下:

1、基于CORBA协议的C++中间件时代
CORBA时代我还在上学,基本上没有怎么接触过Corba编程。曾经有一次我提供EJB培训的客户,正在进行传统Corba架构向EJB2架构迁移,通过和他们的交流,对Corba多了一些了解。当时就感叹,和EJB2相比,Corba实在太难用了。Corba时代在1998年EJB1.0发布以后,就逐渐淡出历史舞台了。

2、基于RMI/IIOP协议的EJB时代
这个时代开始于1998年,到现在基本上已经划上了句号。其实在EJB出现以前,在1996年Microsoft发布WindowsNT4.0以后,Microsoft当时也提出了自己的分布式架构,即MTS,但是MTS的光辉被随后出现的伟大的EJB技术彻底击败,此后,就拉开了Java的应用服务器时代,BEA也是在这个时代的转折点成长起来的。

不管是Corba,还是EJB,都有一些共同点:
1) 通过专有的网络协议通讯
2) 不能跨平台调用
3) 通过分布式对象调用来实现分布式架构,换句话来说就是,分布式架构是绑定在面向对象的机制上的

分布式对象架构的缺陷在EJB2时代被充分暴露了出来,乃至于Martin Folwer在《企业应用架构模式》当中强调,分布式调用的第一原则就是不要分布式。更多关于EJB2分布式对象架构的缺陷在Rod Johnson的《J2EE without EJB》当中被剖析的更加清楚。

3、基于SOAP协议的Web Services时代
这个时代始于2001年Microsoft公司推出dotnet平台,整个行业开始鼓吹Web Services。中间经历了一次低潮之后,在IBM,BEA成功的联手炒作SOA之后,再次王者归来。

web services有一些明显不同于Corba和EJB分布式对象架构的特征:
1) 通过标准SOAP协议通讯,一般走HTTP通道
2) 能够跨平台调用
3) 通讯格式是xml文本,而不是二进制数据格式
4) 通过RPC机制来实现分布式调用,而不是通过面向对象机制实现分布式调用

web services的优点和缺点都非常突出,这个不是本文的要点,不做具体分析。这里唯一要强调的是SOAP协议并不依赖于HTTP。事实上SOAP协议可以走很多底层协议,例如SMTP协议,Jabber协议等等。

REST也是一种分布式系统的架构风格,那么REST和上面这些分布式架构有哪些明显的区别呢?
1) REST走的是HTTP协议,并且充分利用或者说极端依赖HTTP协议
Corba和EJB是采用专有的二进制协议,SOAP可以但不依赖HTTP,并且仅仅使用HTTP POST。
2) REST是基于HTTP抽象资源的分布式调用,换句话来说,就是分布式调用是绑定在资源的操作上面的。

通过上面的总结,我们可以做一个直观的对比表格:

分布式架构       协议             调用方式
-------------------------------------------------------
Corba架构        专有二进制协议      对象的CRUD操作
EJB架构          专有二进制协议      对象的CRUD操作
Web Services     SOAP协议            RPC方式
REST             HTTP协议            对资源的CRUD操作
--------------------------------------------------------


REST最大的特点是什么呢?REST是为通过HTTP协议来进行分布式调用量身定造的架构

传统上,我们开发一个非分布式的软件系统,使用OO进行建模和架构,无往而不利。但是分布式对象却显得不那么有效。对于跨进程的调用,也许我们需要探索更好的面向对象的分布式调用架构。

REST是专门为分布式调用设计的架构,在REST里面,分布式是通过对资源的操作来实现的,不是像EJB那样通过对象的方法调用来实现的。资源是一种抽象的概念,资源被映射到相应的一套URL规则上面了。所以资源只和URL相关,而与具体实现无关,因此REST具有更好的解藕性。在RoR的实现当中,你可以把一些资源直接映射到model对象上面去,也可以不映射到model上面,而完全是由业务逻辑组合的抽象资源。

分享到:
评论
88 楼 jacking124 2013-01-02  
嗯,robbin大哥,我有一个问题咨询一下的,我公司目前有一个维护系统的,用的蓝宝石的bes服务器,现在这个公司被收购了,其产品也不更新了,我想有什么可以产品可以代替它,我的系统是ejb开发的!!
87 楼 Lordaeron 2007-06-20  
ozzzzzz 写道
Lordaeron 写道
ozzzzzz 写道
前面Lordaeron很能代表水平的两个发言那里去了?
就是那个什么HTTP是载体的。多高的水平啊,删除了怎么反应这个人的能力呢?只有前后联系起来一起看,才能知道他究竟是有多强的水平。
强!

要比水平, 你有興趣當然是會接受的.
你的水平是多少呢?

本人对比谁高谁低完全没有兴趣。只是本人觉得你前两个发言实在是精彩异常,被删除了实在是可惜。而这些讨论,本人实在不敢复述。而如果只是我看见了,我实在是为广大javaeye众感到万分可惜。

有些人一言堂習慣了, 是無法改變的.
86 楼 Lordaeron 2007-06-20  
回顧一下, 某些人的銘言REST, 但從未講出REST 實作後的樣子, REST 是個什麼樣的東西呢?

http://en.wikipedia.org/wiki/Representational_State_Transfer
簡單的講, 它就是使用Http, 甚至會再extend http. 以使用http  的gramma  來作為distributed system 的protocol.
主要主張為http 提供了 proxy, cache, 和tunnel 等等方式, 可以讓REST 暢通無阻的在internet/intranet 裏運行.
而使用http 就可以用現有的介面, 而不用像現在的RPC 系統一樣, 有各自的semantic. 還可以重新定義URI, 令整個distributed system 看起來可以像DNS 的行為一樣.
可以進行message 的轉送.

題外話:
就像fielding 主張WebDAV 的drawback, 說因為它用了http 來packing 它自己的message, firewall 可以很容易的設計出filter 來將它擋掉.
[我說]但softether 就用http 來packing tcp/udp protocol 了, 有幾個firewall 擋得了?

回正題:
它們一直在bull RPC 的問題, 在於原作fielding 對RPC 根本的不了解, 更別說在這主張RPC 已死的人.
http 是protocol level 的東西, RPC 是concept level 的東西, 拿這兩個東西來相比, 有點風馬牛不相及.

RPC 定義:
--------------------------------------------------------
Remote Procedure Call (RPC) is a protocol that one program can use to request a service from a program located in another computer in a network without having to understand network details.
RPC uses the client/server model. The requesting program is a client and the service-providing program is the server. Like a regular or local procedure call, an RPC is a synchronous operation requiring the requesting program to be suspended until the results of the remote procedure are returned. However, the use of lightweight processes or threads that share the same address space allows multiple RPCs to be performed concurrently.
----------------------------------------------------


fielding 的更有趣的一個主張:
----------------------------------------------------
People often mistakenly refer to HTTP as a remote procedure call (RPC) [23] mechanism simply because it involves requests and responses.
----------------------------------------------------
RPC 在protocol level(IIOP,RMI,DCOM) 說穿了, 不過就是接收的server 收到一串字串(C 的), 然後分柝裏面的內容, 再按照內容辨事. 和它的REST 我實在是在protocol level 看不出有何不同?


http://tools.ietf.org/id/draft-ietf-atompub-protocol-15.txt
這裏有一份IBM 的restful protocol, 有興趣者, 自已去究. 看定義出來的東西在作什麼.

題外話:
已經有類似能力的Distributed system 當然首先要講的是
DNS, 另外就是IBM 的SNA 也有. 要講近期的, FIX protocol 也有類似的能力.

咦, 一言堂到要封掉我的post 囉.
哈...............
85 楼 ozzzzzz 2007-06-20  
Lordaeron 写道
ozzzzzz 写道
前面Lordaeron很能代表水平的两个发言那里去了?
就是那个什么HTTP是载体的。多高的水平啊,删除了怎么反应这个人的能力呢?只有前后联系起来一起看,才能知道他究竟是有多强的水平。
强!

要比水平, 你有興趣當然是會接受的.
你的水平是多少呢?

本人对比谁高谁低完全没有兴趣。只是本人觉得你前两个发言实在是精彩异常,被删除了实在是可惜。而这些讨论,本人实在不敢复述。而如果只是我看见了,我实在是为广大javaeye众感到万分可惜。
84 楼 Lordaeron 2007-06-20  
ozzzzzz 写道
前面Lordaeron很能代表水平的两个发言那里去了?
就是那个什么HTTP是载体的。多高的水平啊,删除了怎么反应这个人的能力呢?只有前后联系起来一起看,才能知道他究竟是有多强的水平。
强!

要比水平, 你有興趣當然是會接受的.
你的水平是多少呢?
83 楼 zjlee 2007-06-20  
支持Lordaeron
82 楼 fangzhouxing 2007-06-20  
好好的技术讨论氛围,让Lordaeron给搅了,不管你的水平如何,很不欣赏你的。。。
81 楼 ozzzzzz 2007-06-20  
前面Lordaeron很能代表水平的两个发言那里去了?
就是那个什么HTTP是载体的。多高的水平啊,删除了怎么反应这个人的能力呢?只有前后联系起来一起看,才能知道他究竟是有多强的水平。
强!
80 楼 Lordaeron 2007-06-19  
http://en.wikipedia.org/wiki/Representational_State_Transfer
REST versus RPC 這一段, 如果有人對DNS 的行為有認識的
話, 應該會知它在打什麼主意
79 楼 Lordaeron 2007-06-19  
差點忘了一件事.
我一開始只講出了.
一個人連Corba/J2ee 是什麼都搞不清楚, 他引申下來的
也沒什麼好講. that's all.
以後REST 被檢驗時, 會不會被歸類到RPC 和
要說什麼REST 會被大規模應用.
我們還有半年的時間, 大家慢慢看. 事實勝於雄辯.
78 楼 Lordaeron 2007-06-18  
http://www.restlet.org/documentation/1.0/tutorial
一個將http 這個載台拿來作別的用法.
就正如該訪問一下, 否定rails 用POST的作法, 覺得
自己用PUT 會更好.
來, 哪位自認http protocol 比我還熟的, 講一下
POST 和PUT 的差異吧.

protocol 是一個載台, 要怎麼用, 是你家的事.
就像softether 就拿http 來載tcp/udp packet.
77 楼 winterwolf 2007-06-18  
能说明问题就可以 不要太复杂
76 楼 winterwolf 2007-06-18  
楼上做分布开发经验丰富 能否拿出一个具体的例子比如某种分布应用

dlee用rest去设计一下如何实现

Lordaeron用corda或其他技术设计一下

然后我们再继续讨论
75 楼 Lordaeron 2007-06-18  
xly_971223 写道
Lordaeron是不是来吵架的?
就是论事别撤没用的

哦. 就事論事?
誰在就事論事, 誰在講笑話?
你有本事來判定?
74 楼 xly_971223 2007-06-18  
Lordaeron是不是来吵架的?
就是论事别撤没用的
73 楼 江南白衣 2007-06-18  
Lordaeron 写道
在你的案子裏就可以拿來當大多數, 你是以偏蓋全還是自大?
你到底搞清楚RPC 的定義了嗎?
http://www.pcmag.com/encyclopedia_term/0,2542,t=RPC&i=50652,00.asp
(Remote Procedure Call) A programming interface that allows one program to use the services of another program in a remote machine. The calling program sends a message and data to the remote program, which is executed, and results are passed back to the calling program.

PC Magazine 不能力的話
http://searchwebservices.techtarget.com/sDefinition/0,,sid26_gci214272,00.html

名詞的基礎要搞清楚再出來和別人討論, 這是基本的禮貌.
一個連名詞都搞不清楚的人, 連討論的價值都沒有.
特別是REST. 作者連基礎都錯, 別跟我講它的引申會對.


看来你没有仔细看我举的两个例子,两个例子里REST是截然不同的地位。

dlee花那么多精力又是翻译又是发文,只是希望大家多了解一点REST的知识,这份推广的热心值得大家支持,现在中国的技术推广者还是太少了!!

但推广一个新技术的时候,不加定语修饰的将所有旧技术钉死也是危险的:)

BTW.http://searchwebservices.techtarget.com/sDefinition/0,,sid26_gci214272,00.html 里的RPC定义,和大家理解的没什么不同,没什么相悖的地方啊,client/server,synchronous ,stub,都是熟悉的字眼。
72 楼 dlee 2007-06-18  
嘿嘿。

我说:“其实我跨栏很牛的”,刘翔笑了。
刘翔说:“如果我要是打篮球,估计也能去NBA”,姚明笑了。
姚明说:“HTTP那玩艺儿太简单了,我最熟了”,Fielding笑了。
71 楼 Lordaeron 2007-06-17  
江南白衣 写道
我之前参与的电信认证计费项目,critical的代码用C++,业务管理的代码用Java,还有一些shell脚本写的任务,算是比较典型的分布式调用情景:

主力的同步调用方案是BEA Tuxedo,异步用IBM MQ,Java内部则是EJB和JMS(一个Weblogic搞定),对外的接口主要是WebService和FTP,另有少量的Socket接口,而旧版系统用Corba连。

在这个生态圈里,REST如果要替换,只能是替换少量外围没有跑WS-*标准的WebService和某些简易Socket接口,大部分的用例里都没有它插手的份儿。而且,整个系统基本上是面向消息而不是面向RPC的,Function在这里主要充当的是Channel的角色。所以,这里dlee说的RPC风格逐渐过时没有错,但和REST将成为主流又没有直接联系。

而最近参与的一个系统,要做一个公共数据服务平台,REST就发市了,我打算利用某个ESB引擎发布WebService/REST双接口,适用不同AP的技术水平和效率要求。设计的过程中dlee给了我很多建议和指导。

所以,我觉得大家火冒三丈的争论没有任何意义,大家先把讨论的场景、前提搞好了再讨论才互有长进,否则口舌之争,吵赢了对方,自己身上又不会长块肉。

在你的案子裏就可以拿來當大多數, 你是以偏蓋全還是自大?
你到底搞清楚RPC 的定義了嗎?
http://www.pcmag.com/encyclopedia_term/0,2542,t=RPC&i=50652,00.asp
(Remote Procedure Call) A programming interface that allows one program to use the services of another program in a remote machine. The calling program sends a message and data to the remote program, which is executed, and results are passed back to the calling program.

PC Magazine 不能力的話
http://searchwebservices.techtarget.com/sDefinition/0,,sid26_gci214272,00.html

名詞的基礎要搞清楚再出來和別人討論, 這是基本的禮貌.
一個連名詞都搞不清楚的人, 連討論的價值都沒有.
特別是REST. 作者連基礎都錯, 別跟我講它的引申會對.
70 楼 江南白衣 2007-06-17  
我之前参与的电信认证计费项目,critical的代码用C++,业务管理的代码用Java,还有一些shell脚本写的任务,算是比较典型的分布式调用情景:

主力的同步调用方案是BEA Tuxedo,异步用IBM MQ,Java内部则是EJB和JMS(一个Weblogic搞定),对外的接口主要是WebService和FTP,另有少量的Socket接口,而旧版系统用Corba连。

在这个生态圈里,REST如果要替换,只能是替换少量外围没有跑WS-*标准的WebService和某些简易Socket接口,大部分的用例里都没有它插手的份儿。而且,整个系统基本上是面向消息而不是面向RPC的,Function在这里主要充当的是Channel的角色。所以,这里dlee说的RPC风格逐渐过时没有错,但和REST将成为主流又没有直接联系。

而最近参与的一个系统,要做一个公共数据服务平台,REST就发市了,我打算利用某个ESB引擎发布WebService/REST双接口,适用不同AP的技术水平和效率要求。设计的过程中dlee给了我很多建议和指导。

所以,我觉得大家火冒三丈的争论没有任何意义,大家先把讨论的场景、前提搞好了再讨论才互有长进,否则口舌之争,吵赢了对方,自己身上又不会长块肉。


69 楼 blueoxygen 2007-06-17  
dlee 写道
关于REST,最近InfoQ China翻译了两篇文章,大家有兴趣的可以仔细看一看。

http://www.infoq.com/cn/articles/restlet-louvel-interview
http://www.infoq.com/cn/news/2007/06/rest-description-language

Fielding论文的中文版如果做review的各位专家没有什么大的修改意见,这周之内就会发布。希望在一两个月以后,我不需要在这里反复做关于REST的扫盲工作了,我们可以深入讨论一些更加有趣的话题。

赶紧放出来吧。
然后想听听类似这种讨论
引用
Bobby Woolf(因企业集成模式而闻名)同样认为REST需要声明性接口并怀疑当REST最终获得这些能力时,结果是否还会与WSDL有什么显著不同。

相关推荐

    一种基于REST的分布式地理资源聚合系统.pdf

    从技术角度看,REST(Representational State Transfer)是一种软件架构风格,用于网络系统中的通信,特别适用于分布式系统的开发。RESTful Web服务是基于REST架构风格的Web服务,其以资源为中心,通过HTTP协议的...

    云计算分布式块存储系统总体技术要求标准解读.pdf

    该标准的制定有助于规范相关云服务的功能,有利于用户的服务选型,从产业角度也可保障相关云服务的整体发展水平。 四、分布式块存储系统的功能性和可扩展性: 分布式块存储系统在云计算时代对存储系统的新需求,...

    REST翻译中文论文

    2. **基于网络的应用架构评估**:论文深入分析了基于网络的应用架构与传统分布式系统架构的区别,并讨论了评估应用软件架构的关键指标,如性能、可伸缩性、简单性、可修改性、可见性、可移植性和可靠性等。...

    惠普带外rest接口.pdf

    这种技术对于数据中心管理和维护尤为重要,尤其是在服务器操作系统无法正常工作或者需要从安全角度避免在操作系统内进行管理时。 惠普集成光输出(iLO)管理处理器是惠普在带外管理领域的创新之一。iLO技术最早于2001...

    REST_资源指南_restful

    REST(Representational State Transfer,表述性状态转移)是一种软件架构风格,最初由Roy Fielding在2000年的博士论文中提出,主要用于分布式超媒体系统,例如万维网。它被定义为一种架构风格,而非具体的实现标准...

    从技术角度剖析云计算.pdf

    《从技术角度剖析云计算》这本书深入探讨了云计算的架构,主要分为四个层次:显示层、中间件层、基础设施层和管理层。以下是对每个层次的详细解释: 1. 显示层: 这一层关注的是如何以用户友好的方式呈现内容。...

    ASP EXCEL导入SQL

    从最直观的角度看待REST,它是网络服务最理想的手段,但是Rails框架把REST带到了网络应用软件开发框架。这是一次飞跃,让REST的思想从网络服务的应用提升到了网络应用软件开发。利用REST思想的simply_restful插件...

    从技术角度剖析云计算 (2).pdf

    然而,从技术角度深入剖析,我们可以发现云计算架构涉及更多的技术层面。 首先,云计算架构可以概括为四层结构:显示层、中间件层、基础设施层和管理层。 1. **显示层**:这一层负责向用户提供直观、友好的交互...

    架构风格与基于网络的软件架构设计(!软件架构的经典必读资料).pdf

    在分布式系统中,优化网络性能可以提高系统整体效率。 3. 架构质量属性(Architectural Quality Attributes): 架构质量属性是评估软件架构好坏的标准,包括简洁性、可扩展性、可修改性、网络效率、用户感知性能、...

    云计算的架构-–-从技术角度剖析云计算-.doc.doc

    本文将从技术角度详细解析这一架构,包括显示层、中间件层、基础设施层以及管理层。 首先,**显示层**是用户与云计算服务交互的界面。这一层主要包括HTML、JavaScript、CSS、Flash和Silverlight等技术。HTML4是目前...

    JAVA EE架构师 需要具备的知识.doc

    这一阶段的目标是从更广阔的视角理解系统架构,特别是在分布式系统的构建上。 - **分布式系统原理**:深入理解分布式系统的概念、特点和挑战,如一致性问题、容错机制等。 - **Java EE技术**:熟悉EJB(Enterprise ...

    架构风格与基于网络的软件架构设计Roy T. Fielding博士论文

    - **范围**:定义了基于网络的应用与传统分布式系统的区别,并区分了应用软件与网络软件的不同之处。 - **评估标准**:提出了评估软件架构的有效方法,包括性能、可伸缩性、简单性等多个方面。 - **关键关注点的...

    SA第3次上机实验报告-董安宁 1111711

    通过本次实验,学生不仅掌握了Web Service的实用技术,还深入理解了软件体系结构风格,尤其是Web Service在构建分布式系统中的作用,以及如何通过不同的视图模型(如Kruchten 4+1视图模型)来描述和分析系统结构。...

    VxRail超融合系统介绍.pdf

    首先,从存储架构的角度来看,超融合系统采用的是Server SAN(存储区域网络)的集中式架构,与传统的专用存储架构(如FC、IP、Infiniband协议)相比,它更倾向于使用IP网络进行数据、管理和服务流量的传输。...

    spring-cloud-rest-tcc:以Spring Cloud Netflix作为服务治理基础,展示基于tcc思想所实现的分布式事务解决方案

    前言随业务发展,组织架构变动,加上对现有系统进行析构分解,所带来的一个显着问题是进程间一致性需求增加,是一个协作问题。Atomikos曾介绍使用TCC作为微服务的分布式事务解决方案,有一篇简单的译文可作为入门...

    Architectural Styles and the Design of Network-based Software Architectures_2

    网络应用架构涉及了从简单的网页到复杂的分布式系统等各种类型的网络应用程序。这些应用程序通常需要跨越多个网络边界,并且能够在异构环境中运行。 **2.2 设计评估** 设计评估是衡量网络应用架构质量的关键环节。...

Global site tag (gtag.js) - Google Analytics