RPC远程服务调用

1. 基本概念

  • 跨网络、跨进程的方法调用
  • 因为客户端和服务端位于网络上不同的地址,要完成一次rpc调用,则需要以下步骤
    • 首先建立网络连接
    • 建立连接后,双方需要按照某种约定的协议进行网络通信
    • 能正常通信后,服务端收到请求后需要以某种方式处理,处理完成后把请求结果返回给客户端
    • 为了减少传输数据大小,还需要对数据进行序列化与反序列化

2. 连接方式

  • 可以基于HTTP通信
    • 但是一次http通信就需要一次三次握手,四次挥手。反复建立和销毁tcp连接,速度不够快。
  • 基于TCP通信
    • 也就是基于Socket通信,可以维持长连接,速度更快
  • 客户端和服务端通信还要有以下机制保证
    • 链路存活检测,客户端定时发送给服务端心跳检测,检测链路状态
    • 断连重试

3. 服务端处理请求方式

  • 同步阻塞方式:客户端一个请求,服务端对应一个线程去处理。
  • 同步非阻塞方式:基于IO多路复用,把多个IO的阻塞复用到同一个select的阻塞上。
  • 异步非阻塞方式:基于AIO,实现困难,理论上效率最好

4. 数据传输协议

  • 协议一般包括协议头和内容体
    • 协议头:消息长度,消息类型,头部长度,其他信息
    • 内容体:真实想传递的数据
  • 可以基于http协议
  • 也可以自定义协议

5. 序列化与反序列化

  • 序列化与反序列化说的是内容体采用什么要的数据编码问题
  • 解决客户端和服务端采用哪种数据编解码的问题
  • 可以基于文本协议如json,但是最终网络传输还是二进制形式
  • 也可以基于自定义编码协议如thrift

你可能感兴趣的:(分布式系统,rpc,网络,网络协议)