锁定老帖子 主题:RPC or noRPC,这是个问题
该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-04-01
我选择选择RPC:
楼主提的缺点: 1.Z应用的开发者需要承担责任,如果client的Jar在线上出现bug,他们难辞其咎.(但这对A-Y的开发者来说是个优点) 2.如果jar包线上出bug,那么A-Y个应用都需要重启,并引入新的jar包. 3.不能满足一些人自以为是的欲望,因为有一些人一直觉得自己的代码是最好的,所以他们宁可重复造轮子. 第一点,Z应用是提供者当然有责任解决bug了,而且多了25个使用者,可以很好的覆盖所有的功能,加速功能的进化(根据开闭原则,对外部开放接口,封闭内部的实现细节) 第二点,这个看你怎么实现了,一般rpc出bug也只是你的服务端吧!应该客户端的jar修改基本上比教少!如果接口发生变动是不是可以利用classloader来动态装载新的jar来热部署! 第三点,既然是企业内部,那还不好说,重复的劳动要不得阿!或者内部开放你的rpc源代码,有冲动的人提出修改申请来冲动下也可以的! ^ ^ |
|
返回顶楼 | |
发表时间:2010-04-01
robbin 写道 需要很高的性能,模块之间耦合程度高就用RPC
不需要很高的性能,模块之间独立性强,就用REST 耦合程度的高低怎么衡量呢? 比如说建索引,或者查询,或者其他,这些功能都是这个架构中不可缺少的.更关键的是架构中一些数据的定义涉及到很多应用,所以这个应该是耦合高的一个标识了 |
|
返回顶楼 | |
发表时间:2010-04-01
skzr.org 写道 我选择选择RPC:
楼主提的缺点: 1.Z应用的开发者需要承担责任,如果client的Jar在线上出现bug,他们难辞其咎.(但这对A-Y的开发者来说是个优点) 2.如果jar包线上出bug,那么A-Y个应用都需要重启,并引入新的jar包. 3.不能满足一些人自以为是的欲望,因为有一些人一直觉得自己的代码是最好的,所以他们宁可重复造轮子. 第一点,Z应用是提供者当然有责任解决bug了,而且多了25个使用者,可以很好的覆盖所有的功能,加速功能的进化(根据开闭原则,对外部开放接口,封闭内部的实现细节) 第二点,这个看你怎么实现了,一般rpc出bug也只是你的服务端吧!应该客户端的jar修改基本上比教少!如果接口发生变动是不是可以利用classloader来动态装载新的jar来热部署! 第三点,既然是企业内部,那还不好说,重复的劳动要不得阿!或者内部开放你的rpc源代码,有冲动的人提出修改申请来冲动下也可以的! ^ ^ 非常同意你的观点.其实上面我提出的缺点我也不认为全部都是缺点,我只是站在不同的角度来预先考虑了一些其他观点.打个预防针,呵呵 |
|
返回顶楼 | |
发表时间:2010-04-01
最后修改:2010-04-01
liu78778 写道 看看JE的风气, 这种讨论的帖子都被批成新手帖
继续投吧, 反正我是0 正是因为每个人的观点都不一样,也正是因为人的这种特征(这个特征显示在本帖的投票上,也显示在我们日常的技术决策中)所以我才发出了这个样帖子,寻求他人的答案来证明自己的对错. 所以我们要捍卫他们投票的权力,但是我希望在投票的同时能够讲一讲原因.我会洗耳恭听. |
|
返回顶楼 | |
发表时间:2010-04-01
我对RPC和noRPC之间的界线比较模糊,比如说我们现在的应用,实际上就是通过url提供参数调用,可是server端还是给提供了一个jar包,对调用进行wrap,也就是客户端直接使用方法接口就可以,你说这算是RPC还是noRPC?
根据lz所描述的优缺点,我觉得lz的根本问题是不是要用server提供端的jar包的问题,至于c/s间如何通讯,那是另外一个问题。 对于我来讲,我倾向于使用提供包,因为这种方式所带来的唯一风险,就是提供的jar包的bug问题,其实不管哪种方式都有个双方协议的问题,不管是方法,还是参数格式。从这方面来看,只要接口不变,即使jar包出现bug,客户端重启一次又能带来多大问题呢。另外,对于服务器端的功能最熟悉的还是服务器端开发者,我想这个jar包出现bug的概率,比起客户端自己去编写要低多了。 |
|
返回顶楼 | |
发表时间:2010-04-01
weiqingfei 写道 我对RPC和noRPC之间的界线比较模糊,比如说我们现在的应用,实际上就是通过url提供参数调用,可是server端还是给提供了一个jar包,对调用进行wrap,也就是客户端直接使用方法接口就可以,你说这算是RPC还是noRPC?
根据lz所描述的优缺点,我觉得lz的根本问题是不是要用server提供端的jar包的问题,至于c/s间如何通讯,那是另外一个问题。 对于我来讲,我倾向于使用提供包,因为这种方式所带来的唯一风险,就是提供的jar包的bug问题,其实不管哪种方式都有个双方协议的问题,不管是方法,还是参数格式。从这方面来看,只要接口不变,即使jar包出现bug,客户端重启一次又能带来多大问题呢。另外,对于服务器端的功能最熟悉的还是服务器端开发者,我想这个jar包出现bug的概率,比起客户端自己去编写要低多了。 你可以根据下面两个问题来衡量: 1.你需要自己考虑你的对象这么转换成bytes吗 2.你需要自己实现应用层协议吗 |
|
返回顶楼 | |
发表时间:2010-04-01
ahuaxuan 写道 weiqingfei 写道 我对RPC和noRPC之间的界线比较模糊,比如说我们现在的应用,实际上就是通过url提供参数调用,可是server端还是给提供了一个jar包,对调用进行wrap,也就是客户端直接使用方法接口就可以,你说这算是RPC还是noRPC?
根据lz所描述的优缺点,我觉得lz的根本问题是不是要用server提供端的jar包的问题,至于c/s间如何通讯,那是另外一个问题。 对于我来讲,我倾向于使用提供包,因为这种方式所带来的唯一风险,就是提供的jar包的bug问题,其实不管哪种方式都有个双方协议的问题,不管是方法,还是参数格式。从这方面来看,只要接口不变,即使jar包出现bug,客户端重启一次又能带来多大问题呢。另外,对于服务器端的功能最熟悉的还是服务器端开发者,我想这个jar包出现bug的概率,比起客户端自己去编写要低多了。 你可以根据下面两个问题来衡量: 1.你需要自己考虑你的对象这么转换成bytes吗 2.你需要自己实现应用层协议吗 如果这样考虑的话,那就是属于使用哪种以及哪层通信协议,以及使用哪种通信格式的问题了。 定好这点后,接下来才是由server提供端来提供jar来隐藏通信格式,还是提供一个doc,由用户自己来编写。 当然根据通信协议以及格式的不同,客户端用户编写的难易也有所不同,另外还要考虑服务器端愿不愿意暴露那么多东西。 其实这个问题讨论起来也很复杂,我不知道lz站在哪个角度,或者从一个什么场景下考虑这个问题,如果不限定些东西的话,好像无法得出结论。 |
|
返回顶楼 | |
发表时间:2010-04-01
最后修改:2010-04-01
本质是选择http协议还是rpc协议而已。
我看rpc协议更高级,更面向应用。用webservice,hession随便你。 何况业界通用的rpc协议出了bug也不需要你去提供更新包。 |
|
返回顶楼 | |
发表时间:2010-04-01
最后修改:2010-04-01
引用 如果这样考虑的话,那就是属于使用哪种以及哪层通信协议,以及使用哪种通信格式的问题了。
定好这点后,接下来才是由server提供端来提供jar来隐藏通信格式,还是提供一个doc,由用户自己来编写。 当然根据通信协议以及格式的不同,客户端用户编写的难易也有所不同,另外还要考虑服务器端愿不愿意暴露那么多东西。 其实这个问题讨论起来也很复杂,我不知道lz站在哪个角度,或者从一个什么场景下考虑这个问题,如果不限定些东西的话,好像无法得出结论。 如果这样考虑的话,那就是属于使用哪种以及哪层通信协议,以及使用哪种通信格式的问题了。 定好这点后,接下来才是由server提供端来提供jar来隐藏通信格式,还是提供一个doc,由用户自己来编写。 当然根据通信协议以及格式的不同,客户端用户编写的难易也有所不同,另外还要考虑服务器端愿不愿意暴露那么多东西。 其实这个问题讨论起来也很复杂,我不知道lz站在哪个角度,或者从一个什么场景下考虑这个问题,如果不限定些东西的话,好像无法得出结论。 如果提供doc让用户来编写,那我就觉得这个是非RPC方式了,因为用户看不到你的接口,所以客户端的开发人需要自己去搞序列化,自己按照文档的通信协议来开发了. 我的角度就是从架构整体的性能,可维护性,可扩展性以及成本. |
|
返回顶楼 | |
发表时间:2010-04-01
推荐PHPRPC
|
|
返回顶楼 | |