REST服务资源多重表述在资源获取时的性能比较

2011-04-20 07:27郑灿
上海电力大学学报 2011年4期
关键词:序列化二进制书店

郑灿

(1.上海电力学院校长办公室,上海200090;2.同济大学软件工程学院,上海 200092)

表述性状态转移(REpresentational State Transfer,REST)是一种分布式超媒体系统的软件架构风格,它由HTTP协议的关键作者之一Roy Fielding博士在2000年的博士论文中提出并加以定义[1].REST从资源的角度来观察整个应用,分布在系统各处的资源由URI统一标识,而客户端则通过标准的HTTP方法来访问资源.资源有多种表述方式,客户端对资源的访问使应用改变了状态,随着访问资源的不断表述,应用也不断地转变状态,即所谓“表述性状态转移”.

文献[2]提到了REST的5个关键原则,即:为所有资源定义标识;将所有资源链接在一起;使用标准方法;资源多重表述;无状态通信.具备了这5个原则的Web服务即可称为Restful的Web服务.

资源多重表述是REST的基本原则之一,它将资源用多种数据格式进行表述.常用的数据格式有HTML,XML,JSON等.采用资源多重表述可以满足不同的客户端应用的需要,如采用HTML和XML作为资源表述方式,资源就可以被标准浏览器所使用.此外,不同的资源表述方式在资源获取的性能上存在差异[3-5].本文主要通过算法比较了不同资源表述方式在资源获取时的性能差异.

本文基于RESTEasy设计开发了一个书店Rest服务.对书店的资源(每一本书)都采用了资源多重表述方式,然后在获取资源时比较不同方式下所耗费的时间和空间.这些资源表述方式主要有以下几种:XML(Extensible Markup Language);Atom;JSON(JavaScript Object Notation); Jackson JSON;YAML(YAML Ain’t Markup Language);Fastinfoset;KRYO;Hessian;Protobuf.

1 几种资源表述方式

(1)XML是一种可扩展标记语言,作为Internet环境中跨平台、依赖于内容的技术,是处理结构化文档信息的常用工具.XML作为一种简单的数据存储语言,可以使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立.虽然XML占用的空间比二进制数据更多,但XML极其简单,易于掌握和使用.

(2)Atom是一种基于XML用来联合内容的文件格式,常用作经常更新的博客和网站的统一发布标准.

(3)JSON是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成.它是基于JavaScript Programming Language,Standard ECMA-262 3rd Edition-December 1999的一个子集.JSON采用完全独立于语言的文本格式,是一种理想的数据交换语言.

(4)YAML是一种用来表达资料序列的编程语言.与XML不同,这种语言以数据为中心,而不是以标记语言为重点.它具有可读性好、与脚本语言的交互性好、信息模型一致、易于实现等优点.

(5)Fastinfoset即快速信息集,是一种为XML信息集提供二进制编码来替代XML的技术框架.它提供更优于基于文本的XML序列化性能和大小的序列化格式.

(6)KRYO是一个快速高效的Java对象网络序列化框架,其主要特点是性能高效、易用,可以采用序列化对象,使其进入文件、数据库或网络.

(7)Hessian是一种用于连接Web Services的简单二进制协议,可使各种Web Services不需要复杂的框架就可以做到无缝连接.由于它是二进制协议,故其发送或接收二进制数据时不需要扩展任何协议.

(8)Protobuf是用于结构化数据序列化的灵活、高效、自动的方法,比XML更小、更快,也更简单.Protobuf的使用者可以自定义数据结构,然后使用代码生成器生成的代码来读写这个数据结构,甚至可以在无需重新部署程序的情况下更新数据结构.Google公司内部的RPC协议和文件格式基本都使用了Protobuf.

2 REST服务设计与资源获取性能的比较算法

2.1 书店REST服务设计

本文所设计的书店REST服务,涉及的资源对象类见图1.每本书都有一系列的信息字段,如书号、书名、作者、价格、出版时间、简介等,其中作者又包括编号、姓名、年龄和出生日期等信息.一系列的书组成书列.本文资源获取的单元主要为书列,以获取100本、1 000本和10 000本书的书列为例,比较其资源获取时间和空间耗费.

图1 资源对象类示意

本文主要使用RESTEasy框架来开发此书店REST应用.RESTEasy框架提供了丰富的资源表述方式,如XML,JSON,YAML,Fastinfoset,Atom等,本文在使用上述框架自带的资源表述方式的供应器(Provider)以外,还扩展了几种资源表述方式供应器,如KRYO,Hessian,Protobuf,使资源表述方式更加丰富.这些资源表述方式都是二进制的序列化格式,性能较为优异,在业界较为流行,应用也很普遍.

