RPC是什么?
通俗的讲就是,调用远程计算机上的服务,就像调用本地服务一样。通常包含传输协议和编码协议。
RPC可以基于HTTP或TCP协议,但基于HTTP协议的RPC性能却不如基于TCP协议的RPC。两方面会直接影响RPC的性能,一是传输方式,二是序列化。
众所周知,TCP是传输层协议,HTTP是应用层协议,而传输层较应用层更加底层,在数据传输方面,越底层越快,因此,在一般情况下,TCP 一定比HTTP快。就序列化而言,Java 提供了默认的序列化方式,但在高并发的情况下,这种方式将会带来一些性能上的瓶颈,于是市面上出现了一系列优秀的序列化框架,以取代 Java 默认的序列化,从而提供更高效的性能。
RPC和HTTP有什么关系?
-
HTTP本身也可以作为RPC的传输层协议
-
和HTTP相比,TCP极大的精简了传输内容
-
大部分RPC框架是面向服务的封装,针对服务的可用性和效率等都做了优化
-
架在服务治理、负责均衡等方面做了很好的支持
-
内部服务一般走RPC,外部服务一般走HTTP
其它
越底层,代码越复杂、灵活性越高、效率越高;越上层,抽象封装越好、代码越简单、效率越差。
企业的复杂技术需求通常对于远程调用需要做到包含但不止以下几种需求
(1) 路由配置、服务治理。调用的下游服务处在重启、扩容或者某些机器下线,需要及时关闭对应机器的流量,避免造成不可用。
调整流量的路由策略。
(2) 负载均衡。将流量平均打到下游服务的所有机器上
(3) 服务降级、自动熔断。当下游服务调用错误率显著增高后,及时熔断避免影响上游服务,服务恢复后及时恢复流量。
SOAP是HTTP+文本
参考:http://blog.jobbole.com/92290/