标签:
Laxcus大数据管理系统网络建立在TCP/IP网络之上,从2.0版本开始,同时支持IPv4和IPv6两种网络地址。网络通信是Laxcus体系里最基础和重要的一环,为了能够利用有限的网络资源,获得最大化的使用效率,我们根据大数据网络环境的特点,设计了一套专属网络通信协议,以及在此协议基础上实现的多套网络通信方案,它们共同组成了Laxcus集群的网络通信基础。本章将以TCP/IP协议为起点,介绍与网络通信有关的各个组成部分。
Laxcus采用FIXP协议通信。FIXP协议全称是“自由信息交换协议(Free Information eXchange Protocol)”协议。这是一套建立在TCP/IP协议之上的二进制应用层通信协议,二进制字序采用小头编码(Little Endian),协议具有平台独立、上下文无关、结构简单、数据尺寸小等特点。
如图6.1所示,协议结构布局按排列顺序由三部分组成:命令、消息、数据实体。命令分为两种:请求和应答,命令的作用是说明本次通信的基本属性。每次通信由发起方发送请求命令,受理方返回应答命令。消息在命令之后出现,消息在一次通信协议中允许出现任意多个,消息中携带本次通信需要的多类附属信息。消息之间是衔接的,彼此无分隔标记,通过消息头中的标记长度加以区别。在最后面是数据实体部分,数据实体包含本次通信所要传递的内容。这些内容可以是任意格式的,如音频、图像、数据库数据、各种元数据等。数据实体是一个可选部分,是否存在会在消息中注明。比如通信发起方通常是不需要传递数据实体的。
图6.1 FIXP协议结构
如图6.2,命令是一个56位(7字节)的数字序列。第一个8位的标识的作用是区分当前是请求命令或者应答命令。之后的协议版本号占用16位,协议版本号是可变的,不同的协议版本号代表不同的协议格式,在应用中分别有不同的解释。目前协议的最新版本号是256(0x100)。 命令的主要区别在第24至40位,请求命令需要提供两个8位的主命令和从命令,说明本次操作的作用目标,应答命令返回一个16位的应答码,确认本次请求是接受、还是因为其它原因拒绝。最后是16位的消息成员数,理论上,一次FIXP通信最多可以携带65535个消息。
图6.2 命令(请求/应答)结构
如图6.3,消息是一个不定长的数据结构,由键、类型、参数长度、参数组成。键占用16位,每个键都有一个固定的定义,键理论上有65536个,目前已经使用了大约100个。类型占用4位,说明后续的参数属性,包括布尔、短整数、整型、长整型,单浮点、双浮点、二进制数组、字符串、压缩二进制数组、压缩字符串。参数长度是一个12位的值,参数的实际尺寸由参数长度说明。需要特别指出的是,数值型参数具有字长压缩能力,例如一个整型数0x20,按照计算机字长标准需要占用4个字节,但是实际尺寸只有1个字节。这时参数长度会说明为1,忽略前面3个0。如本章开篇所述,数值型参数遵循小字头格式(Little Endian)。
图6.3 消息结构
我们在FIXP协议基础上提供了四种通信方案。这些通信方案将根据所在环境条件和任务的不同需求,实现有区别的通信,以达到节约网络流量,降低运行负载,提高计算效率的目的。
TCP通信建立在TCP/IP协议的TCP堆栈之上,主要用来处理持续性高的、流量大的数据传输。如数据块的分发,以及Diffuse/Converge分布计算传递的数据等。在Laxcus集群中,它们是主要的通信流量,占用了大量的网络带宽,严重的时候会发生网络阻塞,影响到集群正常运行。为了避免这种现象,TCP通信会受到流量控制机制的限制,通过采用降低数据传输流量的办法,腾出一部分网络带宽,来保证其它通信业务的数据传输和集群的稳定运行。
UDP通信建立在TCP/IP协议的UDP堆栈之上,主要针对于非持续、可靠性不高、流量小的数据传输。在Laxcus集群中,基于UDP传输的FIXP协议包,数据尺寸普遍介于20至300字节之间,小于一个IP包的最大传输单元(MTU),其中以网络监控包为主,测试节点状态的心跳包是最常用一种。目前UDP通信是Laxcus集群使用频率最高的通信方案。
UDP的优点在于对计算机的资源占用率低,缺点是数据通信不稳定,存在丢包现象。TCP恰恰相反,可以提供稳定的数据通信通道,但是对TCP/IP堆栈的资源占用率高。在Laxcus集群里,存在着大量即需要保持稳定通信,又希望采用UDP的网络通信业务。如何在拥有二者优点的情况下又避免它们的缺点,答案就是“KEEP UDP(可持续的包通信)”。KEEP UDP是我们在TCP和UDP之间,为Laxcus集群网络通信设计的一种过渡方案,通过在UDP基础上模拟TCP通信过程,为UDP数据提供稳定的通信保证。这个方案的实质就是将原来在TCP/IP堆栈上进行的包的分组和重组的工作,转移到Laxcus控制的工作线程上去执行。在减轻TCP/IP堆栈压力的同时,还能够根据当时需求,自由定义一些对包的特殊规则。目前KEEP UDP主要用来执行RPC处理和传输网络日志,这些都是数据流量不大但是要求可靠传输的通信业务。
RPC(远程进程调用)的出现由来以久,是一种非常优秀的网络通信方案,至今仍在被广泛使用。它通过隐藏网络两端通信的方式,使网络上两台计算机之间进行的网络调用类似本地API调用的过程。这样就极大地简化了程序员对网络编程的难度,提高了工作效率,减少了出错的机会。
Laxcus包含了对RPC的实现,它的通信建立在TCP和KEEP UDP通信基础之上,通过在本地嵌入接口和对程序员屏蔽网络流程,实现RPC调用处理。目前Laxcus集群里许多复杂的、安全度高的网络通信都是采用 RPC方案执行。
集群运行过程中,发生的很多故障都与网络和网络设备有关。根据统计,这些故障大致包括:线路损坏、插口松动、电磁影响、网络阻塞、网络设备损坏。其中有些是硬件故障,有些是暂时性的网络故障。判断故障的有效手段是通过发送ICMP包来检测网络可达。这项测试可以由单机处理,必要时需要多个节点对一个地址共同测试,然后汇总测试结果得出答案。系统将判断故障是暂时性的网络问题或是不可恢复的物理故障。如果问题严重,将报告给系统管理员,通过人工处理来解决故障问题。通信检测在所有节点都会执行,是体现集群弱中心化和自维持能力的必要手段。
如1.3节所述,通信服务器是节点管理下的一个工作模块,采用FIXP协议通信。通信服务器在启动时分别绑定TCP/UDP两个模式的监听套接字(SOCKET),套接字参数在配置文件中定义。根据系统的规定,工作节点的套接字地址在启动时由系统随机选择,管理节点的套接字必须有固定的IP地址和端口。因为只有管理节点的地址固定,工作节点才能够在网络上找到管理节点。通信服务器不主动发起通信工作,只接收外部发来的命令。在收到命令后,分派给下属的任务线程完成具体的任务处理。通信服务器还承担网络通信安全的职能,确保通信过程中,网络两端传输的数据是正确和可信任的。通信服务器的安全管理是一个可选项,是否使用由用户决定,在配置文件中设置。
在网络通信过程中,为了能够辨别各节点之间数据处理的先后顺序,需要一个统一的参数来标识它们当时所处的位置。这个参数被称为全局时间,也称为主时钟或者时间轴。全局时间以集群中Top Master状态节点的操作系统时间为标准,其它所有节点必须遵从这个时间定义,与Top Master节点保持一致。全局时间在节点启动时向所属上级管理节点申请和获取,在本地操作系统上设置,误差要求不超过1秒。全局时间目前已经使用在网络日志、网络计算,以及主块冲突、数据冗灾处理中。
在造成集群运行不稳定的因素中,有相当大一部分原因是网络传输流量过大所致,如果可以控制每项数据业务的通信流量,让它们以公平和合理的速率传输数据,对于改善集群运行的不稳定状况,将有很大促进作用。Laxcus采用“等/停传输机制”来控制每项工作的网络传输速率,这是一项TCP/IP应用层的技术,是“Invoke/Produce”任务调度模型的一部分,具有实时判断网络流量和错误重传的能力。可以根据当时的网络状况,选择合适的传输速率去传输数据,如果丢包率增加,表明当前网络负载过重,就会延迟数据发送间隔。流量控制对上层是透明的,不用对它做任何管理控制措施。目前Laxcus集群所有数据处理业务中,网络通信都默认使用“等/停传输机制”。根据我们对各种数据流量的检测显示,当网络通信启用“等/停传输机制”后,网络传输速率是未启用前的70% - 84%左右,但是网络在面对重负载的数据通信时,它的适应能力增强了。所以,总体而言,这对提高系统稳定性是有利的。
标签:
原文地址:http://blog.csdn.net/laxcus/article/details/51225770