admin管理员组

文章数量:1534607

在计算机产业发展的 70 年时间里,每一次的 IT 革命,无不带来:更低廉的价格、更完善的功能、更便捷的使用、更广阔的市场!

大数据经过 10 年发展,现在已经到了一个重要的分水岭阶段:通用性和兼容性能力成为大数据发展主流,运行的稳定可靠和使用的简捷、易开发、易维护成为产品发展的驱动力,而这正是 Hadoop/Spark 这类积木式模块框架无法满足的。

本 Chat 讲述这样一个通用大数据系统:系从 0 开始设计研发,从最底层做起,首次将云计算、大数据、数据库、容器、中间件的技术和功能溶为一体。在满足:简单、稳定可靠、易开发、易维护、低成本的同时,在集群规模和数据处理能力上,更是达到惊人的1,000,000级节点、 EB 量级可计算数据(1EB=1,073,741,824GB)、100,000,000次/秒响应规模。目前已是诸多云计算、物联网、超级计算机、人工智能、区块链等大数据应用的基础平台。

讲述内容包括:

  1. 系统架构设计
  2. 网络通信
  3. 数据的组织、结构、存取、调配
  4. 各种场景的分布算法
  5. 体系安全设计
  6. 系统的冗余容错
  7. 人机交互接口
  8. 大数据应用开发(分为系统层和用户层)
  9. 运行测试

本 Chat 的核心要点众多,涉及大数据的理论、技术、产品设计、实践应用,篇幅很长(六、七万字),敬请耐心阅读理解。

摘要

本文阐述一套全功能的通用大数据管理系统。虽然目前市场上已经有各种大数据软件,但是它们无一不是针对某个场景而设计,且缺乏统一标准和兼容性不足,导致用户需要具备足够的专业知识,才有能力去组织搭配不同厂商的产品整合到一起运行。这也是造成后期开发、维护困难,影响运行稳定性,增加使用成本的根本原因。

为此,我们摒弃模块框架思维,提供一种全新方案:在总结大量业务需求和应用案例的基础上,结合软硬件平台特点,从最底层做起,采用体系化、集成化、全功能、一站式的设计思想,将云管理、大数据、数据库、容器、中间件的技术和功能溶为一体。同时满足用户的部署、运行、开发、测试、维护需求,和具备使用的便捷性、安全性和极低的成本。并且在集群规模和数据处理能力上,首次达到1,000,000级节点和 EB 量级(1EB = 1,073,741,8s24GB)可计算数据。使之成为适合全行业、全球用户使用的通用大数据管理系统。

前言

过去七年,我们设计开发了 Laxcus 大数据管理系统。在设计这套产品前,市场上虽然已经有多种数据产品,却没有一家能够提供一套功能完整、适合各行业使用的通用大数据软件,这是我们设计这套系统的初衷。更重要的原因是,随着大数据应用的快速发展,存储计算规模越来越大,以及需求多样性的增加,导致数据处理过程更加复杂和缓慢。如何解决这个问题,在保证效能的前提下,改变大数据应用现状?针对软硬件性能特点,采用架构/功能一体化设计,增加内聚,减少调用层次和处理流程,改进人机界面,提高分布效能,无疑是一个很好的解决思路。但是这个方案也因为体系化和集成化设计的缘故,需要涉及多个技术领域,在当时的技术条件下,设计这种级别的复杂系统,当中有许多不确定因素,在实践中面临着巨大的研发风险。这些风险归纳起来,主要包括以下几个方面:

  1. 对硬件成本和运营成本的考量。
  2. 分布环境下,系统稳定性和可靠性的问题。
  3. 数据业务和处理规模可扩展性、可承载能力、适用性的问题。
  4. 软硬件冗错和处理的问题。
  5. 系统安全的问题。
  6. 人机接口的设计,包括简化开发、管理、操作流程的问题。
  7. 软硬件结合和多平台兼容的问题。
  8. 各个子系统整合和设计指标平衡的问题。

