分布式服务框架--第三章:通信框架

2020-11-08  本文已影响0人  celusing

前言:常用的RPC通信框架:包括GRPC,Restful, Netty等。

一.网络分层图

深度截图_选择区域_20201108143210.png

二.关键技术点分析

1.长连接和短连接

1)长/短:指的是多次数据交换能否复用同一条连接,而不是连接的持续时间长短。
2)TCP连接本身并没有长短的区分,长或短只是上层应用或协议使用其方式。UDP没有连接说法。
3)HTTP1.0作为TCP的上层协议,开始支持长连接。但是存在线头阻塞问题;HTTP2.0通过引入分帧分流机制,完美解决。GRPC是给予HTTP2.0协议的RPC通信框架。
绝大多数的分布式服务框架(RPC框架)都推荐使用长连接进行内部通信。长连接优点:

备注:GRPC内部采用长连接,管理连接的方式:设定时间阈值。默认情况下,大于10s没有数据发送,grpc认为是ideal连接,server端会给client端发送GOAWAY包,client收到GOAWAY包后会主动关闭连接。下次发送包的时候,再重新建立连接。

2.BIO还是NIO

1.BIO:Blocking IO 同步阻塞IO


深度截图_选择区域_20201108150330.png

采用BIO通信模型的服务端,通常由一个独立的Acceptor线程负责监听客户端连接,接受到请求之后,为每个客户端创建一个新的线程进行链路处理,处理完成之后,通过输出留返回应答给客户端,线程销毁,这就是典型的一请求一应答的通信模型。
2.NIO:NonBlocking IO 非同步阻塞IO


深度截图_选择区域_20201108150955.png

NIO采用多路复用技术,一个多路复用器Selector同时轮训多个Channle。

https://www.cnblogs.com/51try-again/p/11078674.html

三.功能设计

通信框架首先是一个通用的通信框架,它不应该与具体的协议绑定。给予通信框架之上,可以构建私有协议栈和公有协议栈。框架原理图:


深度截图_选择区域_20201108152611.png

四:可靠性设计

通信框架的可靠性设计:关键技术分析

1.链路有效性检测

目前最流行和通用的做法是心跳检测机制,分为三个层面:

2.断连重连机制

客户端检测到链路中断后,为了保证服务端能够有足够的时间释放句柄资源,再首次断连时客户端需要等待INTERVAL时间之后再发起连接,而不是失败之后就立即重连。

3.消息缓存重发

当调用消息发送接口的时候,消息并没有真正的写入SOcket中,而是先放入NIO通信框架的消息队列中,由Reactor线程扫描待发送的消息队列,异步的发送给通信对端。


深度截图_选择区域_20201108154727.png

链路重连成功之后,根据策略,将缓存队列中的消息重新发送给通信对端。
需要指出的是:并非所有的场景都需要通信框架做重发。重发只是一个策略,通信框架应该支持链路级重发策略。

4.资源优雅释放

当系统接收到退出指令后,首先标记系统处于退出状态,不再接受新的消息,然后将积压的消息处理玩,最后调用资源回收接口将资源销毁,最后各线程退出执行。
通常优雅退出有个时间限制,比如30s。如果到达执行时间,仍然没有完成退出钱的操作,则由监控脚本直接kill -9 pid强制退出。

五.性能设计

性能差三宗罪:

上一篇下一篇

猜你喜欢

热点阅读