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客户端开发的工具。