<< Click to Display Table of Contents >> 通讯层 |
数据集市的通讯层采用可复用异步的方式。它有这样一些特点:
异步:当数据可用时,以消息通知机制与 Socket 底层交互,通讯层以异步模式工作。
可复用:由于通讯层是异步模式,多个任务可以共享通讯线程。系统的开销更小,效率更高。
锁定内存:由于通讯层需要收发大量的数据,不合理的内存管理,将严重影响整个系统的性能,或者导致不稳定。通讯层锁定了内存,一旦 Node 之间建立好连接,将不再有内存的申请和归还。
多路:Node 之间的连接按需管理,只要不超过设定的最大连接数。
❖通讯层协议
可复用多路异步通讯协议。该协议已经在引言中描述了。
文件传输协议。由于文件比较大,采用异步传输模式并不是最高效的。系统实现了一种通讯协议来专门传输文件。这种文件传输协议是同步的,而不是异步的。
❖相关的 Node
整个系统,参与通讯的 Node 有以下一些类型:
Naming Node:存储数据集市系统的元数据。
Map Node:存储一部分 Map 数据的元数据和物理数据,并执行 Map 任务。
Reduce Node:存储一部分 Reduce 数据的元数据和物理数据,并执行 Reduce 任务。
Client Node:发起对数据集市系统的访问。
其中,传输文件时采用文件传输协议,而其它信息交互采用可复用多路异步通讯协议。
❖相关的 Properties
•Global Properties
这些 Properties 是所有 Node 共享的。
dc.cache.max=5242880
<Optional> 定义最大的内存 Buffer,超过这么多的数据被读入 / 写出,将发起至少一次物理读入 / 写出。
dc.io.timeout=15000
<Optional> 定义两个 Node 之间通讯的最大等待时间。
dc.io.block=131072
<Optional> 定义 Socket 读写的 Buffer 大小。
dc.io.sport=5083
定义各个 Node 之间通讯的端口。
dc.io.fport=5066
定义各个 Node 之间传输文件的端口。文件传输主要从 Client Node 传往 Map/Reduce Node,或者发生在 Map/Reduce Node 之间。
dc.io.channel.expire.time=0
<Optional> 定义两个 Node 之间通信连接的过期时间,默认为 0,不过期。
•Local Properties
这些 Properties 每个 Node 可以自定义。
dc.io.handlers=1
<Optional> 定义处理 IO 通讯的线程数。一般情况下,一个线程足够了。
dc.io.channels=2
<Optional> 定义与其它 Node 通讯时,最大 Socket 连接数。
dc.io.ip=
<Optional> 定义本机的 IP,尤其在多网卡的时候。如果未定义,将试着从操作系统得出 IP。
❖Pin 机制
为了避免未经验证的 Node 加入到云系统中窃取信息,系统采取 Pin 机制来加强通讯的安全性。
这里的 Pin 是一个 Global-wise 的 Property,如果它存在,两个 Node 之间的通讯首先需要验证 Pin,如果 Pin 验证失败,将拒绝通讯。
❖通信缓冲区动态扩张
由于系统限制了传输数据的上限,所以在传输较大数据时容易导致超出缓冲区(buffer)的大小,而这个过程中需要传输计算数据,因此会造成执行效率较慢的问题,因此产品对传输数据过程中 buffer 不够的情况进行了优化,使系统能够动态的调整通讯过程中缓冲区的大小,以此来减小传输过程中的数据量,提高通信效率。
❖New RPC 梳理实现
数据集市中,通过 RPC 调用远程方法,如果遇到通信出错的问题,相关的任务可能会等待很久然后发生 timeout 超时的情况,如果这个查询是一个基础查询,那么所有依赖这个基础查询的任务都要等待。
为了提升稳定性,产品重新设计了 RPC 通讯机制,通过重复发送 CProc 来降低系统的响应延迟。假如单次通信故障,那么可以连续发送 3 次 CProc 来保持连接,只要有一次返回就算通讯成功。
通过这种机制可以更加稳定的检查作业的状态,减少作业等待时间并及早反馈结果。
•相关属性配置:
以下属性配置在global_bi.properties中,配置的值都是系统默认值,可根据使用情况来决定是否进行调整,一般使用默认值即可。
属性 |
说明 |
---|---|
rpc.repeat=true |
定义控制重复发生CProc的开关 |
repeat.max.times=3 |
重复发送CProc的最大重发次数 |
repeat.period.quick=5000 |
Audit查询重发间隔 |
repeat.period.moderate=10000 |
集市聚合查询重发间隔 |
repeat.period.slow=30000 |
集市明细查询重发间隔 |
repeat.error.ignore=false |
是否忽略重发过程中返回的错误 |
❖网络短暂中断处理
在使用产品时,如果遇到网络不好的情况会出现网络短暂中断,导致请求出错,影响用户体验。
7.0 版本对这一问题进行了完美的解决,在前端出现网络短暂中断问题导致请求失败后,会自动重新发送请求获取期望的结果,在增加产品稳定性的同时也提升了用户体验和满意度。