# openhandx batch **Repository Path**: dhd_index/openhandx-batch ## Basic Information - **Project Name**: openhandx batch - **Description**: * 异步批量架构是解决复杂业务处理、数据分析、科学计算等耗时工作任务,这些任务被安排在特定的服务器上执行,被统一规划、拆分成子任务、统一调度、并发执行,大大提高了执行效率和可靠性,另外异步批量架构可以部署在网络内的任意服务器或PC上形成企业的云计算。 * openHandX batch本身是异步批量调度框架,支持多服务器分布式计算,可以制定复杂的业务流程,比较适合ETL、复杂报表等大型数据计算。也可以与现有的联机交易对接,提高联机系统的运算能力。 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 6 - **Created**: 2022-04-10 - **Last Updated**: 2022-04-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # openhandx batch 1. 背景 - 分布式批量架构是解决复杂业务处理、数据分析、科学计算等耗时工作任务,这些任务被安排在特定的服务器上执行,被统一规划、拆分成子任务、统一调度、并发执行,大大提高了执行效率和可靠性,另外异步批量架构可以部署在网络内的任意服务器或PC上形成企业的云计算。 2. 基本原理 - 举例说明异步批量的最基本原理,实际应用要比这复杂得多。比如:某企业要生成年终表报,并且年终报表要按照企业的各个部门、分公司出,报表的数据来源有企业的财务系统、ERP系统、CRM系统。 - 技术分析: - 1、生成报表首先要把数据从各个系统中数据抽取、加工、汇总,最终生成报表,每步操作都要按照各个部门、分公司分类。 - 2、总公司报表要等到各个部门和分公司加工、汇总的数据出来后再汇总,最后生成总公司报表。 - 3、各个部门和分公司的数据抽取、加工、汇总可以是并行处理的,各个部门和分公司的报表生成可以和总公司的数据汇总并行处理。 - 批量执行步骤: ![输入图片说明](https://gitee.com/uploads/images/2018/0417/095102_428f59d3_1878748.jpeg "base.JPG") - 1、首先由客户端或应用系统发起一个年终报表的事件 - 2、总控服务器收到事件后,根据当前的事件类型,找到预先配置年终报表的节点运行图(比如节点运行图中有财务系统数据抽取节点、ERP数据抽取节点、数据加工节点、数据汇总节点、部门公司报表生成节点、总公司数据汇总节点、总公司报表生成节点) - 3、总控服务器根据节点运行图按照节点的先后顺序及依赖关系,成分成许多任务(如:A部门的财务系统数据抽取任务、B部门的财务系统数据抽取任务、C部门的财务系统数据抽取任务、A部门的ERP数据抽取任务、B部门的ERP数据抽取任务、C部门的ERP数据抽取任务...),并将这些任务发送到任务服务器去并发执行 - 4、任务服务器收到任务并执行任务,如:A部门的ERP数据抽取任务、B部门的财务系统数据抽取任务 - 5、任务服务器执行完任务后将任务信息反馈到总控服务器 - 6、总控服务器接收到任务反馈信息后,判断当前一批节点的任务否运行全部完成,如果完成则创建下一批任务(如:A部门数据加工节点任务、B部门数据加工节点任务、B部门数据加工节点任务),重复第3部直到所有节点的任务完成(最终生成所有报表)。 3. 总体逻辑结构 ![输入图片说明](https://gitee.com/uploads/images/2018/0417/095340_e9389d56_1878748.jpeg "logic.jpg") - 1、事件由应用系统或事件中心创建,通过事件通讯服务器到达已部署的总控服务器 - 2、总控服务器将事件按照预先定义好的节点图拆分、解析成任务,按照合适的条件再发送到任务通讯服务器,并记录日志 - 3、任务服务器根据自身的资源情况从任务通讯服务器接受相应的任务去执行,实现了负载均衡 - 4、任务执行完成后将记录日志,并将完成后的任务信息发送回任务通讯服务器 - 5、总控服务器再从任务通讯服务器取回任务信息,判断节点和事件的完成情况,如果未完成继续后续节点的拆分和任务的发送,如果全部节点的任务完成则该事件完成 4. 术语及名词解释 - 批量框架:OpenHandX-Batch 批量框架的简称 - 事件:应用系统向批量框架发送一次批量的请求 - 节点:一个复杂的事件是由多个步骤,每个节点代表一个步骤 - 节点图: 将多个节点按照某种逻辑关系组成运行流程,这个流程就叫节点运行图或节点图 - 任务:一个节点要执行必须实例化成任务,一般一个节点可拆分成一个任务,但一个节点也可能是同一类任务的定义 5. 主要特性 - **支持多个应用系统**-能将多个应用系统部署到同一个总控服务器或多个总控服务器,由总控服务器统一控制和管理 - **支持多个异步事件**-总控服务器能同时执行和监控多个事件,通过事件权重、优先级衡量和控制服务器的资源 - **分布式任务执行**-每个任务由不同的任务服务器并发执行,并支持运行中热部署 - **自动负载均衡**-每个任务服务器及总控服务器自动分析自身的资源情况,接收任务并执行任务 - **多种节点图事件支持**-总控服务器提供树型和层型节点图、单个任务类,复杂类型的事件可以通过节点图配置工具来定义自己的运行顺序图,支持断点续跑灾难恢复 - **良好扩展性**-从总控服务器、任务服务器、事件服务器都提供了丰富的接口,能对节点图、事件和任务传输开发出业务个性的代码 - **快速开发接口**-任务服务器提供一个主要接口就能完成所有应用系统业务代码的开发,同时也提供对Spring框架的支持 - **健壮性、可靠性**-总控服务器的每个应用实例有自己的运行容器和运行线程,任务服务器也有自己的独立任务容器和执行线程,保证了每个独立的应用或任务执行出现意外不影响其它执行的应用和任务。其次总控服务器还对每个应用和任务执行进行监控记录,即使整个总控服务器宕机重起后能自动恢复上次运行的步骤继续往下执行。节点配置支持出错重跑机制,用户可以根据节点的重要程度、运行情况设置节点是否出错跳过、出错重试、出错退出 - **安全和密级**-所有的批量工具提供用户和密码管理,任务和事件的xml传输协议都支持加密和压缩 - **多种应用模式**-完整的异步批量框架需要部署总控服务器、任务服务器、事件服务器,如果您不需要那么多的功能,可以灵活部署其中的任务服务器或任务服务器+总控服务器 - **丰富的监控和分析工具**-任务服务器、总控服务器、事件服务器都有自己的监控和管理工具,能启动、暂停、重起服务器。另外批量框架提供了对日志实时分析的工具,比如事件、节点、任务的运行状态、完成进度 6. 性能优势 - **总控服务器** - 1、总控服务器的事件接收、任务发送、任务信息接收,可以有4种配置模式:JMS服务器、数据库服务器、内存队列、WebService,其中内存队列服务器效率最高、其次是WebService - 2、对于复杂耗时节点图的解析可以采用异步接口的实现,采用异步的方式提高总控服务器的相应速度 - **任务服务器** - 1、任务服务器的任务信息发送、任务接收,也同样有4种配置模式:JMS服务器、数据库服务器、内存队列、WebService,其中内存队列服务器效率最高、其次是WebService - 2、任务实例的执行提供了独立的执行线程 - 3、任务实例由任务实例管理器统一管理,默认采用单实例模式一次创建多次执行减小执行中创建任务实例的开销 7. 节点模型 - 首先节点图是由总控服务器来解析的,负责节点及任务的拆分和调度。总控服务器默认支持3种最常用的节点图模型,开发人员也可以通过接口扩展支持新的节点图模型。这3种节点图模型是:单节点模型、树型节点图模型、层型节电图模型。单节点模型是由一个节点组成,非常简单。 - 7.1 树型节点图 - 树型节点图每个节点执行仅依赖父节点是否完成。树型节点图实际上更像网状结构。通过节点之间关系建立紧密的联系,这样的好处是每个节点执行完能很快执行它下级节点,效率较高。但是节点关系过于紧密,因此创建树型节点图和维护的代价很大。 - 如:假设这有7个节点,他们的关系如图所示。整个节点图执行完一共需要14分钟。 ![输入图片说明](https://gitee.com/uploads/images/2018/0417/100902_075e3f6a_1878748.jpeg "tree.jpg") - 7.2 层型节点图 - 层型节点图像瀑布从上到下一批批地执行完,只有前一层执行完才能到下一层。这种结构关系相对简单,易于创建和维护。但是如果分层不当,层内会因某个节点非常费时而等待,从而影响整个执行的效率。 - 如:还是这7个节点,整个节点图执行完一共需要18分钟。其实这节点5也可以放到第2层,但效率更低,需要21分钟。 ![输入图片说明](https://gitee.com/uploads/images/2018/0417/101102_6246b48d_1878748.jpeg "layer.jpg") 8. 插拔式部署模式 - **支持多组件插拔式部署,典型的3种模式如下:** - 初始级的批量服务-只要部署任务服务器就可以满足需要,部署维护简单 - 应用级的批量服务-需要部署多个任务服务器,一个总控服务器,如果需要监控还要部署WEB的总控监控组件和任务服务器监控组件、日志分析中心 - 企业级的批量服务-部署所有组件,总控服务器和任务服务器的集群可以处理庞大的批量事件,加入事件服务器可以人为根据需要发起系统外批量程序 - 云计算级批量服务-在需要加入云计算的计算机安转批量任务服务器客户端并启动她,即完成了云计算的部署。在网络内的个人pc作为任务服务器也能加入云计算,这样就为云计算提供灵活的、更多的资源 - 扩展模式-除了以上四种模式还可以根据实际情况组合自己需要的组件,也可以增加或减少总控服务器及任务服务器