1.3 节点
按照我们给Laxcus集群的设计定义,Laxcus集群被分为内部和外部两个网络环境。内部网络由集群的所有权人负责实施和管理,为保证集群能够有效可靠运行,需要遵守一系列的集群部署和管理规定。外部网络是用户负责范围,用户可以通过互联网或者VPN的方式,远程登录进入集群,然后通过交互命令传达到集群上,执行数据操作。这样一个布局,可以理解为集群层面的客户机/服务器结构。此外,如果集群组织者没有对外服务的需要,也可以将集群全部部署在内部网络里,成为一个纯粹的Intranet集群。
如前所述,节点是Laxcus集群的基本单位,由前端节点、网关节点、工作节点、管理节点4类节点组成。理论上,一台物理计算机上可以部署任意多个节点,包括组成一个小型的集群。从节点的工作性质来看,它具有双重身份,即是服务器又是客户机。当它做为服务器使用时,它接受其它节点的命令请求和执行数据处理;当处于客户机状态时,又可以向其它节点发送命令。软件层面上,节点实质是操作系统下的一个进程,在后台运行,通过网络与外界保持联系。在Laxcus 2.0版本中,节点共设计有4类11种节点。对每一种节点,我们都规定了它们的工作内容和处理范围,以下将逐一进行介绍。
图1.1 Laxcus集群
1.3.1 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节点保持少量的通信,所以通常情况下,它的工作负荷很轻。
1.3.2 Home节点
Home是管理节点,在Laxcus集群二级管理架构中,它是子域集群的核心。对上,向Top节点注册,和接受Top节点的管理;对下,接受下属节点的注册,以及监督和协调它们的运行。在Laxcus集群里,工作节点全部运行在Home节点下面,并且弱中心化管理思想也主要体现在Home节点上。运行过程中,它只负责两项工作:追踪工作节点运行状态,收集和分析工作节点元数据。这些工作的数据量和产生的计算量都很小,不会对Home节点正常运行构成影响。与Top节点一样,Home也要求有一个Master节点和最少一个Monitor节点。当Master节点发生故障时,Monitor节点可以接替Master节点的工作。
1.3.3 Task节点
Task是工作节点,注册到Top节点下面,为用户的分布任务组件提供存储、管理、转发服务。在实际使用时,Top会把它重定向给关联的Home节点,再经过Home节点结合自己的数据资源进行判断后,分派给自己的下属节点,让它们与Task节点进行数据交互。与Task节点进行直接数据交互的节点有Data、Work、Build、Call四种节点,它们将根据自己的业务需要,请求关联的分布任务组件,并把分布任务组件下载下来,部署在自己的节点上,为用户提供分布数据处理。同时,每一个与Task节点执行过成功交互的节点,Task节点会记录下它们的信息,当有新的分布任务组件上传后,Task节点会把这些新的分布组件,同步推送给这些节点,使得用户在发布分布任务组件后,集群可以立即部署和生效,省却了用户的等待时间。
按照上述流程介绍,实质上,Task节点是跨子域集群存在的,我们为Task节点设计了一个Top/Home/Home下属节点的三层定向机制,每个Task节点可以为整个集群提供分布任务组件服务,而不必拘泥于某个子域集群的限制。管理员也可以按照自己的需要,设置规则,为不同的用户选择合适的发布空间,提高了管理灵活性。
1.3.4 Log节点
Log节点是工作节点,注册到Home节点下面。为本集群的其它节点保存它们的日志数据,并提供格式化的日志检索服务。这样的工作内容使得Log节点成为Laxcus集群里最简单的一个节点。对于上传的日志,Log节点将根据每个节点的类型和地址,在磁盘上分别建立目录和文件,然后按照时间的格式排列保存下来。在Laxcus集群里,各节点上传的日志内容,通常是它们的工作流程和运行错误,这些信息为分布状态下的数据追踪和分析、程序调试、快速定位和判断节点运行故障提供了重要的依据。所以Log节点的工作虽然简单,但是非常重要,这也是为什么要单独把日志单独保存并且列为一类节点的原因。
1.3.5 Data节点
Data节点是工作节点,注册到Home节点下面,提供基于磁盘和内存的数据存取服务。在Laxcus集群里,Data节点保存着整个集群的数据,是所有数据处理的源头。为了保证正确的数据处理,我们在Data节点上,为数据处理设计了一系列的可靠性保证,包括数据完整性、一致性要求,以及各种数据纠错和冗余能力。这些元素的加入,使得Data节点的复杂性,远高于集群中的其它节点,它在集群中的重要性,也仅次于Top、Home节点。
另外Data节点与其它节点不同的是,Data节点具有“级别”概念,在运行时,被分为主节点(Prime Site)和从节点(Slave Site)两种类型。它们的区别在于,主节点具有“读写”能力,可以执行全部数据操作,包括添加、删除、更新、检索。从节点只拥有“读”的能力,即数据检索操作。这个特点在实际应用中是非常重要的,它为Laxcus集群的许多初始指标,如数据冗余、平衡计算、并行处理,提供了基本的保证,成为了Laxcus集群实施大规模数据处理的必要条件。
1.3.6 Work节点
Work节点是工作节点,注册到Home节点下面,提供数据计算服务。在Laxcus集群中,Work节点承接来自Data节点的数据,大量重要性高、计算量大的数据处理工作都发生在Work节点上,这使得Work节点在整个Laxcus集群中,成为工作负荷最重的节点,也因此成为体现数据处理效率最关键的一环。
为了获得更高的数据处理效率,在Laxcus 2.0中,Work节点通常会把有限的硬件资源集中起来,采用任务队列的手段和快进快出的原则,来解决几个最重要的数据计算工作,从而避免因为无谓的任务空耗硬件资源,而其它需要作业的任务又不能获得工作许可的问题。使得Work节点在应对大规模数据处理时,能够充分利用硬件资源,来加快数据计算速度,同时也提高了数据处理效率。
1.3.7 Build节点
Build节点是工作节点,注册到Home节点,提供ETL服务。ETL是的提取、转换、装载(extract、transform、load)的简称,这个名词很好地描述了一种数据处理过程,是当前许多商业数据应用和互联网数据处理业务的重要组成部分,可以理解为数据计算的前奏和加速器。ETL的核心要旨是把各种数据,按照各自不同的需求,经过重新组织整理后,形成新的数据。这些新的数据,将成为后续数据计算的必要材料。
在许多业务处理中,我们通常是采用ETL的方式,把一些数据组合工作从数据计算过程中分离出来,做成一个独立的单元,提前完成,来供后面的数据计算使用,以达到简化数据计算流程的目的。实际上,这种简化的数据计算工作,在很多大规模数据处理业务中使用时,不止是简化了数据处理流程,往往还获得了更高的处理效率。
1.3.8 Call节点
Call节点是网关节点,注册到Home节点下,提供分布数据管理和任务调度服务。在Laxcus集群中,Call节点是一个“中间人”的角色,起到类似路由器的作用。对内,它收集Data、Work、Build节点的元数据,并把这些元数据按照各种要求重新组合,保存在内存里。对外,它只接受Front节点的注册和命令请求,同时具有对外屏蔽了集群内部拓扑结构的作用,防止可能由外部发起的网络攻击,即使因此发生宕机现象,也可以做到尽量避免波及到集群内部其它节点。当收到Front节点的命令后,它将按照命令的要求,为Front节点筛选集群内部的数据资源,和定位目标节点。在目标节点完成数据处理后,Call节点把数据结果返回给Front节点,从而完成一次数据处理工作。
与Task节点一样,Call节点也是可以跨越多个子域集群的。至于是否需要跨越,则由注册的Front节点来决定。当Front节点需要的数据分别存在于多个子域集群时,那么Call节点将自动发生跨越子域集群行为。
1.3.9 Aid节点
Aid节点是网关节点,注册到Top节点下面,提供账号和账号资源的管理服务。Aid节点唯一的服务对象是Front节点,所有类型的Front节点都要首先注册到Aid节点下面,才能获得进入集群和操纵数据的权力。Front节点发出的每一道命令,当通过Aid节点审核后,才能交给Call节点并转发到集群内部。与Call节点一样,Aid节点也对Front节点屏蔽内部网络环境,避免可能的网络攻击行为影响到内部集群运行。Aid节点这种布局和处理方式,具有分解数据业务负荷和保证集群安全的双重作用。
在Laxcus 2.0版本中,Aid节点新增加事务处理能力,这样命令在获得核准前,为了防止命令之间可能存在的事务冲突,Aid节点给每个命令都增加了事务检查环节。
1.3.10 Front节点
Front节点是Laxcus集群唯一的前端节点,由用户操作和使用,被要求注册到Aid节点下面,为用户提供进入集群和操作集群数据的能力。当Front节点成功注册到Aid节点后,Front节点会向Aid节点请求关联的Call节点地址,然后主动与它们建立联系,来获得执行命令的能力。
在Laxcus集群里,Front节点被分为三种类型:字符界面的控制台、图形界面的终端、没有操作界面的驱动程序。前两种被用户直接使用,分别针对了Linux和Windows用户的使用习惯。用户在窗口上输入命令后,通过Aid、Call这两道网关节点的审查,被发往集群内部处理。后一种是嵌入到其它软件中使用(如Apache、Tomcat这类Web软件),命令由这些开放接口传递过来,经过Aid、Call节点审查通过,发往集群内部处理。图形界面的Front节点现在有三种语言版本:英文、中文、西里尔语,另外其它语种的图形版Front节点也在筹划中。
三类Front节点允许同时并行存在,每一类又可以同时并发多组命令,所有命令都在Aid节点管理下,各自执行自己的数据处理工作,不会发生冲突。至于命令最大并发数,则由集群管理员分配,Aid节点负责执行。
图1.3.10.1 Front控制台
图1.3.10.2 Front终端
1.3.11 Watch节点
Watch是工作节点,可以选择注册到Top或者Home节点下面,提供监视主域集群或者子域集群的服务。在Laxcus集群里,Watch节点是唯一完全由集群管理员操纵的节点,它也是Laxcus集群另一种拥有图形操作界面的节点,为集群管理员提供可视化的管理工作。集群管理员通过Watch节点,能够实时追踪和检查所有节点、所有用户的当前状态。当集群中的节点需要通知管理员,或者感知、捕获到运行故障时,也会通过网络传递给Watch节点,Watch节点将以文字、图像、声音的方式,提醒管理员加予关注,或者要求管理员去排除已经发生的故障。
图1.3.11 Watch节点图形界面