阅读更多
Rop(Rapid Open Platform)是借鉴淘宝开放平台(TOP,Taobal Open Platform)实现的全功能Rest Web Service 开源框架(Full-Stack)。 它高于CXF、Aixs等一般的纯技术Web Service框架,提供了请求/响应序列化、数据检验、会话管理、安全管理等高级主题的东西。最值得一提的是其参考TOP,提供了一个可扩展的错误处理模型,使开发平台级的Web Service的难度大大降低。

本期我们采访了该框架的作者陈雄华,请他来谈一谈该框架的开发和使用相关的情况。

欢迎大家推荐更多开源项目给我们,支持中国的开源项目发展,如果您和您的团队希望展示创业理念和有趣之处,或者有朋友正在创造这样的价值,请联系我们,发站内短信给ITeye管理员或者发邮件到webmaster@iteye.com即可。

先来个自我介绍吧! Top

大家好!我是陈雄华,ITeye网名是stamen,对Spring、Oracle、云计算、敏捷开发感兴趣,擅长企业应用和大型电子商务网站的架构和设计。


毕业到现在整10年了,参与过10多个大型企业应用系统的开发,一直和Java厮混,是一个不折不扣的老Java程序员,对技术高峰身虽不能至而心向往之。曾在一家公司做系统架构师时,构建了一个类似于普元的模型驱动快速开发平台,据说很多程序员都有一个开发平台梦,这个梦我算是基本实现了:)。

近几年从事互联网电子商务B2B平台、B2C平台的设计和开发工作,接触到了很多互联网的技术,如memcached、Elasticsearch、Hadoop等。庆幸自己既有企业应用开发的经历,又能从事互联网系统的开发,毕竟企业应用和互联网应用的鸿沟还是挺深的。

应用开发之余,喜欢写些文字,写有《精通JBuilder 2005》、《精通Spring 2.x》及《Spring 3.x企业应用开发实战》等几本书籍,在IBM、CSDN、it168发表过几十篇技术文章,颇受读者的喜欢。

Rop是什么? Top

Rop,即Rapid Open Platform,它参考了TOP (Taobao Open Platform:淘宝开放平台)的设计思路,充分借鉴Spring MVC的技术架构原理而开发的一个快速服务开放平台开源框架。

Rop不同于传统的CXF,Axis这些SOAP Web Service框架,也不同于Jersey、Restlet这些Rest Web Service框架,因为这些Web Service框架都是技术层的框架,而Rop是应用层的平台框架,它不但可以方便快捷地开发一个个Web Service服务,还提供了构建服务平台众多领域问题的整体解决方案。因此——

传统的Web Service框架帮助你建造房子,而Rop框架帮助您建造城市。

Rop项目的由来?设计思想是什么? Top

中图一购网是一个整合图书上下游供应链的B2B网站,网站需要和图书供应链上下游的ERP系统实现信息对接。因此,早期中图一购网采用REST Web Service打造网站的服务总线,作为技术总监,一般是由我定义服务接口及报文。在定义服务报文时,我发现一个最大的困难是定义服务的错误类型,任何一个服务的正确报文只有一个,但是错误的情况不胜枚举。所以服务报文往往会漏掉一些潜在的错误情况,一旦服务端发生这些错误,客户端就瞎了。

所以,那时候,一旦需要新增服务或变更服务,我头就大了,往往是底下的开发人员在催我:服务报文定义好没有?或是抱怨,老大,你服务报文这个错误好像没有考虑到啊?

我不情愿地发现,开发一个服务很简单,但是设计服务报文难度却很大。痛定思痛,才去TOP、豆瓣等开放平台中取经,我发现TOP的错误模型定义得非常“大气”,经过分析才知道TOP的错误模型是收敛的,也即TOP已经对服务平台的各种错误建模好了,你不再需要为定义错误类型、设计错误代码而抓腮挠耳了,直接套用就可以了。

