网站开发属于什么会计科目,国外一些建筑公司网站,做跨境网站注意事项,wordpress表单支付一、使用场景
#xff08;1#xff09;分布式项目中 定时任务。如果只部署一台机器#xff0c;可用性无法保证#xff0c;如果定时任务机器宕机#xff0c;无法故障转移#xff0c;如果部署多台机器时#xff0c;同一个任务会执行多次#xff0c;任务重复执行也会出问…一、使用场景
1分布式项目中 定时任务。如果只部署一台机器可用性无法保证如果定时任务机器宕机无法故障转移如果部署多台机器时同一个任务会执行多次任务重复执行也会出问题。
2分布式项目 任务分片执行。将一个任务拆分为 多个独立的任务项然后由分布式服务器分别执行 某一个或几个分片项。
Elastic-Job是当当推出的分布式任务调度框架基于Zookepper、Quartz开发的Java分布式定时任务解决方案。用于解决分布式任务的协调调度问题保证任务不重复不遗漏地执行。它由两个相互独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成本文主要介绍Elastic-Job-Lite
特点任务的分布式协调调度、多种分片策略、弹性扩容缩容、失效转移、错过任务重执行、多种作业类型。
Elastic-Job-Lite定位为轻量级无中心化任务调度解决方案使用jar包的形式提供分布式任务的协调服务Elastic-Job-Lite 为纯粹的作业中间件仅关注分布式调度、协调以及分片等核心功能
Elastic-Job-Cloud额外提供资源治理、应用分发以及进程隔离等功能 二、使用
1、引入依赖
dependencygroupIdcom.dangdang/groupIdartifactIdelastic-job-lite-spring/artifactIdversion2.1.6-SNAPSHOT/version
/dependency
dependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactIdversion5.2.7.RELEASE/version
/dependency2、Zookeeper配置
elastic-job.zookeeper.nameSpace项目名称
3、实现SimpleJob重写excute()执行方法
public class MySimpleJob implements SimpleJob {Overridepublic void execute(ShardingContext shardingContext) {String name this.getClass().getSimpleName();int item shardingContext.getShardingItem; // 获取执行机器IDtry{// 要定时执行的业务代码} catch (Exception e) {}}
}
4、任务配置通过Job.xml进行任务配置
job:simpleidMySimpleJobclasscom.google.task.MySimpleJob -- 任务实现类路径 --overwritetrue -- 本地配置是否覆盖注册中心配置 --descriptionJob的中文描述event-trace-rdb-data-sourceJobEventDataSource -- 作业事件追踪的数据源Bean引用 --registry-center-refzookeeperRegistryCenter -- 注册中心 --cron0 0 1 * * ? -- 每天一点执行 --job-parameterAUTO -- 作业自定义参数 --sharding-total-count1 -- 分片总数 --job-sharding-strategy-typeROUND_ROBIN -- 分片策略 --job:listener classcom.google.task.listener.MyElasticJobListener / -- 监听器 --
/job:simple
还有以下常用配置项
sharding-item-parameters分片序列号和参数配置多个键值,逗号隔开分片序列号从0开始不能大于或等于分片总数0a,1b,2c
failover是否开启失效转移默认false
misfire是否开启错过任务重新执行默认true
executor-service-handler扩展作业处理线程池类 5、启动类 配置job.xml 通过Spring启动任务将自动加载
ImportResource(locations {classpath:spring/job.xml}) 三、分片策略
分片项即任务拆分的个数为数字从0开始 到 分片总数-1
Elastic-Job是将分片项 分配给各个服务器。
Elastic-Job自带了三种分片策略默认是 平均分片策略
1、平均分片AVG_ALLOCATION
根据分片项平均分片
如果 服务器数量与分片总数 无法整除多余的分片 将会顺序的分配至每一个任务服务器
2、奇偶分片ODEVITY
根据 任务名称哈希值的奇偶数 按任务服务器 IP升序或是降序的方式分片
任务名称哈希值是偶数按 IP地址 升序分片
任务名称哈希值是奇数按 IP地址 降序分片
3、轮询分片ROUND_ROBIN
根据作业名称轮询分片 四、失效转移
将分片总数设置为1运行多个服务器任务会以1主n从的方式执行。
Elastic-Job不允许执行过程中重新分片下次任务启动之前才能 重新分片所以 有服务宕机则未执行完成的任务只能下次任务启动再执行。开启失效转移 可以尽快执行。
失效转移一旦有执行任务的服务器崩溃或执行异常则会立即有其他服务器替补执行任务。
错过任务重执行在运行耗时较长且间隔较长的作业场景可以开启 “错过任务重执行” 是提升作业运行实时性的有效手段
misfiretrue 五、Elastic-Job 的3种作业类型
1、Simple类型即为简单实现未经任何封装的类型需实现SimpleJob接口该接口仅提供单一执行方法用于覆写此方法将定时执行。提供了弹性扩缩容和分片等功能
2、Dataflow类型用于处理数据流需实现DataflowJob接口该接口提供2个方法可供覆盖分别用于抓取(fetchData)和处理(processData)数据
3、Script类型即为脚本类型作业支持shellpythonperl等所有类型脚本。只需通过控制台或代码配置scriptCommandLine即可无需编码。执行脚本路径可包含参数参数传递完毕后作业框架会自动追加最后一个参数为作业运行时信息 六、Zookeeper的作用
1、Elastic-Job依赖Zookeeper 任务信息的存储任务名称、参与实例、任务执行策略等
2、Elastic-Job依赖Zookeeper 实现选举机制在任务执行实例数量变化时启动新实例或停止实例会触发选举机制来选举Leader让其去执行该任务。 参考Elastic-Job详细介绍