# 一、概述 前置通信服务目的是在网络协议基础上,通过接入各类数据;识别数据特点用于后期数据应用;网络协议用于不同终端、服务之间的消息传递满足通讯需求,RPC架构处于分布式计算体系下支持不同服务下调用,通信服务在接收到指令之后按照预置规则用于执行计算任务,支持不同业务场景使用。
1、网络协议
网络协议概念是计算机之间的通讯语言,规定了数据传输格式,以确保数据在互联网上的传输是有序、可靠的,网络协议以TCP/IP的协议栈为基础,前置通信服务进而使用MQTT协议、socket抽象接口、TCP透传、HTTP推送等常用协议接入。
# 2、数据协议包数据包请求的协议是在网络传输中实现数据传输的具体协议,不同的协议有不同的版本、不同版本之间有特定的功能和用途。
前置通信服务以TCP/IP的协议栈为基础,本服务以TCP/IP为基础使用,消息数据包主要是以二进制数组的形式存在,分为:校验位、消息头、消息体、消息尾。在实际传输中使用byte数组以二进制的形式进行传递,将信息内容以字节按照顺序写入数组,通过数据格式将组装的数据以一种相对标准的方式进行传输,常用的数据格式有JSON、protobuf,完成端到端的传输并以标准规则进行编解码。
## 2.1、RPC通信过程RPC:Remote Procedure Call Protocol 的简称,RPC架构是建立一个网络通信与网络传输的服务调用过程。一个完整的RPC过程:
a、建立网络通信,客户端与服务端建立TCP连接,RPC过程中交换的数据在建立的连接中传输。
b、服务发现,处于底层的RPC架构将服务端所处的IP+端口+(方法名称)暴露,用于客户端所在的服务进行发现。
c、网络传输,网络传输是基于网络协议进行数据传输的过程,可以理解为一个序列化、反序列化的过程。
d、动态代理,动态代理主要使用JDK动态代理、CGLIB动态代理,完成服务间的调用、返回、解析。
RPC属于分布式下异步调用,使用过程中受限于网络、服务器性能、服务应用健壮性、莫名异常等多种因素,需进行系统服务间的容错处理;认证鉴权、过载保护策略、超时、重试、心跳检测等策略来提升RPC性能,同时在传输过程中优化网络传输过程、序列化反序列化。同时RPC异步调用需要通过tracing、监控、日志来记录问题及请求。
## 2.2、RPC通信模型了解RPC通信模型之前,先了解网络IO模型类型:
网络IO模型分为:同步阻塞 IO(BIO)、同步非阻塞 IO(NIO)、IO 多路复用、信号驱动IO、异步非阻塞 IO(AIO)。
RPC架构的使用中,更多的是高并发调用场景,更多会选择IO多路复用的方式;本文重点阐述下IO 多路复用模型,服务端采用单线程过select/epoll机制,获取fd列表, 遍历fd中的所有事件, 可以关注多个文件描述符,使其能够支持更多的并发连接。
IO多路复用的实现主要有select,poll和epoll模式。
select模型:
将需要进行IO操作的socket添加到select中,然后阻塞等待select系统调用返回;当数据到达时,socket被激活,select函数返回。用户线程正式发起read请求,读取数据并继续执行。使用select模型最大的优势是客户端可以在一个线程内同时处理多个socket的IO请求。用户可以注册多个socket,然后不断地调用select读取被激活的socket,即可达到在同一个线程内同时处理多个IO请求的目的。
poll模型:
poll模型的原理和select模型的实现原理基本一致,在使用poll模型、select模型时使用方式、原理基本相同,poll模型相比较select模型最大的区别在于监听遍历时内存大小的设置(poll基于链表存储),poll模型允许用户自定义数组设置监听集合,数组设置poll模型监听过大会造成服务器瘫痪。
epoll模型:
epoll模型基于事件驱动的IO方式,没有文件描述符(socket)限制,epoll使用一个文件描述符管理多个描述符,将用户关系的文件描述符的事件存放到内核的一个事件表中,这样在用户空间和内核空间的copy只需一次。
## 2.3、RPC中间件RPC中间件主要包括五部分组成,生产者、消费者、API接口、注册中心、通讯服务;
生产者 : 提供通讯服务生产方
消费者 : 消费方
API接口 : 公共接口调用
注册中心 : 对生产者提供注册服务
通讯服务 : 通讯的主要框架以Netty实现为主
EPC调用过程:
3、RPC与socket区别
RPC属于远程调用架构、Socket属于一种通信方式
下章以工程结构为示例进行构建。