锁定老帖子 主题:RPC or noRPC,这是个问题
该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-04-01
最后修改:2010-05-21
/** * author:ahuaxuan * date:2010-04-21 */ 修改,避免引起混淆,特别说明本文中的非RPC方式其本质也是RPC,只是非RPC由服务器端定义好序列化规则和协议,然后让调用者自己去实现,而本文中的RPC指服务提供者提供Jar,客户端可以直接调用接口.不需要考虑到网络,协议,序列化算法.
很多公司都会遇到应用集成的一些问题,其中一项就是RPC的问题. 使用RPC的好处是你不需要考虑对象这么序列化成bytes传到server,也不需要考虑从server过来的bytes这么反序列化成接口的返回值. 这些内部的实现A-Y的开发者完全不需要考虑.
6.文档中要定义接口的错误状态码.然后客户端需要关心这些状态码的实现.
3.不需要考虑对象这么序列化成bytes传到server,也不需要考虑从server过来的bytes这么反序列化成接口的返回值. 这些内部的实现A-Y的开发者完全不需要考虑. 4.不需要考虑序列化完成之后的bytes怎么传输,是http,还是直接基于TCP, 是nio还是bio等等 5.异常可以直接序列化到客户端,客户端调用者不需要去研究什么状态码,只要看一下异常的种类就行了. 6.客户端可以直接验证输入参数的合法性,无需到服务器上验证, 提供接口的人更清楚他们接受什么样的参数
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-04-01
之前碰到的是RPC方式,人家给几个jar包,感觉不是很透明,确实有想自己造轮子的感觉。因为其实方式就是jms
现在想可不可以通过rest的方式发布应用,就像je这种API,把它用到系统里面呢? |
|
返回顶楼 | |
发表时间:2010-04-01
最后修改:2010-04-01
这么快就有人投新手贴了.你还别以为这个是新手贴,这个选择狠重要,直接决定架构的方向和可维护性.我也很想听听投新手贴同学的高见.
to ls jms不算请求应答模型. 附上我的投票,我选择RPC模式, 但是显然,在大公司里很多时候说话要看资历,所以我是来寻求帮助的,或者说如果我的选择不对,那么也得要大多数选择非RPC模式. 如果我的选择对了,我会把这个帖子贴给我们总架构师看一下.我只是想说服他或者他们. |
|
返回顶楼 | |
发表时间:2010-04-01
最后修改:2010-04-01
如果我说:“根据实际情况选择”会不会感觉我是因为太懒,所以懒得去考虑这些所谓架构上的问题呢?
从我们现在的开发角度来讲,我倾向于RPC,理由如下: 接口明确,规则清晰,沟通顺畅。还可以加上主贴中说到的“减少工作量”的部分。 但是,确实有的情况下需要开辟以url+参数这种形式的协议调用,这还不仅仅是公司提供给外部的XXX API,我遇到过公司内部跨部门调用的时候,就不愿意为对方提供远程调用接口,据说是因为双方使用的语言不同,所以简单给了一个URL附带一大堆的参数规范就不管了。这种时候都不是技术选型的问题,而是部门之间协调的问题了,技术人员插不上嘴。 反之,如果各部门之间沟通顺畅,即便从另一个团队拿过来一个jar,调用一方也很容易搞清楚内部实现(或者说有足够的信任感),就不会出现重新造轮子的冲动了。 |
|
返回顶楼 | |
发表时间:2010-04-01
最后修改:2010-04-01
to ls.
我发这个帖子的目的就是为了用这个帖子来协调架构中各个组的统一决定,否则我发这个帖子只能够被别人投新手贴了(我不会真的闲的无聊来让大家回答这个问题). 所以我在文章最后也特别注明"大家在发展的过程中都或多或少会遇到这样的问题",为什么我要说这句话呢,因为有事情不是技术能说了算的,需要案例或者投票. ================== 所以ls的观点是从整体角度出发+顺畅的沟通应该是选择RPC方式. ps,部门之间(相关度不大的部门)或者公司之间,我也认为应该使用非RPC的方式,这一点我们也是一致的. |
|
返回顶楼 | |
发表时间:2010-04-01
我现在使用的是http query就是URL 参数的形式,不过我也给其他应用开发了调用代码。其实最烦恼的是怎么规范接口。
|
|
返回顶楼 | |
发表时间:2010-04-01
最后修改:2010-04-01
我暂时试试rest方式返回json,不管js还是java写的客户端,都比较好解析
就是尝试,我们第三方公司的东西当然是这种rpc的,给函数,给传参,调用即可 |
|
返回顶楼 | |
发表时间:2010-04-01
需要很高的性能,模块之间耦合程度高就用RPC
不需要很高的性能,模块之间独立性强,就用REST |
|
返回顶楼 | |
发表时间:2010-04-01
非rpc的情况下a-y的client如果出现bug也有可能会导致z的服务停止。而且这样的bug如果出现就会非常麻烦。
如果client是未知的情况下我觉得还是rpc更好些。 谁知道你的客户会做些什么样的尝试。。。 |
|
返回顶楼 | |
发表时间:2010-04-01
哥哥,你的日子真超前。
|
|
返回顶楼 | |