另一个发现是,TOP的服务API非常友好,它摒弃了REST所宣扬的为每个服务设计一个达意的URL理念,直接采用统一的URL,辅以一套标准的系统参数和业务参数调用服务。TOP这种请求模型优于REST的请求模型,因为TOP的请求模型倾向于把服务看成一个个API,而REST请求模型倾向于把服务看成一个网页,前者偏向于程序调用,而后者偏向于看网页的人,虽然可读性强,但却不方便客户端程序的编写。

从我个人的喜好上来说,如果要给请求模型的好坏排个序,那自然是TOP的请求模型优于REST,而REST请求模型优于SOAP。因此就希望采用TOP的方式重构网站的服务总线,但是TOP的框架并没有开源,所以就自己动手搞了一个基于Spring技术架构,采用TOP请求模型思想的服务平台模型,即Rop。

Rop的英文和Spring的缔造者Rod很像,我很喜欢这种巧合,毕竟,Rop框架的实现和Spring息息相关,Rop基本上是参照Spring MVC的实现原理设计的,使用到了很多Spring的工具类,Rop本身也需要Spring框架才能运行,可以看成是Spring的一个子项目。

与传统Web Service框架相比,Rop有哪些优势? Top

Rop和一般的Web Service框架不处在相同的层面,一般的Web Service框架是站在技术层面的,它们的工作职责是把Java对象开放成一个Web Service服务,或者把Web Service服务映射成一个Java方法。而Rop是服务平台的框架,是面向应用层的,Web Service在Rop中仅是一个基础,在此基础上Rop提供了错误模型、会话管理、版本控制、安全控制、超时限制、文件上传等众多的“应用层”领域问题的解决之道。

性能如何? Top

对于服务平台框架来说,性能是非常关键的因素。Rop内部拥有一个线程池,可以根据硬件情况调整线程池的大于进行性能调优。Rop框架本身直接使用Spring的类包进行请求响应报文流化工作,因此Rop也继承了Spring的高性能。

我本身并没有对Rop进行大面向的性能测试,我使用rop-sample项目的UserServiceRawClient#testServiceXml-RequestAttr测试方法进行了性能的测试,该方法包括了一套比较复杂的业务参数,拥有一定的代表性。采用Rop默认线程池的配置:corePoolSize:200 maxPoolSize:500,在我本机上(双核 2.8G,内存 4G)时取得了以下的测试数据:

请求并发线程 请求数 总执行时间(s)
10   1000  16.74
50   1000  16.00
100   1000  19.38
200   1000  20.27
400   1000  22.55
800   1000  22.85


可见,Rop性能不会随着并发数增加而明显的下降,整体表现比较平稳的。除性能外,服务平台的整体稳定性也是Rop框架重点考虑的,因此我们提供了平台级、服务级、会话级的服务配额限制,以保证服务平台的整体稳定性,具体可以参照开发手册(手册下载)。

Rop的实际应用效果? Top

Rop不是一个玩玩的开源项目,相反它来源于实际的生产型项目。自从我们的网站使用了Rop后,我基本上就从服务平台的设计工作中脱离出来了,因为Rop强大的错误模型已经把设计服务报文的工作量降到了最低,我完全可以把有限的设计工作下放给开发人员。

另一方面,由于Rop为平台领域性问题都提供了解决方案,开发服务平台的工作就降格为写一个个服务方法,由于有Rop在框架层为平台的稳定性进行保驾护航,因此,对于服务平台的开发工作,普通的开发人员都可以胜任了。

目前项目进展情况?开发团队情况? Top

目前Rop已经发布了1.0正式版,且开发手册已经发布,地址:http://dl.iteye.com/topics/download/198d59b6-2a45-35c6-a44c-6c77c1081c8b

Rop的发布包已经提交到Maven核心仓库中,您可以通过如下配置引用Rop:
<dependency>  
<groupId>com.bookegou</groupId>  
<artifactId>rop</artifactId>  
<version>1.0</version>  
</dependency> 

