通讯层

<< Click to Display Table of Contents >>

当前位置:  数据集市 > 数据集市特性 

通讯层

Previous pageReturn to chapter overviewNext page

数据集市的通讯层采用可复用异步的方式。它有这样一些特点:

异步:当数据可用时,以消息通知机制与 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 版本对这一问题进行了完美的解决,在前端出现网络短暂中断问题导致请求失败后,会自动重新发送请求获取期望的结果,在增加产品稳定性的同时也提升了用户体验和满意度。