RPC
什么是RPC?
RPC(Remote Procedure Call)即远程过程调用,它是一种调用方式。基于此调用方式诞生出了各种不同的RPC协议,RPC协议属于应用层协议,基于TCP协议。通过RPC可以实现调用远程方法像调用本地方法一样简单。
要实现服务调用,既然有HTTP协议,为什么还要使用RPC?
- HTTP协议最初发明出来主要是提供给B/S架构使用的,对于C/S架构更多的是使用RPC协议。但随着设备的多样化以及移动设备的爆发,一个服务维护多套协议变得困难,所以才渐渐出现http一统江湖的现象。
- 而现在多数企业还在使用RPC协议,主要是因为RPC协议的定制化程度高,性能会更好一些,更多是用于企业内部微服务应用间的服务调用。
- 但随着2015年HTTP2的发布,HTTP协议的性能已经超越了很多RPC协议,甚至gRPC协议底层也使用到了HTTP2。
- 毕竟RPC协议在多数软件上已经运行多年,加上其定制化程度高,使用方便,若全部替换http需要考虑成本问题,所以RPC依然有使用必要性。
RPC的原理是什么?
RPC的核心功能包含以下5个部分:
- 客户端(服务消费端):调用远程方法的一端。
- 客户端Stub(桩):实际上是一个代理类,负责将调用类、方法、方法参数等信息传递到服务提供端。
- 网络传输:通过Socket或Netty等方法,将调用信息从客户端传输到服务端。
- 服务端Stub(桩):这个相当于是分发器,接收到客户端执行方法的请求后,去执行对应的方法然后返回结果给客户端的类。
- 服务端(服务提供者):提供远程方法的一端。
RPC有哪些比较有名的协议?
- Apache Dubbo:阿里巴巴开源后加入Apache的一款开源RPC框架,提供高性能RPC、服务治理、可观察性等解决方案,涵盖Java、Golang等多种语言的SDK实现。
- Motan:新浪开源的一款RPC框架,借鉴了Dubbo的思想,是一款精简版的Dubbo。
- gRPC:Google开源的一款高性能、通用的开源RPC框架,主要面向移动应用开发并基于HTTP/2协议标准而设计,面向众多开发语言。
- Thrift:Facebook开源的一款RPC框架,已捐献给apache,具有出色的性能和跨语言特性。