大家好,又见面了,我是你们的朋友全栈君。
网络协议——RPC协议
远程调用协议,用于定义服务之间的接口调用规范标准
1、RPC调用标准
1.1、RPC结构
- 客户端(服务端):执行逻辑进行本地调用
- Stub:对参数进行封装/解封装
- RPCRuntime:发送/接收请求/响应
1.2、ONC RPC
最早的RPC框架之一
1.2.1、外部数据表示法(XDR)
规定交互协议的文件,包括:
- XID:一对请求/响应的唯一标识
- CALL:请求为0,响应为1
- RPC Version:RPC协议的版本号
- Program Number:服务端程序的编号
- Version Number:服务端程序的版本号
- Procedure Number:调用的方法
- Credential、Verifier:认证鉴权
- Remote Procedure Parameters:参数列表
1.2.2、端口映射器(PortMapper)
服务提供方的RPC程序启动时将自己的服务端口注册在PortMapper中,服务调用方从PortMapper中找映射的端口,然后再和服务提供方建立连接
2、简单对象访问协议(SOAP)
与古老的RPC协议相比,双方的SOAP协议没必要完全一致(参数顺序、参数个数等),更加灵活
2.1、Web服务描述语言(WSDL)
也是一个XML,描述了方法名、服务名、端口、请求参数等信息,通过在服务地址后加”?wsdl”查看
2.2、统一描述、发现和集成协议(UDDI)
以SOAP协议为基础的RPC服务,将自己的wsdl文件放到UDDI中,供服务调用方封装成本地调用
3、RESTful格式的API
全称叫表述性状态转移,基于HTTP协议的请求通过方法类型(GET、POST等)确定请求动作,数据以JSON文本格式传输
4、二进制类RPC协议
将数据压缩成二进制,减少带宽占用
Hessian2
Dubbo中默认的序列化协议
服务调用方根据Hessian2协议的规则,只记录类文件中类名、方法名、字段等信息的名称和字符长度等,压缩成二进制作为自描述,同时将参数的长度和值压缩成二进制,与自描述一同传输
服务提供方通过Hessian2协议的统一规则,对接受的二进制流进行解析,获得真正的请求
5、跨语言类RPC协议
不同的需求使用不同的编程语言,主要为了适应跨语言调用
Protocal Buffers
使用TLV(Tag,Length,Value)的存储办法将请求数据压缩
- Tag:根据类文件中字段的唯一标识field_num,和字段类型的标识wire_type生成
- Length:字段值的长度
- Value:字段值
Envoy
一种动态的负载均衡器,有4个基础配置:
- listener:监听端口接入请求
- endpoint:目标IP地址和端口,请求转发的目的地
- cluster:一组相同的endpoint,可以通过轮询进行负载和健康检查
- route:通过route规则,跳到不同版本的cluster,或根据条件进行流量分配
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/144454.html原文链接:https://javaforall.cn