在此后七年时间里,经过我们持续研发和版本升级,上述问题已经全部解决,目前 Laxcus 大数据管理系统的主要特征是:

  1. 系统总体设计成松耦合架构,在此框架下实现数据业务的可定制、可扩展。
  2. 网络通信采用二进制协议,来提高数据传输和处理效率。
  3. 依托多集群并行和弱中心管理为基础,实现超大规模、可伸缩的数据存储和计算。
  4. 引入自适应机制,使集群具备自组织自管理能力,包括数据处理和软硬件故障管理。
  5. 底层数据采用混合存储方案,支持 OLTP 和 OLAP 业务两种业务模式,实现数据即时存取。
  6. 数据处理融入 SQL 思想,兼容数据库,满足高并发和高可靠性两种需求。
  7. 全新设计的分布算法,保证数据处理流程的简捷高效。
  8. 组件化编程,结合容器管理,来减少数据业务的开发和维护难度。
  9. 体系化安全策略,将安全管理纳入系统每一个环节。
  10. 使用类自然语句命令操纵集群,覆盖全部数据处理和管理工作。
  11. 支持全球已知字符集,满足不同国家地区的用户语言使用习惯。

Laxcus 大数据管理系统运行在普通硬件设备上,操作系统涵盖 Linux/Windows,硬件平台包括 X86、ARM、POWER PC、NVIDIA。以下将以2.6版本为基础,结合之前版本,来介绍 Laxcus 大数据管理系统主要的设计、技术、实现,以及发展过程。

图1 Laxcus 大数据管理系统架构。

系统架构

Laxcus 大数据管理系统被设计成松耦合架构。这个松耦合架构可以理解成:为适应复杂分布网络环境,被临时组织起来的工作模型。在这个架构下,所有硬件的设备和软件的模块,以及其上运行的数据处理工作,都被视为一项服务。它们在获得授权许可的条件下,可以自由的加入和退出,以离散、独立、弱依赖的形态存在。其中少量故障不影响系统的整体运行,从而使系统具备极强的稳定性、可靠性、可伸缩、冗余容错的能力。

角色设计和定位

Laxcus 大数据管理系统建立在计算机和网络基础上,通过网络连接管理大量的计算机,形成计算机集群,来组织和实施大规模的数据并行存储和计算工作,这是 Laxcus 大数据管理系统的基本形态。同时,由于计算机集群固有的不稳定特性,需要特别强调软件对分布资源可随机增减的适应性,来弥补计算机集群不稳定造成的损失。这种运行过程中动态波动和需要瞬时感知的特点,完全不同与传统的集中处理模式。这个特点衍生出一系列的新变化,促使我们重新审视产品需要面对的目标和业务需求,并衍生出不同的设计。

以节点为单位的计算集群

在 Laxcus 大数据管理系统的设计里,节点是计算机集群的基本单位。相较与物理性质的计算机来说,节点是一个逻辑概念的单位。以一台实体计算机为例,在它上面可以部署最少一个节点,也可以部署多个节点,共享一台计算机的资源,甚至可以组成一个微型的计算机集群。按照工作属性划分,节点分为四种类型:前端节点、网关节点、工作节点、管理节点。前端节点负责发起任务请求和显示数据处理结果,类似我们通常所说的“客户端”。网关节点将 Laxcus 集群分成内外彼此隔绝的两个部分,它处于“边界”位置。对外,它接受来自前端节点的任务请求;对内,它将前端节点的任务请求转发给集群内部的工作节点处理,同时对外部网部屏蔽集群内部拓扑结构,起着“反向代理服务器和防火墙”的安全作用。在集群的内部运行着工作节点和管理节点。工作节点承接网关节点的任务请求,负责组织和实施具体的数据处理工作。当数据处理工作完成后,将结果返回给边界节点。管理节点在集群里是一个“维护者”的角色,它没有任何实质的数据处理任务,只起到管理和控制集群的作用,包括对下属的网关节点和工作节点的检测和协调。在 Laxcus 集群里,前端节点的部署和维护由是用户来实施,没有特别明确的要求。被大量部署的是工作节点,以及少量的网关节点,和一个管理节点。 Laxcus 大数据管理系统将它们组织起来,来完成许多大规模的数据存储和计算工作。这些大型数据处理工作的工作量,通常是一台或几台计算机不能完成,或者短时间内不能完成的。

超大规模集群

