1.RPC调用、本地调用和HTTP调用
网络调用一般是基于HTTP协议进行调用,RPC是使用TCP或者UDP协议进行调用,效率上回更好;
常用的RPC框架有Thrift、GRPC等;
2.RPC的调用时序图
1)调用方调用Proxy请求服务,并设置异步处理器handler;
2)由代理类打包request,并在注册方(总线、路由等)获取服务提供方的地址,向目标服务方发起请求;
3)由服务方找到对应的处理类和处理方法,并处理发送方请求;
4)由服务方打包response,返回调用方;
设计成什么样的调用模型? 调用信息通过什么样的方式序列化?通过哪种协议传输?性能如何?可靠性如何? 分布式系统中最关注的问题:出现 failure 如何应对?如何容错? 更为全面的服务治理功能(如服务发现、负载均衡等)
服务代理。即实现一个服务接口,被调用端实现此服务接口,实现对应的方法逻辑,并写好 RPC 调用信息接收部分;调用端通过 RPC 模块获取一个服务代理实例,这个服务代理实例继承了服务接口并封装了相应的远程调用逻辑(包括消息的编码、解码、传输等)。调用端通过这个服务代理实例进行 RPC 调用。像 Vert.x Service Proxy 和 gRPC 都是这种模型。这样的 RPC 模块需要具备生成服务代理类的功能
直接调用,即设计特定的 API 用于 RPC 调用。比如 Golang 的 rpc 包,里面的 Client 就提供了一个 Call 方法用于任意RPC调用,调用者需要传入方法名称、参数以及返回值指针(异步模式下传入 callback handler)