LAXCUS 大数据集群操作系统:一个分布式分时共享 E 级系统软件(二)
第一章系统架构
Laxcus 大数据集群操作系统被设计成松耦合架构。这个松耦合架构可以理解成:为适应不稳定的网络环境,被临时组织起来和动态调配的工作模型。在这个架构下,所有硬件设备和软件模块,以及其上运行的分布式应用软件和分布处理业务,都被视为服务。它们在获得授权的情况下,可以自由的加入和退出,以离散、独立、弱依赖的形态存在。其中部分故障不影响系统的整体运行和用户使用,从而使系统具备极强的稳定性、可靠性、可伸缩、冗余容错的能力。
1.1 角色设计和定位
Laxcus 大数据集群操作系统建立在计算机和网络基础上,通过网络连接管理大量的计算机,形成计算机集群,来组织和实施大规模的数据并行存储和计算工作,这是 Laxcus 大数据集群操作系统的基本形态。同时,由于计算机集群固有的不稳定特性,需要特别强调软件对分布资源可随机增减的适应性,来弥补计算机集群不稳定造成的损失。这种运行过程中动态波动和需要瞬时感知的特点,完全不同与传统的集中处理模式。这个特点衍生出一系列的新变化,促使我们重新审视业务需求,确定产品定位,并衍生出不同的设计。
1.1.1 以节点为单位的计算集群
在 Laxcus 大数据集群操作系统的设计里,节点是计算机集群的基本单位。相较与物理性质的计算机来说,节点是一个逻辑概念的单位。以一台实体计算机为例,在它上面可以部署最少一个节点,也可以部署多个节点,共享一台计算机的资源,甚至可以组成一个微型的大数据集群。按照工作属性划分,节点分为六个类型:用户节点、网关节点、工作节点、日志节点、监视节点、管理节点。用户节点负责发起任务请求和显示数据处理结果,类似我们通常所说的“客户端”。网关节点将 Laxcus 大数据集群分成内外彼此隔绝的两个部分,它处于“边界”位置。对外,它接受来自用户节点的任务请求;对内,它将用户节点的任务请求转发给集群内部的节点处理,同时对外部网部屏蔽集群内部拓扑结构,起着“反向代理服务器和防火墙”的安全作用。在集群的内部运行着工作节点和管理节点。工作节点承接网关节点的任务请求,负责组织和实施具体的数据处理工作。当数据处理工作完成后,将结果返回给网关节点。管理节点在集群里是一个“维护者”的角色,它没有任何实质的数据处理任务,只起到管理和控制集群的作用,包括对下属的网关节点和工作节点的检测和协调。在 Laxcus 大数据集群里,用户节点的部署和维护由是用户来实施,没有特别明确的要求。被大量部署的是工作节点,以及少量的网关节点、日志节点、监视节点,和一个管理节点。Laxcus 大数据集群操作系统将它们组织起来,来完成许多大规模的数据存储和计算工作。这些大型数据处理工作的工作量,通常是一台或几台计算机不能完成,或者短时间内不能完成的。
1.1.2 超大规模集群
在 Laxcus 大数据集群操作系统的语义规范里,“域”被定义为计算机集群的单位。一个计算机集群里,管理节点处于核心地位,负责监督、维护整个集群的运行,它的作用非常重要。管理节点实质也是一台计算机,也受到自身 CPU、内存、网络接口等硬件性能的限制,随着集群内计算机数量的增加,它的管理负荷也在随之升高。因为有这样的限制,在实际部署时,一个集群内的计算机数量是不可能无限增加的。根据我们对多种硬件和应用的组合测试显示,当一个集群内的节点数量达到 3000 至 8000 这个范围时,会出现管理峰值,超过这个范围,稳定性会大打折扣。但是在实际使用中,用户对数据存储和计算需求总是在持续增加的,这样就产生一个矛盾:如何在保证集群稳定运行的情况下,仍然能够满足用户更大规模存储数据和计算数据需要?多域并行集群就成为这样的一个选择。
Laxcus 的多域并行集群是对现有单域集群的升级和改进。通过把原来多个孤立运行的集群连接起来,在这些集群之上,建立更高一层的管理模型,形成一个两级的管理架构。这个两级架构的集群,在 Laxcus 中被称为“主域集群”,原来的集群成为它下属的子集群,这个集群被称为“子域集群”。子域集群接受主域集群的管理,实时向主域集群汇报自己的运行状态。按照 Laxcus 对集群的设计定义,子域集群需要集中在一个物理环境里,主域集群允许跨地域分散存在。就是说,如果 A 子域集群的机房在北京,B 子域集群的机房在广州,天津机房是 C 主域集群,只要它们之间能够通过网络进行通信,就可以在天津的 C 主域集群管理下协同工作。
通过这样的组合,集群的节点数量获得巨大的提升,极大地拓展了数据存储和计算能力,满足了当前包括未来相当长一段时间内数据处理的需要。在我们组织的跨域测试中,主域集群管理下的计算机节点数量可以达到数百万级的规模,数据的存储和计算能力实现到 EB 量级。
1.1.3 多用户共享
Laxcus 是多用户系统,支持任意数量的用户同时使用计算机集群。用户通过远程登录的方式接入系统。区分用户身份的唯一标识是账号,账号由用户名和密码组成。在一个系统里,用户名是唯一的,一旦建立不可修改,但允许修改密码。建立账号,包括后续的账号管理工作由系统管理员或者拥有管理员权限的用户来实施。用户在获得管理员的授权后,就拥了建立、管理、操纵数据的权力,可以在自己的数据空间里,执行写入、更新、删除、计算、查询等一系列操作。从这一点来说,用户与数据的关系,更接近博客、推特等网络应用,而与关系数据库中的用户、数据的定义有所区别。在逻辑空间里,系统中的每一个用户和用户持有的数据都是独立的,彼此不存在关联,也不会发生冲突。为了充分发挥多集群并行处理能力,实施大规模并行处理工作,在权限许可的条件下,Laxcus 允许一个账号同时从多个地址登录,执行各种数据操作。
1.1.4 低成本的硬件设备
大数据系统运行依赖于计算机集群。部署计算机集群,需要大量的计算机,以及连接它们网络通信设备,这对所有运营大数据的企业和机构来说,都是一笔庞大的开支。而大数据分布处理和“以多胜强”的特点,更强调运用软件技术和算法所带来的效能,对硬件设备本身并没有太多的要求。所以,低价、性能稳定的硬件设备成为首选。
具备这样特点的硬件设备,目前有很多选择,典型如 PC 架构的 X86 系统,还有移动架构的 Arm 系列,Laxcus 都实现了支持。
实际上,但是无论上述哪款系列的计算机,在稳定性和可靠性上都不能和专业服务器相比,发生故障和宕机的可能性比服务器要大得多。针对这个情况,Laxcus 采用了一个简单的办法:冗余和去中心化,来解决这个问题。实现这项功能的要求是 Laxcus 具备实时的节点感知能力,当集群内任何一个节点发生故障,都能很快被 Laxcus 捕获到。在确认故障节点失效后,Laxcus 将执行“隔离”方案,将故障节点从集群中排除,然后从集群中寻找一个新的备用节点,或者通知其它同类型的节点,来分担故障节点的工作。排除故障的处理过程,会实时通知给集群的维护管理人员。在执行数据处理工作时,Laxcus 要确保每个节点是正常且有效的,才执行数据处理工作。
这项措施简单且有效,在多次故障和修复过程中,都验证了这个结论。
1.1.5 弱中心化管理
在 Laxcus 大数据集群里,大量计算机被用来执行数据处理工作,管理节点做为集群的核心,起着监督和协调的作用。如果管理节点的工作内容过多或者复杂,势必将增加管理计算机的工作负荷,降低处理效率,延长处理时间,不能对下级节点的请求及时做出反馈,减弱对集群的监督和协调作用。在此前的几个运行环境,上述情况都分别发生过,是造成系统稳定性变差,影响集群正常运行的重要原因。所以,进一步分散管理节点的工作内容,减少计算开销,降低工作负荷,是提高集群稳定性的主要办法。“弱中心化”思想即由此衍生而来。
鉴于此前的教训,通过对 1.x 版本的运行统计和评估,在 2.0 版本中,管理节点的工作被压缩到只有两项内容:监听节点心跳、记录节点元数据。这两项工作由子节点上传,管理节点负责汇总和分析,网络通信量极少,内容简单,计算量非常少,并且只有计算内存里存储和执行,不存在计算瓶颈和计算压力,管理节点的工作负荷因此大幅度减少,从而提高了集群的稳定性。目前因为管理节点问题造成的故障已经基本消失。
1.1.6 负载自适应机制
截止到目前,Laxcus 大数据集群操作系统已经部署到很多应用场景中。这些系统在运营过程中,我们通常不限制用户发出的命令数量。这种忽略经常导致集群的某个节点涌现大量的计算任务,发生超载现象。例如在此前的一次例行检测时,就发现有一个计算节点并行着 8000 多个计算任务。面对如此庞大的计算压力,如果任由这些现象持续下去而不加以控制,计算机宕机现象随时可能发生。
在 1.x 版本中,负载控制是由管理节点来监视和协调控制的。在实地运行中显示,这种处理方式虽然达到了协同节点工作和平衡集群负载的目的,但是也存在很多隐忧,主要体现以下几个方面:
1.每个节点的负载情况都被反馈到管理节点上,增加了管理节点的数据存储量和计算量,不利于管理节点的弱中心化管理。
2.负载的平衡和分配调度依赖于网络通信,当发生大面积超载时,往往也意味着网络中存在大量数据传输,这时的通信成功率会直线下降。实际上为了保证通信成功,就需要进一步加大了管理节点通信量和工作负担,这种情况对管理节点稳定运行有巨大影响。
3.负载控制要求实时处理,如果管理节点汇聚了大量任务请求,很难做到实时处理,延时将不可避免发生。同时下属的节点收不到命令,超载会持续下去,宕机的可能性大幅增加。
4.整套过载处理机制过于复杂,管理成本颇高,不符合简单化的设计原则。
鉴于以上问题,2.x 版本的负载控制,取消了以管理节点为中心的协同处理方式,改为分散到每个节点的自适应调节。这样,当节点在执行计算任务的时候,也监视自己的运行负载。如果发生超载现象,可以立即做出反应,停止分配新的计算任务,或者根据运行任务的权重和资源占用比率,有选择地暂停某些任务,或者强制要求进入休眠状态,以达到即时发现即时处理,降低运行负载的目的。原来管理节点承担的平衡运行负载的工作,交给网关节点来协调解决。新的负载处理方式避免了上述 1.x 版本的问题,同时简化了负载管理的处理流程,提高了运行系统的稳定性。
1.1.7 命名
在 Laxcus 体系里,命名是一组由文字、数字、符号组成的有意义的字符串,是网络设备、分布目录、任务接口、数字数据资源等各种实体资源抽象化的表示,被应用到所有与数据处理有关的环节上。通过命名,使系统在运行过程中,屏蔽了许多裸露环节,简化了分布计算方法和计算流程,使复杂的网络运行环境变得简单,同时减少和避免了因为网络拓扑和数据分散可能导致的错误和漏洞。命名只在系统运行过程中产生,被保存到内存里,在节点之间分发,随时间和节点的变动同步发生变化。每个命名在系统中都是唯一的,不允许出现重叠现象。因为命名只应用于系统内部环境,所以它对用户是透明的,普通的注册用户和系统管理员不必在意,也无需了解它的使用、执行情况。
设计命名,对简化系统架构设计,提高系统稳定性、保障系统安全有重要作用。
1.2.8 全语种字符
在 2.6 版本之前,Laxcus 大数据集群操作系统只支持中文和英文两种语言的输入和处理。但是随着全球范围内用户的增加,根据用户语言习惯,提供和支持本地字符集,来满足全球用户使用本地文字输入参数和操纵数据处理工作,就显得非常迫切了。所以,2.6 版本的一项主要改进工作就是支持全球已知主流字符,并在 Laxcus 大数据平台实现各种语言文字的统一输入和处理。
这个修改工作包括两个部分:可视化部分和非可视化部分。可视化部分由 UI 界面和各种字符命令组成,它为用户提供直观的文字输入和显示。非可视化部分承接可视接口的输入,并把数据处理工作贯穿 Laxcus 分布处理的所有层面,最终进入存储层保存。
目前,Laxcus 大数据集群操作系统已经完整支持不同语言用户在同一个平台的输入和输出,系统会正确识别这些文字,不会产生乱码问题和导致运行错误。
1.2 系统设计
按照设计的规定,Laxcus 大数据集群被分为内外两个网络环境。内部网络由集群的所有权人负责实施和管理,为保证系统能够有效可靠运行,需要遵守一系列的集群部署和管理规定。外部网络是用户负责范围,用户可以通过互联网或者 VPN 的方式,远程登录进入集群,通过交互命令传达到集群上,执行数据操作。这样一个布局,可以理解为集群层面的客户机/服务器结构。另外,如果集群没有对外服务的业务,也可以把整个集群部署在内网里,成为一个纯粹的 Intranet 集群。
由于集群这些特点,我们在选择目标硬件设备时,利用集群多节点冗余的属性,和以此为基础研发的分布管理和容纠错技术,使 PC 级的硬件也能很好地运行高端硬件设备才能完成的数据处理工作,并且在价格费用、并行处理规模、可扩展性方面,远超高端设备。这为降低用户运营成本和提高工作效率开辟一条新的通道。
如前所述,节点是 Laxcus 大数据集群操作系统的基本单位,集群由节点构成,节点分为用户节点、网关节点、工作节点、日志节点、监视节点、管理节点 6 个类型。理论上,一台物理计算机可以部署任意多个节点,包括组成一个微型集群。从节点的工作性质来看,它具有双重身份,即是服务器又是客户机。当它做为服务器使用时,它接受其它节点的命令请求和执行数据处理;当处于客户机状态时,又可以向其它节点发送命令。软件层面上,节点实质是操作系统下的一个进程,在后台运行,通过网络与外界保持联系。
为了支持不断增涨的在线用户数量,我们在新的 Laxcus 大数据集群操作系统 3.0 版本中,重新规化了集群和节点的设计。这使得集群和节点的分工更为明确、资源配比更为合理,工作负载更为均衡。
我们在 3.0 版本的 Laxcus 大数据集群操作系统里,设计了 Top、Bank、Home 三类集群。其中 Top 属于主域集群,负责整个系统的运行检测管理工作。在运行环境里,Top 集群有且必须只有一个。Bank 和 Home 是子域集群,运行在 Top 集群里,接受 Top 集群的监督管理。Bank 集群被设计成负责用户账号、分布式应用、在线用户的管理和资源分配工作,Home 集群负责数据存储和计算工作。Bank 集群需要保证一个稳定存在,Home 集群允许任意多个,且支持跨地域存在。它们以分布协同的方式,共同组织实施多用户状态下,大规模和超大规模的数据存储和计算工作。
节点的工作是将所属集群的处理进一步细化,分散和分配到具体的物理位置。其首要职责就是使分配的资源和数据的处理管理工作总是处于一个相对均衡的状态,来实现系统稳定运行的目的。以下我们将参照 Laxcus 大数据集群操作系统 3.0 版本,对系统的 6 类 14 种节点的工作内容和处理范围,逐一进行介绍。
图 1.2.1 Laxcus 大数据集群拓扑结构
1.2.1 Top 节点
Top 是管理节点,在 Laxcus 大数据集群操作系统多层管理构架中,是整个集群的核心,必须保证绝对存在。集群中的其它节点都是 Top 节点的下属节点。按照 Laxcus 大数据集群管理规定,这些节点的工作,必须在 Top 节点启动后启动,在 Top 节点停止前停止。因为 Top 的顶级管理节点身份,它只负责下属节点的监视管理,以及必要数据的存储转发工作。Top 有两个直接的下属节点:Home 节点和 Bank 节点。Top 接受它们的注册,和监测它们的运行状态。由于 Top 节点在集群中的重要性,它的故障将造成整个集群的管理混乱,所以在实际部署时,要求一个 Top 节点在运行的同时,还应该有最少一个 Top 备用节点。为了区分这两类节点,在 Laxcus 大数据集群管理规定里,我们把接受和执行业务处理中的 Top 节点称为 Master 节点,备用的 Top 节点称为 Monitor 节点。Monitor 节点的工作,除了监视 Master 节点运行外,还会同步备份它的数据资源和运行记录。当 Master 节点发生故障失效后,Monitor 节点将启动故障切换过程,接手它的全部管理工作。如果有多个 Monitor 节点,它们会通过协商的方式,在它们中间推举一个 Monitor 节点成为新的 Master 节点。新的 Master 节点会要求原来的下属节点重新注册它的下面,来保证集群继续有效运行,同时新 Master 节点还把故障和切换过程通知集群管理员,由管理员来负责后续的故障计算机检查、维修工作。
因为 Top 节点只负责数据资源管理,与 Home、Bank 节点保持少量的通信,所以通常情况下,它的工作负荷很轻。这种核心节点的低负载设计,减少了高负责可能产生的硬件故障,延长了计算机的使用寿命,是促成系统可以长期稳定运行的一个主要因素。
1.2.2 Bank 节点
Bank 是管理节点。在 Laxcus 大数据集群操作系统多层管理构架中,它负责用户资源和在线用户的管理工作。对上,它向 Top 节点注册,接受 Top 节点管理;对下,接受下属节点注册,监督协调它们运行。通过 Top 节点,Bank 节点定时与 Home 节点保持沟通,实时感知系统运行状态,并对必要的资源管理工作做出反应。与 Top 节点一样,Bank 节点也分为 Master 节点和 Monitor 节点。Monitor 在 Master 节点发生故障后,下属的 Monitor 节点之间通过协商,选举其中一个节点,成为新的 Master 节点,取代旧 Master 节点的工作。
1.2.3 Home 节点
Home 是管理节点,在 Laxcus 大数据集群操作系统多层管理构架中,它负责大数据存储和计算的管理工作,是所有数据存储计算节点的核心。对上向 Top 节点注册,和接受 Top 节点的管理;对下,接受存储计算节点的注册。运行过程中,Home 节点实际只负责两项工作:追踪下属节点的运行状态,收集和分析它们的元数据。这些工作产生的数据和计算量都很小,不会对 Home 节点正常运行构成影响。与 Top 节点一样,Home 也要求有一个 Master 节点和最少一个 Monitor 节点。当 Master 节点发生故障时,Monitor 节点可以接替 Master 节点的工作。
1.2.4 Entrance 节点
Entrance 节点是 Bank 集群下的网关节点。它被设计成用来识别 Front 节点的有效性,根据 Front 节点提交的账号参数和来源地址,对 Front 节点进行身份验证,把它们分配到指定的 Gate 节点上。Entrance 节点是所有 Front 节点登录进入集群前,必须通过的一道关卡,只有经过 Entrance 节点有效性验证,Front 节点才能被 Gate 节点接受和登录进入集群。
1.2.5 Gate 节点
Gate 节点是 Bank 集群下的网关节点。它的工作是为登录的 Front 节点提供服务,接受 Entrance 节点重定向过来的 Front 节点,对它们进行安全检查,获取许可授权后,使 Front 节点拥有进入集群,操纵和处理数据的能力。Front 节点发出的每一道命令,都要通过 Gate 节点审核后,才能转发到集群内部。同时,Gate 节点向 Front 节点屏蔽内部网络环境,避免可能的网络攻击行为影响到内部集群运行。Gate 节点这种布局和处理方式,具有分解数据业务负荷和保证集群安全的双重作用。
Gate 节点还支持事务检查和处理,来自 Front 节点的事务命令,都必须通过 Gate 节点的检查核准,才能分发和执行,避免任何可能的事务处理冲突。
1.2.6 Account 节点
Account 节点是 Bank 集群下的工作节点,保存着账号、权限操作许可、分布式应用等用户的核心资源,是 Bank 集群最重要的节点。由于 Account 节点的重要性,Account 节点被设计在集群的最深层,且不直接与集群内的其它工作节点发生联系,各种工作通过 Bank、Hash 节点转发进行。这个设计降低了 Account 节点被直接攻击的危险,使用户的核心资源得到相当程度的保护。
1.2.7 Hash 节点
Hash 节点是 Bank 集群下的工作节点,它介于 Bank 集群的中间位置,起到保护和定位 Account 节点,执行安全防护和分解访问压力的作用。各种访问 Account 节点的工作,都是通过 Hash 节点的识别,才能确定 Account 节点位置,获得访问 Account 节点权限。
由于 Hash 节点的前导和分散分配作用,使得 Laxcus 集群访问压力无论何种状态下,各个 Account 节点的数据处理压力总是均衡状态,进而也保障了 Bank 子域集群稳定可靠运行。
1.2.8 Data 节点
Data 节点是 Home 集群下的工作节点,为用户提供基于磁盘和内存的数据存取服务。在 Laxcus 大数据集群里,Data 节点是所有数据处理的源头。为了保证正确的数据处理,我们在 Data 节点上,为数据处理设计了一系列的可靠性保证,包括数据完整性、一致性要求,以及各种数据纠错和冗余能力。这些元素的加入,使得 Data 节点的复杂性,远高于集群中的其它节点,它在集群中的重要性,也基本等同于 Account 节点。
Data 节点与其它节点不同的是,Data 节点具有“级别”概念,在运行时,被分为主节点(Prime Site)和从节点(Slave Site)两种类型。它们的区别在于,主节点具有“读写”能力,可以执行全部数据操作,包括添加、删除、更新、检索。从节点只拥有“读”的能力,即数据检索操作。这个特点在实际应用中是非常重要的,它为 Laxcus 大数据集群的许多初始指标,如数据冗余、平衡计算、并行处理,提供了基本的保证,成为了 Laxcus 大数据集群实施大规模数据处理的必要条件。
1.2.9 Work 节点
Work 节点是 Home 集群下的工作节点,提供数据计算服务。在 Laxcus 大数据集群中,Work 节点承接来自 Data 节点的数据,大量重要性高、计算量大的数据处理工作都发生在 Work 节点上,这使得 Work 节点在整个 Laxcus 大数据集群中,成为工作负荷最重的节点,也因此成为体现数据处理效率最关键的一环。
为了获得更高的数据处理效率,从 Laxcus 2.x 版本开始,Work 节点通常会把有限的硬件资源集中起来,采用任务队列的手段和快进快出的原则,来解决几个最重要的数据计算工作,从而避免因为无谓的任务空耗硬件资源,而其它需要作业的任务又不能获得工作许可的问题。使得 Work 节点在应对大规模数据处理时,能够充分利用硬件资源,来加快数据计算速度,同时也提高了数据处理效率。
1.2.10 Build 节点
Build 节点是 Home 集群下的工作节点,提供 ETL 服务。ETL 是的提取、转换、装载(extract、transform、load)的简称,这个名词很好地描述了一种数据处理过程,是当前许多商业数据应用和互联网数据处理业务的重要组成部分,可以理解为数据计算的前奏和加速器。ETL 的核心要旨是把各种数据,按照各自不同的需求,经过重新组织整理后,形成新的数据。这些新的数据,将成为后续数据计算的必要材料。
在许多业务处理中,我们通常是采用 ETL 的方式,把一些数据组合工作从数据计算过程中分离出来,做成一个独立的单元,提前完成,来供后面的数据计算使用,以达到简化数据计算流程的目的。实际上,这种简化的数据计算工作,在很多大规模数据处理业务中使用时,不止是简化了数据处理流程,往往还获得了更高的处理效率。
1.2.11 Call 节点
Call 节点是 Home 集群下,兼具网关和工作的双重角色的节点,提供分布数据管理和任务调度服务。在 Home 子域集群中,Call 节点是一个“中间人”的角色,起到类似路由器的作用。对内,它收集 Data、Work、Build 节点的元数据,并把这些元数据按照各种要求重新组合,保存在内存里。对外,它只接受 Front 节点的注册和命令请求,同时具有对 Front 节点屏蔽内部拓扑结构,防止可能由外部发起的网络攻击,即使因此发生宕机现象,也可以做到尽量避免波及到集群内部其它节点。当收到 Front 节点的命令后,它将按照命令的要求,为 Front 节点筛选集群内部的数据资源,和定位目标节点。在目标节点完成数据处理后,Call 节点把数据结果返回给 Front 节点,从而完成一次数据处理工作。
与 Home 集群下的其它工作节点不同,Call 节点是可以跨 Home 子域集群存在的。跨越需求,由注册的 Front 节点决定。当用户数据被分散到多个 Home 子域集群时,Call 节点将自动发生跨越行为。
1.2.12 Log 节点
Log 节点是一类单独的节点,被设计为多集群存在,注册到 Top、Bank、Home 管理节点下面。为所属集群的工作节点和网关节点,提供保存、格式化、检索日志的服务。这样的工作使得 Log 节点成为 Laxcus 大数据集群里最简单的一个节点。对于上传的日志,Log 节点将根据每个节点的类型和地址,在磁盘上分别建立目录和文件,然后按照时间的格式排列保存下来。在 Laxcus 大数据集群里,各个节点上传的日志内容,通常是它们的工作流程和运行错误,这些信息为分布状态下的数据追踪和分析、程序调试、快速定位和判断节点运行故障提供了重要的依据。所以 Log 节点的工作虽然简单,但是非常重要,这也是为什么需要把日志集中保存并把 Log 节点单独列为一类节点的原因。
1.2.13 Front 节点
Front 节点是 Laxcus 大数据集群唯一的用户节点,由用户操作和使用,被要求注册到 Gate 节点下面,为用户提供进入集群和操作集群数据的能力。当 Front 节点成功注册到 Gate 节点后,Front 节点会向 Gate 节点请求关联的 Call 节点地址,然后主动与它们建立联系,来获得执行命令的能力。
在 Laxcus 大数据集群里,Front 节点被分为三种类型:字符界面的控制台、图形界面的终端、没有操作界面的驱动程序。前两种被用户直接使用,分别针对了 Linux 和 Windows 用户的使用习惯。用户在窗口上输入命令后,通过 Gate、Call 这两道网关节点的审查,被发往集群内部处理。后一种类似 ODBC 模式,嵌入到其它软件中使用(如 Apache、Tomcat 这类 Web 软件),命令由这些开放接口传递过来,经过 Gate、Call 节点审查通过,发往集群内部处理。Front 节点运行过程中,界面上显示的语言默认与系统平台自动匹配,用户不用做任何设置。
三类 Front 节点允许同时并行存在,每一类又可以同时并发多组命令,所有命令都在 Gate 节点管理下,各自执行自己的数据处理工作,不会发生冲突。而被许可的最多命令并发数,则由集群管理员分配,Gate 节点将接受和检查执行。
图 1.2.13.1 Front 控制台字符界面
图 1.2.13.2 Front 终端图形界面
1.2.14 Watch 节点
Watch 是监视节点,设计成跨集群存在,可以注册到 Top、Bank、Home 节点下面,为所属集群提供检测、报警、管理服务。在 Laxcus 大数据集群里,Watch 节点是唯一由集群管理员操纵的节点,它也是 Laxcus 大数据集群另一种拥有图形操作界面的节点,为集群管理员提供可视化的交互操作。集群管理员通过 Watch 节点,能够实时追踪和检查所有节点、所有用户的当前状态。当集群中的节点需要通知管理员,或者感知、捕获到运行故障时,也会通过网络传递给 Watch 节点,Watch 节点将以文字、图像、声音的方式,提醒管理员加予关注,或者要求管理员去排除已经发生的故障。
1.3 松耦合架构
做为 Laxcus 大数据集群操作系统最重要的组成部分,Laxcus 架构设计经历了从紧耦合到松耦合的过程。在 0.x 版本里,我们采用了紧耦合架构。紧耦合架构如下图所示,它的本质是一个客户机/服务器模型,采用同步工作模式。客户机发起请求给服务器,服务器收到,根据请求做出应答,然后反馈给客户机。这种架构最典型的应用就是我们每天都用到的 WEB 服务。它的优点是简单,设计容易、开发周期短、能够快速投入部署和应用。在 Laxcus 大数据集群的早期运行中,这些特点都得到有力的验证。
情况在以后出现了变化。随着 Laxcus 大数据集群规模的不断扩大,业务量的不断增加,尤其是数据计算量、计算时间成倍数的增长后,紧耦合架构渐渐不堪重负,缺点开始不断暴露出来,主要集中在以下几个方面:
1.无法支持大规模的计算业务。因为大数据业务对计算机资源占比普遍很大,导致多任务并行能力有限。根据我们在一台 Pentium IV 2G 机器上所做的试验,当并行任务量超过 100 左右的时候,计算机开始出现超载现象。
2.无法限制任务载荷,管理设计难度大。由此导致计算机不能控制超载现象,而超载对硬件伤害非常大,会严重降低计算机稳定运行能力和使用寿命。
3.网络资源消耗大。紧耦合的本质是同步操作,而同步操作在请求发送后和结果返回前,有很大一段时间是空闲的。这种空闲状态下的网络占用,是对网络资源的极大浪费,尤其当使用 TCP 通信时。
4.安全控制力度差。因为服务器直接暴露给客户机,容易引发网络攻击行为。
5.程序代码之间关联度过高,不利于模块化和抽象化处理。
6.以上现象最终导致系统稳定性变差。
鉴于以上问题,我们重新考虑了系统架构设计,并最终决定将紧耦合架构改为松耦合架构。新架构是原来的客户机/服务器模型之间,加入一层代理服务器(Agent),即把 CS 模型改为 CAS 模型,同时把同步处理模式改为异步处理模式。在新的架构下,客户机的角色不变,代理服务器承担起与客户机通信,和对客户机的识别判断工作,服务器位于代理服务器后面,对客户机来说不可见,它只负责数据处理工作。
在设计松耦合架构的同时,结合新增加的代理服务器这个角色,我们又设计了一套名为:“Invoke/Produce”的任务调度模型。它针对数据处理工作实施异步的抽象化处理和分组分级管理。原来的数据处理和业务逻辑套用这套机制后,程序代码基本不用修改,转移到 CAS 模型上运行就可以了。
松耦合架构设计和代码修改完成后,我们在原来的集群上,和紧耦合架构做了各种对比测试。其结果是不仅解决了紧耦合架构上存在的所有问题,而且其中很多技术指标还超出了我们的预估,主要表现以下一些方面:
1.多任务并行处理能力获得极大提升。同样是上述的数据处理,紧耦合架构只能支持最大约 100 多个并行,在松耦合架构上增加到 10 倍。
2.同步实现了负载自适应机制,避免了超载现象。
3.对运行任务实现了随机调度和随机控制,进一步避免了持续超载现象。
4.基本杜绝了网络攻击行为。由于代理服务器的隔绝和筛查作用,同时结合其它安全管理手段,外部攻击在代理服务器处就被识别和过滤掉了,保护了后面的服务器不受影响。
5. Invoke/Produce 机制提高了程序的模块化和抽象化能力,有利实现更复杂的数据处理。
6.异步处理减少了网络资源消耗和操作关联。
7.综合以上措施,它们共同增强了系统稳定性。
以下我们用一张表格,来对两种架构的性能和特点做个比较总结:
表 1.3.1 紧耦合/松耦合性能对比
版权声明: 本文为 InfoQ 作者【陈泽云】的原创文章。
原文链接:【http://xie.infoq.cn/article/0feedf8c182024c1d4d151024】。
本文遵守【CC BY-NC】协议,转载请保留原文出处及本版权声明。
评论