目前项目团队主要就我一人,已经在ITeye上创建的Rop的群组,地址是:http://rop.group.iteye.com,很多ITeye的网友对Rop提出了很好的建议,也贡献了部分源码,他们是:melinkelloKitty風一樣的男子等,很感谢他们的参与和贡献。

Rop采用什么开源协议?如何获取Rop? Top

Rop采用最自由的GPL 2.0开源协议

目前Rop项目托管在Github中,可以通过https://github.com/itstamen/rop下载,也可以通过如下git命令将项目克隆到本地机中:
git clone git://github.com/itstamen/rop.git 

其他开发者如何参与到该项目中? Top

您可以在ITeye中通过短信,将整改意见和新功能的需求发送给我,也可以参与到Rop群组中进行讨论,或通过itstamen@qq.com邮箱(或腾讯微博 @hopeahead)将您的贡献源码发给我,我审核后统一发布到Github中,源码中会保留贡献者的信息。

Rop未来的开发计划? Top

没有具体的开发计划,主要还是希望根据收集到的反馈进行有针对性的整改,如过期限制、会话管理等都根据网友的反馈整改的。

初步的计划有两个:

  • 将oauth整合到Rop中:计划10月底完成;
  • 让服务的入参签名更加灵活,和Spring MVC一样:计划今年年底完成。

  • 大小: 7.2 KB


评论 共 61 条
31 楼 8000 2012-08-30 15:35
看了一下,纯属YY,你在做MVC请求吧,这个不是SOA,就更不是webservices。

还校验,SOA都是后台服务,比较企业core业务服务了,数据校验(那个字段是否为空,那个字段长度不小于多少个?)你没有搞清楚service的概念吧?
30 楼 sa364867195 2012-08-30 11:41
曾在一家公司做系统架构师时,构建了一个类似于普元的模型驱动快速开发平台,据说很多程序员都有一个开发平台梦,这个梦我算是基本实现了

是指的BASK平台吗?
29 楼 半人马 2012-08-30 10:34
nicegege 写道
支持ROP,有源代码可以看,还有手册。总比到一个公司没有帮助文档,没有项目介绍文档,自己读代码强。

没看过spring文档的人真是悲剧。
28 楼 nicegege 2012-08-30 10:30
支持ROP,有源代码可以看,还有手册。总比到一个公司没有帮助文档,没有项目介绍文档,自己读代码强。
27 楼 supercwg 2012-08-30 10:26
感觉跟springmvc3和jersey没有什么大区别,只是Rop加了更多约束和约定,使得调用有章可循而已。
26 楼 mazzystar 2012-08-30 08:00
纠正个笔误:"计划今天年底完成"。
25 楼 xzcgeorge 2012-08-30 02:04
Good job! well done!
24 楼 無為子 2012-08-29 21:11
开源协议问题确实很头大,楼主选用的GPL协议和楼主所述对这个项目的定位显然是冲突的。根据楼主项目定位:建议楼主使用LGPL协议或者Apache协议。
23 楼 JavaEye4Cwy 2012-08-29 20:56
感觉很普通,不过看得出来,很用心,值得继续发扬……
22 楼 redhacker 2012-08-29 18:00
另外所谓平台,我一直在做企业开发,企业开发至少应该包括:统一认证、统一授权、统一审计、统一用户、UI组件库、工作流引擎组件、BI及报表组件等等。。。你这个所谓平台是互联网的还是企业的?
21 楼 redhacker 2012-08-29 17:56
重新写了一个框架而已吧,说成什么平台,解决过之,我们用jersey开发项目一样做的很好。作者似乎对自己的校验模型很满意,其实没有理解rest本身,rest提倡用http标准码来表示服务的错误,比如认证错误401、服务未找到400,方法被禁用405,等等,业务错误可以统一由500表示,再自行定义业务错误码,请求响应错误判断先判断状态码,如果是200等正确的,直接读http entity body获取序列化后的xml或json(jaxb序列化得到的),如果是上述的错误码,非500错误系统直接报出统一的错误,500的错误,这时候http entity body里已经放入了具体的业务错误信息,比如:E001:用户不存在(这些都是通过i18n定义在资源文件里),其中E001就是业务错误码!jersey框架的统一异常处理器,能非常方便的做这样的事情!

