RPC和HTTP

RPC和HTTP的区别

RPC

远程过程调用协议

RPC机制是根据语言的API来定义的,而不是根据网络的应用来定义的

概念

远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。

HTTP

超文本传输协议

概念

它是一种用于分布式、协作式和超媒体信息系统的应用层协议,是万维网的数据通信的基础,也是互联网应用最为广泛的一种网络传输协议。HTTP的发展是由蒂姆·伯纳斯-李于1989年在欧洲核子研究组织所发起,标准制定由万维网协会进行协调,HTTP协议中最广泛使用的版本是HTTP 1.1。

区别

功能层面

  • HTTP是应用层超文本传输协议,主要服务在网页端和服务端之间的数据传输上
  • RPC是一个远程过程调用协议,定位在实现不同计算机应用之间的数据通信,屏蔽了通讯的底层复杂度

实现层面

  • HTTP是一个已经实现并且成熟的应用层协议,定义了通信报文的格式,比如请求头请求体,响应体等等
  • RPC只是一种通信协议的规范,并没有具体的实现,只有按照RPC通信协议规范去实现的通信框架才是协议的具体实现。比如RPC也可以使用HTTP协议来实现

常见的RPC框架

Dubbo

  • 由阿里巴巴开发
  • 支持Java语言
  • 特点:高性能、高可用、透明化调用远程服务
  • 底层实现:使用Netty作为底层通信框架,支持多种序列化协议,如Hessian、Kryo等

Motan

  • 由新浪微博开发
  • 支持Java语言
  • 特点:轻量级、高可用、透明化调用远程服务
  • 底层实现:Motan的架构与Dubbo类似,支持多种服务注册和发现机制

gRPC

  • 由Google开源
  • 跨语言支持多种语言
  • 特点:基于HTTP/2协议设计,支持双向流头部压缩等特性
  • 底层实现:使用Protocol Buffers作为接口定义语言,Netty作为通信框架。

Spring Cloud

  • 开发者:由Pivotal公司开源。
  • 语言支持:主要支持Java语言。
  • 特点:提供了丰富的生态组件,支持微服务架构中的多种场景。
  • 底层实现:Spring Cloud OpenFeign是其中用于简化HTTP客户端开发的工具。