本文最后更新于:2020年11月14日 下午

RPC协议:

1、协议约定问题:最早的 RPC 的一种实现方式称为 Sun RPC 或 ONC RPC。这个 RPC 框架是在 NFS 协议中使用的。服务端和客户端都是以RPCRuntime收发请求,使用Stub解码。通过框架规定远程调用的语法、传递参数和数据表示;
2、传输问题:使用ONC RPC类库,处理连接失败、重试、发送失败、超时等场景;
3、服务发现问题:ONC RPC中,通过portmapper进行服务发现。RPC程序启动时,会向port mapper注册,客户端访问服务时,先查询portmapper,获取RPC服务端口,再建立连接,发起调用。

基于XML的SOAP(简单对象访问)协议:

原来的二进制 RPC 有很多缺点,格式要求严格,修改过于复杂,不面向对象,于是产生了基于文本的调用方式——基于 XML 的 SOAP。
SOAP 有三大要素:协议约定用 WSDL、传输协议用 HTTP、服务发现用 UDDL。

基于JSON的RESTful接口协议:

RESTful 不仅仅是一个 API,而且是一种架构模式,主要面向资源,提供无状态服务,有利于横向扩展应对高并发。
基于 RESTful API 的跨系统调用框架Spring Cloud就是使用Eureka进行服务注册发现的。

二进制类RPC协议-dubbo:

Dubbo用于提示服务间调用的性能。 通过注册中心解决服务发现问题,通过 Hessian2 序列化解决协议约定的问题,通过 Netty 解决网络传输的问题。
1、Dubbo 中默认的 RPC 协议是 Hessian2。为了保证传输的效率,Hessian2 将远程调用序列化为二进制进行传输,并且可以进行一定的压缩。
2、Netty 是一个非阻塞的基于事件的网络传输框架,在服务端启动的时候,会监听一个端口,并注册一些连接和请求时间。

跨语言类RPC协议:

GRPC 是一种二进制,性能好,跨语言,还灵活,同时可以进行服务治理的多快好省的RPC 框架,唯一不足就是还是要写协议文件。
GRPC 序列化使用 Protocol Buffers,网络传输使用 HTTP 2.0,服务治理可以使用基于Envoy 的 Service Mesh。