在 Laxcus 大数据管理系统的语义规范里,“域”被定义为计算机集群的单位。在一个计算机集群里,管理节点处于核心地位,负责监督、维护整个集群的运行,它的作用非常重要。管理节点实质也是一台计算机,也受到自身 CPU、内存、网络接口等硬件性能的限制,随着集群内计算机数量的增加,它的管理负荷也在随之升高。因为有这样的限制,在实际部署时,一个集群内的计算机数量是不可能无限增加的。根据我们对多套硬件和数据应用的组合测试显示,当一个集群内的节点数量达到3000至8000这个范围时,会出现管理峰值,超过这个范围,稳定性会大打折扣。但是在实际使用中,用户对数据存储和计算需求总是在持续增加的,这样就产生一个矛盾:如何在保证集群稳定运行的情况下,仍然能够满足用户更大规模存储数据和计算数据需要?多域并行集群就成为这样的一个选择。

Laxcus 的多域并行集群是对现有单域集群的升级和改进。通过把原来多个孤立运行的集群连接起来,在这些集群之上,建立更高一层的管理模型,形成一个两级的管理架构。这个两级架构的集群,在 Laxcus 中被称为“主域集群”,原来的集群成为它下属的子集群,这个集群被称为“子域集群”。子域集群接受主域集群的管理,实时向主域集群汇报自己的运行状态。按照 Laxcus 对集群的设计定义,子域集群需要集中在一个物理环境里,主域集群允许跨地域分散存在。就是说,如果 A 子域集群的机房在北京,B 子域集群的机房在广州,天津机房是 C 主域集群,只要它们之间能够通过网络进行通信,就可以在天津的 C 主域集群管理下协同工作。

通过这样的组合,集群的节点数量获得巨大的提升,极大地拓展了数据存储、计算范围,满足了当前包括未来一段时间内数据处理业务的需要。在跨域测试中,主域集群管理下的计算机节点数量可以达到百万级的规模,数据的存储和计算能力可以达到EB量级。

多用户共享

Laxcus 是多用户系统,支持任意数量的用户同时使用计算机集群。用户通过远程登录的方式接入系统。区分用户身份的唯一标识是账号,账号由用户名和密码组成。在一个系统里,用户名是唯一的,一旦建立不可修改,但允许修改密码。建立账号,包括后续的账号管理工作由系统管理员或者拥有管理员权限的用户来实施。用户在获得管理员的授权后,就拥了建立、管理、操纵数据的权力,可以在自己的数据空间里,执行写入、更新、删除、计算、查询等一系列操作。从这一点来说,用户与数据的关系,更接近博客、推特等网络应用,而与关系数据库中的用户、数据的定义有所区别。在逻辑空间里,系统中的每一个用户和用户持有的数据都是独立的,彼此不存在关联,也不会发生冲突。为了充分发挥多集群并行处理能力,实施大规模并行处理工作,在权限许可的条件下,Laxcus 允许一个账号同时从多个地址登录,执行各种数据操作。

低成本的硬件设备

大数据系统运行依赖于计算机集群。部署计算机集群,需要大量的计算机,以及连接它们网络通信设备,这对所有运营大数据的企业和机构来说,都是一笔庞大的开支。而大数据分布处理和“以多胜强”的特点,更强调运用软件技术和算法所带来的效能,对硬件设备本身并没有太多的要求。所以,低价、性能稳定的硬件设备成为首选。具备这样特点的硬件设备,目前有很多选择,典型如 PC 架构的 X86 系统,还有移动架构的 ARM 系列,Laxcus 都实现了支持。

实际上,但是无论上述哪款系列的计算机,在稳定性和可靠性上都不能和专业服务器相比,发生故障和宕机的可能性比服务器要大得多。针对这个情况,Laxcus 采用了一个简单的办法:冗余和去中心化,来解决这个问题。实现这项功能的要求是 Laxcus 具备实时的节点感知能力,当集群内任何一个节点发生故障,都能很快被 Laxcus 捕获到。在确认故障节点失效后, Laxcus 将执行“隔离”方案,将故障节点从集群中排除,然后从集群中寻找一个新的备用节点,或者通知其它同类型的节点,来分担故障节点的工作。排除故障的处理过程,都会同步通知给集群的维护管理人员。在执行数据处理工作时, Laxcus 要确保每个节点是正常且有效的,才执行数据处理工作。这项措施简单且有效,在多次故障和修复过程中,都验证了这个结论。

弱中心化管理

在 Laxcus 集群里,大量计算机被用来执行数据处理工作,管理节点做为集群的核心,起着监督和协调的作用。如果管理节点的工作内容过多或者复杂,势必将增加管理计算机的工作负荷,降低处理效率,延长处理时间,不能对下级节点的请求及时做出反馈,减弱对集群的监督和协调作用。在此前的几个运行环境,上述情况都分别发生过,是造成系统稳定性变差,影响集群正常运行的重要原因。所以,进一步分散管理节点的工作内容,减少计算开销,降低工作负荷,是提高集群稳定性的主要办法。“弱中心化”思想即由此衍生而来。

