rpc 的一个流程
当一个请求过来的,经过网关,网关调用应用服务,应用服务也需要调其他的服务。这个时候我们要考虑的问题。
- 服务之间的发现
我们需要一个发现服务和注册服务的地方,既是注册中心。还需要监控服务的可用性 - 服务是多机器部署的,怎么均衡服务节点的流量
负载均衡的实现,保证流量不被打到某一台或者特定的几台节点上,其他节点无流量 - 调用超时问题
需要关心网关调用服务,或者服务之间调用的超时问题 - 服务负载问题
如果某一个服务集群负载过高怎么办 - 服务的节点管理等等
怎么样管理和监控服务节点 - 服务之间交互的协议
协议的格式
[版本号]|[数据包长度]|[requestID]|[请求报文类型]|[报文编码格式]|[实际报文内容]的封包格式
request 请求体结构
1 | type Request struct { |
一个RPC的请求流程
客户端建立与服务端的链接 -> 基于客户端代理类,调用需要请求的方法 -> 生成请求体request,基于编码格式和协议格式,做数据转换->发送到服务端-》服务端接受到二进制报文,基于编码和协议格式,做反解码操作-》基于request的指定的server类和方法名调用注册的server方法返回数据-> 服务端把返回数据,编码返回给客户端->客户端反解码,拿到调用结果
调式
1 | go run main.go -start server -port 9099 |
1 | 初始代码:https://github.com/lihongsheng/go-simple-rpc.git |