REST架构风格的性能为何比其他的架构风格更好

news/2024/7/7 20:21:18
今天与 一起翻译Fielding论文的朋友杨光讨论技术问题,杨光认为因为REST是基于文本来进行通信,所以其性能肯定不如基于二进制格式的通信协议好。因为这是一个对于REST的明显的误解,所以我觉得有必要专门在这里澄清一下。以下是我们的讨论内容,David是我,Allen是杨光。

David: 他们客户端用C#,服务器端用Java,准备用RIA+REST+Java的架构。C#也有类似XMLHttpRequest的对象。
Allen: 为啥是这么怪异的结构,都用.net得了~
David: 那是不可能的,企业应用服务器端主要还是用Java。
Allen: 那就都用java
David: C#与Java通信,主要有两种方式:基于SOAP或者基于HTTP。基于HTTP就是REST了。
David: 如果基于SOAP,肯定会影响开发效率。另外性能也会差很多。
Allen: 无论什么方法,性能都要比单一使用一种平台慢的
David: 不会的,REST只用到了HTTP。
David: 单个平台,客户服务器间走二进制的通信协议,性能也许比REST要好,那就与HTTP无关了。不过这样做不够灵活,客户端与服务器耦合太紧。
Allen: 怎么不会呢?rest也没有直接用servlet快啊。
David: REST当然可以直接用Servlet提供服务
David: 但是你基于Servlet,很多日常事务的处理都要自己做,例如URI到处理器的映射。所以最好是有一个框架帮助你做这些事情。
Allen: 一种是通过xml或者json,一种是直接序列化的参数,性能还是不一样吧
David: REST没有说一定要用XML或者一定要用JSON格式,任何基于文本的格式都是允许的。
Allen: 但是肯定不是序列化的
David: 你说的序列化是什么意思呢?
Allen: 我的意思是C#和java通信,走的肯定是语言外的通道,使用rest也是通过语言外的通道传输数据。如果是一个平台,那么就可以走语言内的通道,这个和rest没关系了。
David: 这只是一种猜测。所谓的语言内的通道,对于Java来说,只有RMI,连SOAP都不算。
Allen: 嗯,我也是空想,实际做出来最有说服力。到时候你可以把资讯的经验和我分享一下。
David: RMI是RPC的风格,中间传输二进制数据,性能应该比HTTP的纯文本稍微高一些,但是这样做有很多的代价。
David: 那篇论文将来我们都需要反复多看几次,实际上REST是权衡很多种架构风格之后的结果,已经能够得到最佳的性能了。
David: 性能不单纯取决于传输数据是二进制还是纯文本。我告诉你为什么。
David: 因为二进制数据的语义对于中间组件是不可见的,它就无法做有效的缓存,当然也无法确定此数据是否会对安全构成威胁。
David: REST强调通信语义对于中间组件的可见性,这样可以改善性能和可伸缩性。
David: 所谓的中间组件,浏览器就是一种。浏览器可以根据通信的语义来确定数据有没有发生改变,从而进行有效的缓存。
David: RMI传输数据再有效,它的数据也无法做有效的缓存。因此RMI的性能未必比REST好,况且不能缓存会带来严重的可伸缩性问题。
David: 这些思想其实在论文中都有很详细的描述,你再看一遍就全明白了。
Allen: 这么说也有道理,等有实现rest的经验后,就一切都明白了




http://www.niftyadmin.cn/n/3653118.html

相关文章

Fielding的论文已经翻译完成

Fielding关于REST的经典论文我们已经翻译完成,已经发给国内的一些专家做review。我在两周后综合各位专家的review意见再做一次修订,然后就发给Fielding先生来发布。这篇论文绝对是所有做Web开发的人的必读,大家期待吧。

想当然和偏执狂都要不得!握其法而又能知其度,善莫大焉!

“劫后余生” 的感叹,及时写下以作日后之鉴!--------------------------------------------想当然是什么呢?是没有准备充分,尚未弄清楚事情的来龙去脉凭主管臆断,一言以蔽之,那是YY !偏执狂是什…

让 VMWare Workstation 5.5.3 能够在 Ubuntu 7.04 (Feisty Fawn)中正常运行!

今天查看Linux Kernel modules,忽然发现/lib/modules下面有一个旧内核的目录,好奇之下进去看看,结果有了新发现,里面还有一些残存的配置,从名称看来应该是VMWare相关的,难不成是当初安装的时候,…

FreeBSD 最小化安装 +diablo-jdk +Apache 与 Tomcat 整合 !

这篇文章算是补交很久之前的一篇作业,也顺便平息坛子里面很多同学的疑问!我先说明一下配置环境的大概情况:OSFreeBSD 6.2-RELEASEJDKdiablo-jdk-1.5.0.07.01Apacheapache-2.2.3Tomcattomcat-5.5.23具体的版本信息显示如下:[rootFr…

FreeBSD/Linux 中避免 /etc/resolv.conf 被改写 + 几种解决办法的比较 !

最近又遇到 /etc/resolv.conf 会定时被改写掉的问题了,这回是在FreeBSD中!在 LAN via NAT 或是 PPPoE 的环境中上Internet,我们总得在 resolv.conf 中指定 DNS server,而这里的 DNS server 是通过 DHCP server 自动获取的&#xf…

领导者/追随者(Leader/Follower)

领导者/追随者(Leader/Follower) 1.问题 多线程是实现并发处理多事件的应用程序的一种常用技术。然而,很难实现高性能的多线程服务器应用程序。这些应用程序通常处理大量同时到达的多类型事件。为了有效地处理这种问题,有三个强…

今天遇到两个问题:Can't connect to MySQL server 与 Access denied for user !

问题一:本机(localhost)连接一切正常,但是无法从其他电脑上登入 MySQL 数据库! 下面是 /etc/mysql/my.cnf 中的一段摘录:# Instead of skip-networking the default is now to listen only on# localhost w…

FreeBSD-STABLE 居然是开发用的分支,我一直搞错了好多年...!

我一直认为对于FreeBSD的系统来说&#xff0c;发行版的稳定性是&#xff1a;CURRENT < RELEASE < STABLE&#xff0c;所以在灌完系统后立刻 cvsup 到对应的 STABLE 版本去... 这几天刚好碰到 Pengfei 也在看 FreeBSD 的 cvsup 管理部分&#xff0c;他正在疑惑生产系统上面…