如果是企业开发使用富客户端extjs之类的框架,post,put,get,delete被很好的支持,非常方便,做网站开发也可以使用ext-core,这些方法都被包含,甚至你可以用head方法。

rest的好处是充分利用http协议的特点,楼主断章取义的说了几个rest的好处,最后就结论说你的rob更好,其实rest以资源为中心的理念重点的几个特点包括:1、请求返回内容协商、客户端缓存、表意性统一接口、统一响应码(包括错误码)等,请认真读feilding博士的论文。
20 楼 stamen 2012-08-29 17:15
stamen 写道
qiao000_000 写道
GPL2.0协议约束性太强了,使用者必须开源项目源码,要是不打算赚钱的话,改成MIT、Apache或者LGPL吧,协议不该估计没人会用,风险太大了。。。

好的,我把它改成 apache 2.0的

       
 <license>
      <name>The Apache Software License, Version 2.0</name>
      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
      <distribution>repo</distribution>
  </license>
19 楼 stamen 2012-08-29 17:02
qiao000_000 写道
GPL2.0协议约束性太强了,使用者必须开源项目源码,要是不打算赚钱的话,改成MIT、Apache或者LGPL吧,协议不该估计没人会用,风险太大了。。。

好的,我把它改成 apache 2.0的
18 楼 qiao000_000 2012-08-29 17:00
GPL2.0协议约束性太强了,使用者必须开源项目源码,要是不打算赚钱的话,改成MIT、Apache或者LGPL吧,协议不该估计没人会用,风险太大了。。。
17 楼 yuhe 2012-08-29 16:54
spring的书写的不错。
16 楼 delphixp 2012-08-29 16:30
最自由的是 MIT 之类的协议。。。。最让开发者和老板开心的是 Apache 。。

最自由的GPL2.0开源协议 ...!>_<! ... 用 LGPL 吧。。。当然,最省心的是 Apache 2.0..
15 楼 supben 2012-08-29 14:14
可以留个联系方式么,有些问题想直接请教。我的邮箱slimes@126.com
14 楼 mycybyb 2012-08-29 13:46
在某些方面和我写的一个MVC框架很像,也是一个统一的DispatchServlet。只不过我的请求方式是/xxxService/xxxMethod.json?params=xxx,其中参数是json对象。当然开发人员是不用拼字符串的,开发人员只要下xxxService.xxxMethod(param1, param2)即可
13 楼 stamen 2012-08-29 13:01
半人马 写道
stamen 写道
半人马 写道
最自由的GPL2.0开源协议,我哭了。

这个协议比较自由啦,请问还有哪些协议更自由 ?

这个你就自己去搜吧,我只能说很少有比GPL更不自由的开源协议了。另外刚看了一下Rop开发手册,在Spring3出来这么久以后还推Rop意义不大。除了安全性和错误模型还有点意思外,其它都能够跟Spring3里的东西差别不大。


  我原来是服务总线就是基于Spring MVC做的Rest Web Service,Rop应该说除了实现参考Spring MVC外 和Spring MVC的可比性是很少的。这个我已经在:与传统Web Service框架相比,Rop有哪些优势?小节中说明了。
12 楼 stamen 2012-08-29 12:59
hesy_007 写道
GPL2.0
半人马 写道
stamen 写道
半人马 写道
最自由的GPL2.0开源协议,我哭了。

这个协议比较自由啦,请问还有哪些协议更自由 ?

这个你就自己去搜吧,我只能说很少有比GPL更不自由的开源协议了。另外刚看了一下Rop开发手册,在Spring3出来这么久以后还推Rop意义不大。除了安全性和错误模型还有点意思外,其它都能够跟Spring3里的东西差别不大。

