为何须要RPC,而不是简单的HTTP接口

转载自:http://www.oschina.net/question/271044_2155059?sort=default&p=1#answersjava

目前有不少Java的RPC框架,有基于Json的,有基于XML,也有基于二进制对象的。spring

论复杂度,RPC框架确定是高于简单的HTTP接口的。但毋庸置疑,HTTP接口因为受限于HTTP协议,须要带HTTP请求头,致使传输起来效率或者说安全性不如RPC。编程

如今问题是,遇到怎样的瓶颈了才须要或者说更适合用RPC(好比像阿里这么大的请求并发量,简单的HTTP确定达不到预期),但问题是你们所在的公司,要有像阿里这么大的量是比较少的,甚至说1/1000的量可能都没有,那咱们还须要使用RPC吗?小程序

技术应该不是为了使用新技术而去使用,而应该是旧技术存在某些瓶颈,存在难以支撑或者扩展性越老越差等问题暴露出来以后,用新技术来进行解决。安全

那RPC最大的优势,或者说它相比简单的HTTP接口,它的优点、更适合它的业务场景是怎样呢?简单的HTTP又哪里不足,哪些场景明显不太适合呢?网络

---架构

RPC=Remote Produce Call 是一种技术的概念名词. HTTP是一种协议,RPC能够经过HTTP来实现,也能够经过Socket本身实现一套协议来实现.因此楼主能够换一个问法,为什么RPC还有除HTTP 以外的实现法,有何须要.毕竟除了HTTP实现外,私有协议不具有通用性.那么我想惟一的答案就在于HTTP不能知足其业务场景的地方,因此这个就要具体 案例具体分析了.并发

------框架

http接口是在接口很少、系统与系统交互较少的状况下,解决信息孤岛初期常使用的一种通讯手段;优势就是简单、直接、开发方便。利用现成的http协议 进行传输。可是若是是一个大型的网站,内部子系统较多、接口很是多的状况下,RPC框架的好处就显示出来了,首先就是长连接,没必要每次通讯都要像http 同样去3次握手什么的,减小了网络开销;其次就是RPC框架通常都有注册中心,有丰富的监控管理;发布、下线接口、动态扩展等,对调用方来讲是无感知、统 一化的操做。第三个来讲就是安全性。最后就是最近流行的服务化架构、服务化治理,RPC框架是一个强力的支撑分布式

---

rpc是一种概念,http也是rpc实现的一种方式。论复杂度,dubbo/hessian用起来是超级简单的。最近用dubbo和hessian比较多,http的几乎都被废弃了。

至于为何用,其实很简单,业务场景不同。我最先的单位全部的代码都在一个工程里,一次要发布几百m的代码。这种架构是很是有利于小程序的。可是咱们为何要应用rpc层呢,一个功能,一套代码下来不就解决了么?我以为有几个好处:

1 灵活部署 2 解耦 至于为何,当你用到的时候,你会体会。

系统作大了,确定是须要作微服务的。 如今咱们作电商就是这样,单独有一个订单系统,支付系统,商品系统,用户系统。都是分开部署,单独上线的。 但咱们交互是用HTTP接口来交互的,我想转用RPC,但问题是我如今还没发现为何须要用RPC,我还没能理解它的做用和意义

用http交互其实就已经属于rpc了

---------

RPC:远程过程调用。RPC的核心并不在于使用什么协议。RPC的目的是让你在本地调用远程的方法,而对你来讲这个调用是透明的,你并不知道这个调用的方法是部署哪里。经过RPC能解耦服务,这才是使用RPC的真正目的。RPC的原理主要用到了动态代理模式,至于http协议,只是传输协议而已。简单的实现能够参考spring remoting,复杂的实现能够参考dubbo。

--------

RPC是一个软件结构概念,是构建分布式应用的理论基础。就比如为啥你家能够用到发电厂发出来的电?是由于电是能够传输的。至于用铜线仍是用铁丝仍是其余 种类的导线,也就是用http仍是用其余协议的问题了。这个要看什么场景,对性能要求怎么样。好比在java中的最基本的就是RMI技术,它是java原 生的应用层分布式技术。咱们能够确定的是在传输性能方面,RMI的性能是优于HTTP的。那为啥不多用到这个技术?那是由于用这个有不少局限性,首先它要 保证传输的两端都要要用java实现,且两边须要有相同的对象类型和代理接口,不须要容器,可是加大了编程的难度,在应用内部的各个子系统之间仍是会看到 他的身影,好比EJB就是基于rmi技术的。这就与目前的bs架构的软件截然不同。用http必需要服务端位于http容器里面,这样减小了网络传输方面 的开发,只须要关注业务开发便可。因此在架构一个软件的时候,不能必定根据需求选定技术。