鉴于此前的教训,通过对1.x版本的运行统计和评估,在2.0版本中,管理节点的工作被压缩到只有两项内容:监听节点心跳、记录节点元数据。这两项工作由子节点上传,管理节点负责汇总和分析,网络通信量极少,内容简单,计算量非常少,并且只有计算内存里存储和执行,不存在计算瓶颈和计算压力,管理节点的工作负荷因此大幅度减少,从而提高了集群的稳定性。目前因为管理节点问题造成的故障已经基本消失。

负载自适应机制

截止到目前,Laxcus 已经部署到很多应用场景中。这些系统在运营过程中,我们通常不限制用户发出的命令数量,这种忽略经常导致集群的某个节点涌现大量的计算任务,发生超载现象。例如在此前的一次例行检测时,就发现有一个计算节点并行着8000多个计算任务。面对如此庞大的计算压力,如果任由这些现象持续下去而不加以控制,计算机宕机现象随时可能发生。

在1.x版本中,负载控制是由管理节点来监视和协调控制的。在实地运行中显示,这种处理方式虽然达到了协同节点工作和平衡集群负载的目的,但是也存在很多隐忧,主要体现以下几个方面:

  1. 每个节点的负载情况都被反馈到管理节点上,增加了管理节点的数据存储量和计算量,不利于管理节点的弱中心化管理。
  2. 负载的平衡和分配调度依赖于网络通信,当发生大面积超载时,往往也意味着网络中存在大量数据传输,这时的通信成功率会直线下降。实际上为了保证通信成功,就需要进一步加大了管理节点通信量和工作负担,这种情况对管理节点稳定运行有巨大影响。
  3. 负载控制要求实时处理,如果管理节点汇聚了大量任务请求,很难做到实时处理,延时将不可避免发生。同时下属的节点收不到命令,超载会持续下去,宕机的可能性大幅增加。
  4. 整套过载处理机制过于复杂,管理成本颇高,不符合简单化的设计原则。

鉴于以上问题,2.x版本的负载控制,取消了以管理节点为中心的协同处理方式,改为分散到每个节点的自适应调节。这样,当节点在执行计算任务的时候,也监视自己的运行负载。如果发生超载现象,可以立即做出反应,停止分配新的计算任务,或者根据运行任务的权重和资源占用比率,有选择地要求某些任务进入暂停、休眠状态,以达到即时发现即时处理,降低运行负载的目的。原来管理节点承担的平衡运行负载的工作,交给网关节点来协调解决。新的负载处理方式避免了上述1.x版本的问题,同时简化了负载管理的处理流程,提高了运行系统的稳定性。

命名

在 Laxcus 体系里,命名是一组由文字和数字组成的有意义的字符串,是网络设备、分布目录、任务接口、数字数据资源等各种实体资源抽象化的表示,被应用到所有与数据处理有关的环节上。通过命名,系统在运行过程中,屏蔽了许多裸露环节,简化了分布计算方法和计算流程,使复杂的网络运行环境变得简单,同时减少和避免了因为网络拓扑和数据分散可能导致的错误和漏洞。命名只在系统运行过程中产生,被存储到内存里,在节点之间分发,随时间和节点的变动同步发生变化。每个命名在系统中都是唯一的,不允许出现重叠现象。因为命名只应用于系统内部环境,所以它对用户是透明的,注册用户和系统管理员不必在意,也无需了解它的使用、执行情况。

设计命名,对简化系统架构设计,提高系统稳定性、保障系统安全有重要作用。

全语种字符

在2.6版本之前,Laxcus 大数据管理系统只支持中文和英文两种语言的输入和处理。但是随着全球范围内用户的增加,根据用户语言习惯,提供和支持本地字符集,来满足全球用户使用本地文字输入参数和操纵数据处理工作,就显得非常迫切了。所以,2.6版本的一项主要改进工作就是支持全球已知主流字符,在 Laxcus 平台实现各种语言文字的统一输入和处理。

这个修改工作包括两个部分:可视化部分和非可视化部分。可视化部分由 UI 界面和各种字符命令组成,它为用户提供直观的文字输入和显示。非可视化部分承接可视接口的输入,并把数据处理工作贯穿 Laxcus 分布处理的所有层面,最终进入存储层保存。