采用GPL协议,估计很少人会使用了。为什么不使用LGPL呢?

   我不指望用Rop赚钱的,我只是希望用的人多,对大家有用,所以哪个自由用哪个协议,这个可以改的。
11 楼 hesy_007 2012-08-29 12:28
GPL2.0
半人马 写道
stamen 写道
半人马 写道
最自由的GPL2.0开源协议,我哭了。

这个协议比较自由啦,请问还有哪些协议更自由 ?

这个你就自己去搜吧,我只能说很少有比GPL更不自由的开源协议了。另外刚看了一下Rop开发手册,在Spring3出来这么久以后还推Rop意义不大。除了安全性和错误模型还有点意思外,其它都能够跟Spring3里的东西差别不大。

采用GPL协议,估计很少人会使用了。为什么不使用LGPL呢?
10 楼 半人马 2012-08-29 12:06
stamen 写道
半人马 写道
最自由的GPL2.0开源协议,我哭了。

这个协议比较自由啦,请问还有哪些协议更自由 ?

这个你就自己去搜吧,我只能说很少有比GPL更不自由的开源协议了。另外刚看了一下Rop开发手册,在Spring3出来这么久以后还推Rop意义不大。除了安全性和错误模型还有点意思外,其它都能够跟Spring3里的东西差别不大。
9 楼 EricLiang 2012-08-29 11:54
现在是api的时代,很看好此项目,后面我也会参与,已经fork了。
ROP的风格很容易使用,内部结构扩展方便
8 楼 stamen 2012-08-29 11:50
半人马 写道
最自由的GPL2.0开源协议,我哭了。

这个协议比较自由啦,请问还有哪些协议更自由 ?
7 楼 stamen 2012-08-29 11:49
zouruixin 写道
我对开发平台的兴趣蛮大的.. 能否分享点开发平台的知识呢

按我的经验,开发平台大致包括以下内容:
  1.用户级组织结构
  2.权限管理
  3.业务数据的新增、更改、查询、展现
  4.流程引擎(业务数据流转)
  5.报表引擎(业务数据输出)
  6.任务调度
  7.UI组件库
  8.平台扩展体系(如插件体系,事件体系,拦截体系等)
  分别打造并整合在一起就可以了,我的平台是采用 MDA架构+插件体系,MDA架构
解决通用性问题,插件解决个性化的问题。任何一个应用系统都基本上是由70%通用性需求+30%个性化需求组成了,开发平台是否能很好的解决应用系统个性化的需求,是开发平台成功的关键,也即开发平台的可编程性是需要重点考量的指标。
6 楼 半人马 2012-08-29 11:47
最自由的GPL2.0开源协议,我哭了。
5 楼 stamen 2012-08-29 11:40
zhaobohao 写道
ROP已在项目中应用,效果不错。特此感谢陈兄。建议rop多在核心功能上下功夫,加强安全性,并发性。其它的功能,让使用者自行集成就可以了,不太希望看到一个大而全的ROP。

谢谢 zhaobohao的建议,Rop把领域性的问题都通过接口开放出来,使用者可以自行定义,Rop只是把这些领域性问题明确出来,具体的工作还是要使用者自己弄的。其实,Rop的核心就是以下几项:
  1.请求响应模型
  2.错误模型
  3.数据校验和错误模型的转化
  4.领域问题的骨架
  所以Rop是一个轻量级的架构,我也在一直回避将Rop做成大而全的东西。
4 楼 zouruixin 2012-08-29 11:37
我对开发平台的兴趣蛮大的.. 能否分享点开发平台的知识呢
3 楼 zhaobohao 2012-08-29 11:25
ROP已在项目中应用,效果不错。特此感谢陈兄。建议rop多在核心功能上下功夫,加强安全性,并发性。其它的功能,让使用者自行集成就可以了,不太希望看到一个大而全的ROP。
2 楼 stamen 2012-08-29 10:59
aninfeel 写道
spring是以高性能为卖点的吗?

倒不是 但Spring的核心代码效率是得到项目充分验证的。

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

Global site tag (gtag.js) - Google Analytics