高并发下RPC通信优化路径

  1. 选择合适的通信协议
    基于 TCP 协议实现的 Socket 通信是有连接的,而传输数据是要通过三次握手来实现数据
    传输的可靠性,且传输数据是没有边界的,采用的是字节流模式。
    基于 UDP 协议实现的 Socket 通信,客户端不需要建立连接,只需要创建一个套接字发送
    数据报给服务端,这样就不能保证数据报一定会达到服务端,所以在传输数据方面,基于
    UDP 协议实现的 Socket 通信具有不可靠性。UDP 发送的数据采用的是数据报模式,每个
    UDP 的数据报都有一个长度,该长度将与数据一起发送到服务端。
    优化方法:
    为了保证数据传输的可靠性,通常情况下我们会采用
    TCP 协议。如果在局域网且对数据传输的可靠性没有要求的情况下,我们也可以考虑使用
    UDP 协议,毕竟这种协议的效率要比 TCP 协议高。
    高并发下RPC通信优化路径

  2. 使用单一长连接

  3. 优化socket网络通信
    传统的socket网络通信存在I/O阻塞、线程模型缺陷、内存拷贝(用户空间–》内核空间–》 内核空间–》网络IO)两次拷贝,等问题缺陷,可以考虑使用成熟的通信框架:Netty。
    1️⃣实现非阻塞I/O:使用Select的多路复用器实现非阻塞I/O
    2️⃣高效的Reactor模型:使用一个主线程进行接收客户端和服务端连接请求,建立成功后进行监听此连接,同时创建一个链路请求注册到具体的工作线程中,由工作线程负责后续的I/O操作,这样实现了,一个线程监听多个客户端连接请求。
    3️⃣串行设计:Netty使用无锁化的链路操作,使用Pipeline进行各个通道的链路操作。
    4️⃣零拷贝:数据从内存发布到网络,需要经过两次拷贝动作,从用户空间-》内核空间 内核空间-》网络IO,为了减少操作,Netty提供了ByteBuffer,使用Direct Buffers模式,开辟一块非堆内存空间,直接可以将数据避免缓冲区操作,直接拷贝到内核空间。

  4. 量身定做报文格式
    报文是用来描述具体的校验、操作、传输数据等内容,根据自己功能需要,设置报体小、满足功能,易解析等特性。
    eg:高并发下RPC通信优化路径

  5. 编码解码
    对于一个好的网络协议,能够兼容优秀的序列化框架是非常重要的,数据传输过程中,优秀的数据序列化编码解码过程可以提高网络通信能力,我们可以采用Protobuf序列化。