目前,Laxcus 大数据管理系统已经完整支持不同语言用户在同一个平台的输入和输出,系统会正确识别这些文字,不会产生乱码问题和导致运行错误。

节点的分类

按照设计定义,Laxcus 集群被分为内部和外部两个网络环境。内部网络由集群的所有权人负责实施和管理,为保证集群能够有效可靠运行,需要遵守一系列的集群部署和管理规定。外部网络是用户负责范围,用户可以通过互联网或者 VPN 的方式,远程登录进入集群,通过交互命令传达到集群上,执行数据操作。这样一个布局,可以理解为集群层面的客户机/服务器结构。另外,如果集群没有对外服务的业务,也可以把整个集群部署在内网里,成为一个纯粹的 Intranet 集群。

由于集群这些特点,我们在选择目标硬件设备时,利用集群多节点冗余的属性,和以此为基础研发的分布管理和容纠错技术,使 PC 级的硬件也能很好地运行高端硬件设备才能完成的数据处理工作,并且在价格费用、并行处理规模、可扩展性方面,远超高端设备。这为降低用户运营成本和提高工作效率开辟一条新的通道。

如前所述,节点是 Laxcus 集群的基本单位,由前端节点、网关节点、工作节点、管理节点4类节点组成。理论上,一台物理计算机上可以部署任意多个节点,包括组成一个小型的集群。从节点的工作性质来看,它具有双重身份,即是服务器又是客户机。当它做为服务器使用时,它接受其它节点的命令请求和执行数据处理;当处于客户机状态时,又可以向其它节点发送命令。软件层面上,节点实质是操作系统下的一个进程,在后台运行,通过网络与外界保持联系。在 Laxcus 2.0 版本中,节点共设计有4类11种节点。对每一种节点,我们都详细规定了它的工作内容和处理范围,以下将逐一进行介绍。

图2 Laxcus 大数据集群拓扑结构

Top 节点

Top 是管理节点,在 Laxcus 集群的二级管理构架中,是整个集群的核心,必须保证绝对存在。集群中的其它节点都是 Top 节点的下属节点。按照 Laxcus 集群管理规定,这些节点的工作,必须在 Top 节点启动后启动,在 Top 节点停止前停止。因为 Top 的顶级管理节点身份,它节点只负责最关键的数据资源管理工作,包括用户账号的建立、删除、查询,用户操作权限的授权和回收,数据库资源的分配、释放、检查。Top 有两个直接的下属节点:Home、Aid,Top 要接受它们的注册,以及监测它们的运行状态。由于 Top 节点在集群中的重要性,它的故障将造成整个集群的管理混乱,所以在实际部署时,要求一个 Top 节点在运行的同时,还应该有最少一个 Top 备用节点。为了区分这两类节点,在 Laxcus 集群管理规定里,我们把接受和执行业务处理中的 Top 节点称为 Master 节点,备用的 Top 节点称为 Monitor 节点。Monitor 节点的工作,除了监视 Master 节点运行外,还会同步备份它的数据资源和运行记录。当 Master 节点发生故障失效后,Monitor 节点将启动故障切换过程,接手它的全部管理工作。如果有多个 Monitor 节点,它们会通过协商的方式,在它们中间推举一个 Monitor 节点成为新的 Master 节点。新的 Master 节点会要求原来的下属节点重新注册它的下面,来保证集群继续有效运行,同时新 Master 节点还把故障和切换过程通知集群管理员,由管理员来负责后续的故障计算机检查、维修工作。

因为 Top 节点只负责数据资源管理,以及与 Home、Aid 节点保持少量的通信,所以通常情况下,它的工作负荷很轻。

Home 节点

Home 是管理节点,在 Laxcus 集群二级管理架构中,它是子域集群的核心。对上,向 Top 节点注册,和接受 Top 节点的管理;对下,接受下属节点的注册,以及监督和协调它们的运行。在 Laxcus 集群里,工作节点全部运行在 Home 节点下面,并且弱中心化管理思想也主要体现在 Home 节点上。运行过程中,它只负责两项工作:追踪工作节点运行状态,收集和分析工作节点元数据。这些工作的数据量和产生的计算量都很小,不会对 Home 节点正常运行构成影响。与 Top 节点一样,Home 也要求有一个 Master 节点和最少一个 Monitor 节点。当 Master 节点发生故障时,Monitor 节点可以接替 Master 节点的工作。

