全分布式集群是指将系统的计算和存储资源分散到多台服务器上,通过网络互相连接,形成一个高可用、高可靠、高性能的分布式计算环境。搭建全分布式集群可以提高系统的计算能力、数据处理能力和容错能力。
实现全分布式集群需要遵循以下原则:
1 水平扩展:将系统的计算和存储资源分散到多个节点上,可以根据业务需求按需增加或减少节点,从而方便地扩展系统的性能和容量。
2 节点均衡:每个节点都应该具有相同的硬件配置和软件环境,以保证节点之间的任务分配均衡,并且方便进行故障转移和负载均衡。
3 数据一致性:在分布式环境下,数据的一致性是非常重要的。为了保证数据的一致性,需要采用合适的同步机制,如数据复制、数据分片等。
4 故障容错:从节点故障恢复和任务重试等方面提供容错功能,使得系统可以在节点故障的情况下继续工作。
5 高性能通信:使用高速网络通信协议,如Infiniband、RDMA等,保证节点间的通信速度和吞吐量。
搭建全分布式集群需要使用一些分布式系统的基础组件,如分布式文件系统、分布式数据库、分布式缓存、分布式任务调度等,并且需要根据实际业务需求进行选择和调整。常用的分布式平台包括Hadoop、Spark、HBase、Cassandra等。同时,为了更好地管理和监控集群,还需要使用一些集群管理工具,如Zookeeper、Ambari等。
首先,这种框架现在市面上是有的。强烈建议,不要重复造轮子。
先介绍几种比较主流的。
Elastic-Job,是当当网开源的分布式调度解决方案,支持任务分片功能,可以充分利用资源。Elastic-Job有两个独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成。具体实现可以参考官方教程。其整体架构图如下。
Elastic-Job的特点:
1、分布式调度 2、作业高可用 3、任务分片执行。
另外,还有其他的一些框架,可以对比使用。比如TBSchedule是阿里巴巴开源的分布式调度框架,完全由java实现,目前被应用于淘宝,阿里巴巴,支付宝,京东, 汽车 之家等。大众点评开源的xxl-job,也是应用比较广泛的分布式调度任务。
目前我使用过的有 Elastic-Job和xxl-job。两者功能都很强大,后台管理也比较完善。很容易上手。都可以满足日常的工作需要。区别就是 Elastic-Job依赖zk,但是xxl-job不依赖zk,只依赖数据库。
目前市面上应该还有一些其他的框架,但是以上是比较主流的,可以根据自己的需要来选择。切记不要重复造轮子,造轮子需要大量的时间去验证。会让你在坑里爬不出来。
1XXL-JOB
2Elastic-Job
Elastic-Job 是一个分布式调度解决方案,由两个相互独立的子项目 Elastic-Job-Lite 和 Elastic-Job-Cloud 组成。
定位为轻量级无中心化解决方案,使用 jar 包的形式提供分布式任务的协调服务。
支持分布式调度协调、d性扩容缩容、失效转移、错过执行作业重触发、并行调度、自诊断和修复等等功能特性。
分布式调度解决方案,由两个相互独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成。
Elastic-Job-Lite定位为轻量级无中心化解决方案,使用jar包的形式提供分布式任务的协调服务。选择该项目可以满足大多数it企业的需求。
Elastic-Job-Cloud使用Mesos + Docker的解决方案,额外提供资源治理、应用分发以及进程隔离等服务。
轻量级无中心化:Elastic-Job-Lite并无作业调度中心节点,而是基于部署作业框架的程序在到达相应时间点时各自触发调度。
灵活的增删改查作业,集中式管理调度作业
支持高可用:一旦执行作业的服务器崩溃,等待执行的服务器将会在下次作业启动时替补执行。开启失效转移功能效果更好,可以保证在本次作业执行时崩溃,备机立即启动替补执行。
支持分片:作业分片一致性,保证同一分片在分布式环境中仅一个执行实例
任务监控:通过监听Elastic-Job-Lite的zookeeper注册中心的几个关键节点即可完成作业运行状态监控功能
一致性:使用zookeeper作为注册中心,为了保证作业的在分布式场景下的一致性,一旦作业与注册中心无法通信,运行中的作业会立刻停止执行,但作业的进程不会退出,这样做的目的是为了防止作业重分片时,将与注册中心失去联系的节点执行的分片分配给另外节点,导致同一分片在两个节点中同时执行。
同时支持动态扩容,将任务拆分为n个任务项后,各个服务器分别执行各自分配到的任务项。一旦有新的服务器加入集群,或现有服务器下线,elastic-job将在保留本次任务执行不变的情况下,下次任务开始前触发任务重分片
3opencron
opencron是一个功能完善且通用的开源定时任务调度系统,拥有先进可靠的自动化任务管理调度功能,提供可 *** 作的 web 图形化管理满足多种场景下各种复杂的定时任务调度,同时集成了 linux 实时监控、webssh 等功能特性
4quartz
支持集群和分布式,但是没有友好的管理界面,功能单一,对于管理调用的任务比较困难。
quartz使用数据库锁。在quartz的集群解决方案里有张表scheduler_locks,quartz采用了悲观锁的方式对triggers表进行行加锁,以保证任务同步的正确性。一旦某一个节点上面的线程获取了该锁,那么这个Job就会在这台机器上被执行,同时这个锁就会被这台机器占用。同时另外一台机器也会想要触发这个任务,但是锁已经被占用了,就只能等待,直到这个锁被释放。
quartz的分布式调度策略是以数据库为边界资源的一种异步策略。各个调度器都遵守一个基于数据库锁的 *** 作规则从而保证了 *** 作的唯一性。同时多个节点的异步运行保证了服务的可靠。但这种策略有自己的局限性:集群特性对于高CPU使用率的任务效果很好,但是对于大量的短任务,各个节点都会抢占数据库锁,这样就出现大量的线程等待资源。这种情况随着节点的增加会越来越严重。
缺点:quartz的分布式只是解决了高可用的问题,并没有解决任务分片的问题,还是会有单机处理的极限。
5Saturn
Saturn
基于当当Elastic Job代码基础上自主研发的任务调度系统,是唯品会开源的分布式作业调度平台,取代传统的Linux Cron/Spring Batch Job的方式,做到统一配置,统一监控,任务高可用以及分片并发处理。主要是去中心化,高可用,可分片,动态扩容,有认证和授权功能。
主要特性
支持多种语言作业,语言无关(Java/Go/C++/PHP/Python/Ruby/shell)
支持秒级调度
支持作业分片并行执行
支持依赖作业串行执行
支持作业高可用和智能负载均衡
支持异常检测和自动失败转移
支持异地容灾
支持多个集群部署
支持跨机房区域部署
支持d性动态扩容
支持优先级和权重设置
支持docker容器,容器化友好
支持cron时间表达式
支持多个时间段暂停执行控制
支持超时告警和超时强杀控制
支持灰度发布
支持异常、超时和无法高可用作业监控告警和简易的故障排除
支持失败率最高、最活跃和负荷最重的各域各节点TOP10的作业统计
优点:源码清晰,学习入手容易。应用部署简单,提供运维控制台,集中管理作业,运维控制台功能强大,提供作业统计报表 ,告警,增删改查作业,作业统一配置。
最后一个是国内团队封装的
前端时间研究了两款分布式任务调度框架,一个是XXL-Job,现在非常主流,很多常见的一些公司都在使用,像滴滴美团这样的公司都在用,这也是一款开源产品,下载下来导入IDEA就可以使用,分调度器和执行器和管理UI,有很美观的UI界面,可以对任务做增删改查,以及支持自定义开发,有很详细的帮助文档,还提供有demo,傻瓜式的,很简单,亮点是提供了管理界面。
另一个是Quartz,这个组件单机和集群都支持,单机的话是RAMJobStore任务存储,而要支持集群的话,就要将配置改成数据库方式,Quartz提供的有十几张表,其分布式的原理是利用了数据库的行锁,Quartz很简单,也是一款轻量级的开源产品,我们公司一直用这款组件,很成熟无Bug,推荐使用!
springcloudtask,springclouddataflow,正在学习中
liteflow是一个基于任务版本来实现的分布式任务流调度系统
1实现任务在任务流间共享
2任务/任务流的可视化配置
3一键修复任务/任务流修复提高数据修复效率
4动态表单+容器机制,提供一个可扩展性比较强的执行引擎
5执行者可以运行任何类型的任务,shell、python
码云
GitHub
1项目主要分为控制台和执行引擎
1) 控制台(CONSOLE)
主要用来配置以及调度任务
2) 执行引擎(EXECUTOR)
依托容器->插件->任务实现
容器分为同步容器和异步容器
1登陆
2任务
1任务列表
2添加任务
3任务流
1任务流列表
2添加任务流
3任务流添加任务
4任务流修复
1任务运行原理
2任务状态流转图
任务状态流转,参考hadoop yarn
3ER图
一、介绍
任务版本就是任务每次运行是所产生的记录;例如某个任务是每天运行一次,就相当于每天会有一个版本;每小时运行一次就说明每天有24个版本;主要应用于任务的插件配置中
1版本号
每个任务版本都有对应的版本号,版本号就是运行时间的一个变形
2不同周期的任务版本(以2019-01-31 00:00:00举例)
任务周期版本表达式对应记录的版本号分钟yyyyMMddHHmm201901310000小时yyyyMMddHH2019013100每日yyyyMMdd20190131每周yyyyMMdd20190131每月yyyyMMdd20190131每年yyyyMMdd20190131
二、时间计算器
1介绍
对于ETL相关任务来说,任务每次运行要么绑定一个特定的时间、要么就是一个时间区间,但是每次运行时使用时时间应该与当前任务版本(运行时间)有一定的关系;
例如: 任务A,每天跑spark sql来计算昨天一天的活跃用户
当前任务执行时需要获取到昨天的时间,来替换sql中的变量(${yesterday}),以便查询;而且这个变量应该跟任务版本是有关系的,这个可以通过时间计算器来动态生成
通过以上表达式,会根据每个任务版本来计算出昨天的时间
2使用时间表达式的方式
表达式以"${time:格式化表达式,预设值,时间加减}"的方式处理,大致支持三种形式
1一个参数
${time:yesterday}
2两个参数
time:yesterday,−1d,
time:yesterday,−1d,{time:yyyyMMdd, -1d},${time:yyyyMMdd, yesterday}
3三个参数
${time:yyyyMMdd, yesterday, -d}
1)时间加减
表达式为:数字+单位
支持的单位:
2)预设变量
变量名说明today今天yesterday昨天tomorrow明天Monday本周周一Tuesday本周周二Wednesday本周周三Thursday本周周四Friday本周周五Saturday本周周六Sunday本周周日lastMonday上周周一lastTuesday上周周二lastWednesday上周周三lastThursday上周周四lastFriday上周周五lastSaturday上周周六lastSunday上周周日monthFirstDay本月第一个天monthLastDay本月最后一天lastMonthFirstDay上个月第一天lastMonthLastDay上个月最后一天
预设变量扩展
1继承TimeParamCalculator
2在TimeExpressionUtils 中注册
三、总结
时间表达式的计算是以任务版本为基准,所以可以保证每次运行参数的正确性;这种方式在任务修复时会优点尤为突出,只要找到对应的任务版本,一键修复即可;不需要临时修改脚本
git地址:https://giteecom/yueyunyue/liteflow
分布式系统是建立在网络上的软件系统。 处理协助任务,然后整合结果。在分布式系统中,一组独立的计算机向用户呈现一个统一的整体,就像一个系统一样。系统具有多种通用的物理和逻辑资源,可以动态分配任务,分散的物理和逻辑资源可以通过计算机网络实现信息交换。系统中有一个分布式 *** 作系统,以全局方式管理计算机资源。通常,对于用户来说,分布式系统只有一个模型或范例。在 *** 作系统之上,一个软件中间件层负责实现这个模型。分布式系统的一个著名例子是万维网,在万维网中,一切看起来都像一个文档(网页)。在计算机网络中,这种统一性、模型和软件是不存在的。用户看到的是实际的机器,计算机网络并没有让这些机器看起来千篇一律。如果这些机器有不同的硬件或不同的 *** 作系统,那么这些差异对用户来说是完全可见的。如果用户想要在远程机器上运行程序,他必须登录到远程机器上并在该机器上运行程序。分布式系统和计算机网络系统的共同点是大部分分布式系统都是建立在计算机网络上的,所以分布式系统和计算机网络的物理结构基本相同。两者的区别在于分布式 *** 作系统和网络 *** 作系统的设计思想不同,这就决定了它们在结构、工作方式和功能上也是不同的。网络 *** 作系统要求网络用户在使用网络资源时首先了解网络资源。网络用户必须了解网络中每台计算机的功能和配置、软件资源和网络文件结构。如果用户想要读取网络中的共享文件,他们必须知道该文件放在哪个计算机和目录中。分布式 *** 作系统以全局方式管理系统资源,可以随意为用户调度网络资源,调度过程“透明”。当用户提交作业时,分布式 *** 作系统可以根据需要选择系统中最合适的处理器,将用户的作业提交给处理程序,在处理程序完成作业后将结果传递给用户。在这个过程中,用户并没有意识到多个处理器的存在,系统就像一个处理器。
一、分布式系统和计算机网络系统的共同点是:
多数分布式系统是建立在计算机网络之上的,所以分布式系统与计算机网络在物理结构上是基本相同的。
二:计算机网络与分布式系统区别在于:
分布式 *** 作系统的设计思想和网络 *** 作系统是不同的,这决定了他们在结构、工作方式和功能上也不同。
网络 *** 作系统要求网络用户在使用网络资源时首先必须了解网络资源,网络用户必须知道网络中各个计算机的功能与配置、软件资源、网络文件结构等情况,在网络中如果用户要读一个共享文件时,用户必须知道这个文件放在哪一台计算机的哪一个目录下。
分布式 *** 作系统是以全局方式管理系统资源的,它可以为用户任意调度网络资源,并且调度过程是“透明”的。当用户提交一个作业时,分布式 *** 作系统能够根据需要在系统中选择最合适的处理器,将用户的作业提交到该处理程序,在处理器完成作业后,将结果传给用户。
在这个过程中,用户并不会意识到有多个处理器的存在,这个系统就像是一个处理器一样。
扩展资料
从整体上来说计算机网络就是把分布在不同地理区域的计算机与专门的外部设备用通信线路互联成一个规模大、功能强的系统,从而使众多的计算机可以方便地互相传递信息,共享硬件、软件、数据信息等资源。简单来说,计算机网络就是由通信线路互相连接的许多自主工作的计算机构成的集合体。
最简单的计算机网络就只有两台计算机和连接它们的一条链路,即两个节点和一条链路。
-分布式系统
-计算机网络
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)