2.2 资源获取性能的比较算法

本文所采用的资源获取性能比较算法主要依据时间耗费和空间耗费两个指标,具体比较算法为:计算取得n本书的书列时,使用各种资源表述方式所需要的资源获取时间和占用空间.在设置HTTPGET方法无缓存的情况下重复100次,然后计算100次资源获取的平均时间和占用空间的平均值,并进行比较.本文共比较了3组资源表述方式,n分别为100,1 000,10 000.需要注意的是,如设置资源获取无缓存,则GET方法的响应必须要设置NoCache,以避免缓存对资源获取造成的影响.

3 结果比较

表1为获取100本、1 000本和10 000本书的书列时各种资源表述方式所需要的时间值,该时间值是指100次资源获取时间的平均值.

表1 时间耗费数据结果统计ms

表2为获取100本、1 000本和10 000本书的书列时各种资源表述方式所需要占用的空间耗费数据,这个空间指的是100次资源获取所占用空间大小的平均值.

表2 空间耗费数据结果统计字节

由表1和表2可知,采用不同的资源表述方式,其时间耗费和空间耗费均存在差异.

(1)在获取100本书的资源时,时间耗费从少到多依次为:Kryo,Hessian,Protobuf,Fastinfoset,JSON(jettison),Jackson,Atom,XML,YAML.空间耗费从少到多依次为:Hessian,Kryo,Protobuf,Fastinfoset,Jackson,JSON(jettison),XML,Atom,YAML.

(2)在获取1 000本书的资源时,时间耗费从少到多依次为:Hessian,Kryo,Fastinfoset,Protobuf,Jackson,JSON(jettison),Atom,XML,YAML.空间耗费从少到多依次为:Hessian,Kryo,Protobuf,Fastinfoset,JSON(jettison),Jackson,Atom,XML,YAML.

(3)在获取10 000本书的资源时,时间耗费从少到多依次为:Hessian,Kryo,Fastinfoset,Jackson,JSON(jettison),Protobuf,Atom,XML,YAML.空间耗费从少到多依次为:Hessian,Kryo,Protobuf,Fastinfoset,JSON(jettison),Jackson,Atom,XML,YAML.

将所有时间耗费数据汇集在一起,见图2.将所有空间耗费数据汇集在一起,见图3.

图2 资源获取时间耗费对比

图3 资源获取空间耗费对比

由图2和图3可知,采用不同的资源表述方式,其资源获取时的时间耗费和空间耗费均存在差异.在本文所采用的资源和算法实现下,以二进制字节码作为序列化结果的资源表述方式(如Hessian,Kryo,Fastinfoset,Protobuf),其资源获取时的时间耗费和空间耗费都较少,性能较好.另外,资源获取的时间耗费,与采用不同的资源表述方式进行序列化和反序列化所耗费的时间大小,以及序列化结果的空间大小有一定的关系.

4 结论

(1)资源多重表述是REST的基本原则之一.不同的资源表述方式对于资源访问有着性能差异.在本文所设计的书店REST服务应用中,对于书列资源,以二进制字节码作为序列化结果的资源表述方式在资源获取时的时间耗费较少,性能较好.

(2)选择不同的资源表述方式不仅需要考虑客户端应用的需要,也应考虑其性能指标.使用二进制字节码作为序列化结果的资源表述方式在牺牲可读性的同时可以提供更优的性能.

[1]FIELDINGR T.Architectural styles and the design of networkbased software architectures[EB/OL].[2011-04-15]http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm.

[2]TILKOV Stefan.A brief introduction to REST[EB/OL].[2007-12-10]http://www.infoq.com/articles/restintroduction.

[3]邓涛.REST服务开发实战[EB/OL].[2011-02-22]http://www.infoq.com/cn/articles/dt-rest-service.

[4]许卓明,栗明,董逸生.基于RPC和基于REST的Web服务交互模型比较分析[J].计算机工程,2003,29(20):6-8.

[5]冯新扬,沈建京.REST和RPC:两种Web服务架构风格比较分析[J].小型微型计算机系统,2010(7):1 393-1 396.

(编辑胡小萍)

猜你喜欢
序列化二进制书店
用二进制解一道高中数学联赛数论题
如何建构序列化阅读教学
有趣的进度
二进制在竞赛题中的应用
独立书店联合荐书榜
独立书店联合荐书榜(总第八期)
最美书店
Java 反序列化漏洞研究
在书店
作文训练微格化、序列化初探