Archive 节点

Archive 节点是工作节点,注册到 Top 节点下面,为用户的分布任务组件提供存储、管理、转发服务。在实际使用时,Top 会把它重定向给关联的 Home 节点,再经过 Home 节点结合自己的数据资源进行判断后,分派给自己的下属节点,让它们与 Archive 节点进行数据交互。与 Archive 节点进行直接数据交互的节点有 Data、Work、Build、Call 四种节点,它们将根据自己的业务需要,请求关联的分布任务组件,并把分布任务组件下载下来,部署在自己的节点上,为用户提供分布数据处理。同时,每一个与 Archive 节点执行过成功交互的节点,Archive 节点会记录下它们的信息,当有新的分布任务组件上传后,Archive 节点会把这些新的分布组件,同步推送给这些节点,使得用户在发布分布任务组件后,集群可以立即部署和生效,省却了用户的等待时间。

按照上述流程介绍,实质上,Archive 节点是跨子域集群存在的,我们为 Archive 节点设计了一个 Top/Home/Home 下属节点的三层定向机制,每个 Archive 节点可以为整个集群提供分布任务组件服务,而不必拘泥于某个子域集群的限制。管理员也可以按照自己的需要,设置规则,为不同的用户选择合适的发布空间,提高了管理灵活性。

Log 节点

Log 节点是工作节点,注册到 Home 节点下面。为本集群的其它节点保存它们的日志数据,并提供格式化的日志检索服务。这样的工作内容使得 Log 节点成为 Laxcus 集群里最简单的一个节点。对于上传的日志,Log 节点将根据每个节点的类型和地址,在磁盘上分别建立目录和文件,然后按照时间的格式排列保存下来。在 Laxcus 集群里,各节点上传的日志内容,通常是它们的工作流程和运行错误,这些信息为分布状态下的数据追踪和分析、程序调试、快速定位和判断节点运行故障提供了重要的依据。所以 Log 节点的工作虽然简单,但是非常重要,这也是为什么要单独把日志单独保存并且列为一类节点的原因。

Data节点

Data 节点是工作节点,注册到 Home 节点下面,提供基于磁盘和内存的数据存取服务。在 Laxcus 集群里,Data节点保存着整个集群的数据,是所有数据处理的源头。为了保证正确的数据处理,我们在 Data 节点上,为数据处理设计了一系列的可靠性保证,包括数据完整性、一致性要求,以及各种数据纠错和冗余能力。这些元素的加入,使得 Data 节点的复杂性,远高于集群中的其它节点,它在集群中的重要性,也仅次于 Top、Home 节点。

另外 Data 节点与其它节点不同的是,Data 节点具有“级别”概念,在运行时,被分为主节点(Prime Site)和从节点(Slave Site)两种类型。它们的区别在于,主节点具有“读写”能力,可以执行全部数据操作,包括添加、删除、更新、检索。从节点只拥有“读”的能力,即数据检索操作。这个特点在实际应用中是非常重要的,它为 Laxcus 集群的许多初始指标,如数据冗余、平衡计算、并行处理,提供了基本的保证,成为了 Laxcus 集群实施大规模数据处理的必要条件。

Work 节点

Work 节点是工作节点,注册到 Home 节点下面,提供数据计算服务。在 Laxcus 集群中,Work节点承接来自Data节点的数据,大量重要性高、计算量大的数据处理工作都发生在 Work 节点上,这使得 Work 节点在整个 Laxcus 集群中,成为工作负荷最重的节点,也因此成为体现数据处理效率最关键的一环。

为了获得更高的数据处理效率,在 Laxcus 2.0中,Work 节点通常会把有限的硬件资源集中起来,采用任务队列的手段和快进快出的原则,来解决几个最重要的数据计算工作,从而避免因为无谓的任务空耗硬件资源,而其它需要作业的任务又不能获得工作许可的问题。使得 Work 节点在应对大规模数据处理时,能够充分利用硬件资源,来加快数据计算速度,同时也提高了数据处理效率。

Build 节点

Build 节点是工作节点,注册到 Home 节点,提供 ETL 服务。ETL 是的提取、转换、装载(extract、transform、load)的简称,这个名词很好地描述了一种数据处理过程,是当前许多商业数据应用和互联网数据处理业务的重要组成部分,可以理解为数据计算的前奏和加速器。ETL的核心要旨是把各种数据,按照各自不同的需求,经过重新组织整理后,形成新的数据。这些新的数据,将成为后续数据计算的必要材料。

在许多业务处理中,我们通常是采用 ETL 的方式,把一些数据组合工作从数据计算过程中分离出来,做成一个独立的单元,提前完成,来供后面的数据计算使用,以达到简化数据计算流程的目的。实际上,这种简化的数据计算工作,在很多大规模数据处理业务中使用时,不止是简化了数据处理流程,往往还获得了更高的处理效率。

Call 节点

Call 节点是网关节点,注册到 Home 节点下,提供分布数据管理和任务调度服务。在 Laxcus 集群中,Call节点是一个“中间人”的角色,起到类似路由器的作用。对内,它收集 Data、Work、Build 节点的元数据,并把这些元数据按照各种要求重新组合,保存在内存里。对外,它只接受 Front 节点的注册和命令请求,同时具有对外屏蔽了集群内部拓扑结构的作用,防止可能由外部发起的网络攻击,即使因此发生宕机现象,也可以做到尽量避免波及到集群内部其它节点。当收到 Front 节点的命令后,它将按照命令的要求,为 Front 节点筛选集群内部的数据资源,和定位目标节点。在目标节点完成数据处理后,Call 节点把数据结果返回给 Front 节点,从而完成一次数据处理工作。

与 Archive 节点一样,Call 节点也是可以跨越多个子域集群的。至于是否需要跨越,则由注册的 Front 节点来决定。当 Front 节点需要的数据分别存在于多个子域集群时,那么 Call 节点将自动发生跨越子域集群行为。

Aid 节点

Aid 节点是网关节点,注册到 Top 节点下面,提供账号和账号资源的管理服务。Aid 节点唯一的服务对象是 Front 节点,所有类型的 Front 节点都要首先注册到 Aid 节点下面,才能获得进入集群和操纵数据的权力。Front 节点发出的每一道命令,当通过 Aid 节点审核后,才能交给 Call 节点并转发到集群内部。与 Call 节点一样,Aid 节点也对 Front 节点屏蔽内部网络环境,避免可能的网络攻击行为影响到内部集群运行。Aid 节点这种布局和处理方式,具有分解数据业务负荷和保证集群安全的双重作用。

在 Laxcus 2.0版本中,Aid 节点新增加事务处理能力,这样命令在获得核准前,为了防止命令之间可能存在的事务冲突,Aid 节点给每个命令都增加了事务检查环节。

Front 节点

Front 节点是 Laxcus 集群唯一的前端节点,由用户操作和使用,被要求注册到 Aid 节点下面,为用户提供进入集群和操作集群数据的能力。当 Front 节点成功注册到 Aid 节点后,Front 节点会向 Aid 节点请求关联的 Call 节点地址,然后主动与它们建立联系,来获得执行命令的能力。

在 Laxcus 集群里,Front 节点被分为三种类型:字符界面的控制台、图形界面的终端、没有操作界面的驱动程序。前两种被用户直接使用,分别针对了 Linux 和 Windows 用户的使用习惯。用户在窗口上输入命令后,通过 Aid、Call 这两道网关节点的审查,被发往集群内部处理。后一种是嵌入到其它软件中使用(如 Apache、Tomcat 这类 Web 软件),命令由这些开放接口传递过来,经过 Aid、Call 节点审查通过,发往集群内部处理。Front 节点运行过程中,显示的语言默认与操作系统自动匹配,用户不用做任何设置。

三类 Front 节点允许同时并行存在,每一类又可以同时并发多组命令,所有命令都在 Aid 节点管理下,各自执行自己的数据处理工作,不会发生冲突。至于命令最大并发数,则由集群管理员分配,Aid 节点负责执行。

图3 Front 控制台字符界面

图4 Front 终端图形界面

Watch 节点

Watch 是工作节点,可以选择注册到 Top 或者 Home 节点下面,提供监视主域集群或者子域集群的服务。在 Laxcus 集群里,Watch 节点是唯一完全由集群管理员操纵的节点,它也是 Laxcus 集群另一种拥有图形操作界面的节点,为集群管理员提供可视化的管理工作。集群管理员通过 Watch 节点,能够实时追踪和检查所有节点、所有用户的当前状态。当集群中的节点需要通知管理员,或者感知、捕获到运行故障时,也会通过网络传递给 Watch 节点,Watch 节点将以文字、图像、声音的方式,提醒管理员加予关注,或者要求管理员去排除已经发生的故障。

图5 Watch 节点图形界面

松耦合架构

做为 Laxcus 大数据管理系统最重要的组成部分, Laxcus 架构设计经历了从紧耦合到松耦合的过程。在0.x版本里,我们采用了紧耦合架构。紧耦合架构如下图所示,它的本质是一个客户机/服务器模型,采用同步工作模式。客户机发起请求给服务器,服务器收到,根据请求做出应答,然后反馈给客户机。这种架构最典型的应用就是我们每天都用到的WEB服务。它的优点是简单,设计容易、开发周期短、能够快速投入部署和应用。在 Laxcus 集群的早期运行中,这些特点都得到有力的验证。

图6 紧耦合架构

情况在以后出现了变化。随着 Laxcus 集群规模的不断扩大,业务量的不断增加,尤其是数据计算量、计算时间成倍数的增长后,紧耦合架构渐渐不堪重负,缺点开始不断暴露出来,主要集中在以下几个方面:

  1. 无法支持大规模的计算业务。因为大数据业务对计算机资源占比普遍很大,导致多任务并行能力有限。根据我们在一台 Pentium IV 2.G + 4G 的机器上做的测试,当并行任务量达到100左右的时候,计算机已经发生超载现象。
  2. 无法限制任务载荷,管理设计难度大。由此导致计算机不能控制超载现象,而超载对硬件伤害非常大,会严重降低计算机稳定运行能力和使用寿命。
  3. 网络资源消耗大。紧耦合的本质是同步操作,而同步操作在数据的发送后和返回前,有很大一段时间是空闲的。这种空闲状态下的网络占用,是对网络资源的极大浪费,尤其当使用TCP通信时。
  4. 安全控制力度差。因为服务器直接暴露给客户机,容易引发网络攻击行为。
  5. 程序代码之间关联度过高,不利于模块化和抽象化处理。
  6. 以上现象最终导致系统稳定性变差。

鉴于以上问题,我们重新考虑了系统架构设计,并最终决定将紧耦合架构改为松耦合架构。新架构是原来的客户机/服务器模型之间,加入一层代理服务器(Agent),即把 CS 模型改为 CAS 模型,同时把同步处理模式改为异步处理模式。在新的架构下,客户机的角色不变,代理服务器承担起与客户机通信,和对客户机的识别判断工作,服务器位于代理服务器后面,对客户机来说不可见,它只负责数据处理工作。

在设计松耦合架构的同时,结合新增加的代理服务器这个角色,我们又设计了一套名为:“Invoke/Produce”的任务调度模型。它针对数据处理工作实施异步的抽象化处理和分组分级管理。原来的数据处理和业务逻辑套用这套机制后,程序代码基本不用修改,转移到CAS模型上运行就可以了。

图7 松耦合架构

松耦合架构设计和代码修改完成后,我们在原来的集群上,和紧耦合架构做了各种对比测试。其结果是不仅解决了紧耦合架构上存在的所有问题,而且其中很多技术指标还超出了我们的预估,主要表现以下一些方面:

  1. 多任务并行处理能力获得极大提升。同样是上述的数据处理,紧耦合架构只能支持最大约100多个并行,在松耦合架构上增加到10倍。
  2. 同步实现了负载自适应机制,避免了超载现象。
  3. 对运行任务实现了随机调度和随机控制,进一步避免了持续超载现象。
  4. 基本杜绝了网络攻击行为。由于代理服务器的隔绝和筛查作用,同时结合其它安全管理手段,外部攻击在代理服务器处就被识别和过滤掉了,保护了后面的服务器不受影响。
  5. Invoke/Produce 机制改进了程序的模块化和抽象化,有利实现更复杂的数据处理。
  6. 异步处理减少了网络资源消耗和操作关联。
  7. 综合以上措施,它们共同增强了系统稳定性。

以下我们用一张表格,来对两种架构的性能和特点做个比较总结:

紧耦合架构 松耦合架构
工作方式 同步 异步
业务逻辑关系 集中控制 分散控制
代码关联依赖
设计开发难度 容易 复杂
响应能力 略低于紧耦合架构
时效表现 实时 延时

本文标签: 全功能数据系统