转自:https://blog.csdn.net/u011955252/article/details/78776851

一:我们先思考下面几个业务场景的解决方案:

-  支付系统每天凌晨1点跑批,进行一天清算,每月1号进行上个月清算
-  淘宝整点抢购,商品价格8点整开始优惠
-  12306购票系统,超过30分钟没有成功支付订单的,进行回收处理
-  商品成功发货后,需要向客户发送短信提醒

>类似的业务场景非常多,我们怎么解决?

二:为什么我们需要定时任务

很多业务场景需要我们某一特定的时刻去做某件任务,定时任务解决的就是这种业务场景。一般来说,系统可以使用消息传递代替部分定时任务,两者有很多相似之处,可以相互替换场景。如,上面发货成功发短信通知客户的业务场景,我们可以在发货成功后发送MQ消息到队列,然后去消费mq消息,发送短信。

但在某些场景下不能互换:

a)时间驱动/事件驱动:内部系统一般可以通过时间来驱动,但涉及到外部系统,则只能使用时间驱动。如怕取外部网站价格,每小时爬一次

b)批量处理/逐条处理:批量处理堆积的数据更加高效,在不需要实时性的情况下比消息中间件更有优势。而且有的业务逻辑只能批量处理。如移动每个月结算我们的话费

c)实时性/非实时性:消息中间件能够做到实时处理数据,但是有些情况下并不需要实时,比如:vip升级

d)系统内部/系统解耦:定时任务调度一般是在系统内部,而消息中间件可用于两个系统间

三:任务框架需要考虑的点

单线程或多线程
任务延时时是丢失还是继续延时
串行还是并行
异常是否影响

四:java有哪些定时任务的框架

>单机

-   timer:是一个定时器类,通过该类可以为指定的定时任务进行配置。TimerTask类是一个定时任务类,该类实现了Runnable接口,缺点异常未检查会中止线程

-   ScheduledExecutorService:相对延迟或者周期作为定时任务调度,缺点没有绝对的日期或者时间

-   spring定时框架:配置简单功能较多,如果系统使用单机的话可以优先考虑spring定时器

优点:简单
缺点:无法高可用,即节点挂了,任务不能跑

>集群

-  Quartz:Java事实上的定时任务标准。但Quartz关注点在于定时任务而非数据,并无一套根据数据处理而定制化的流程。虽然Quartz可以基于数据库实现作业的高可用,但缺少分布式并行调度的功能

优点:保证高可用,即节点挂了,其它节点仍然可以替代
缺点:同一次任务促发只能一个节点执行,其它节点将不执行任务,性能低,浪费资源

>分布

-  TBSchedule:阿里早期开源的分布式任务调度系统。代码略陈旧,使用timer而非线程池执行任务调度。众所周知,timer在处理异常状况时是有缺陷的。而且TBSchedule作业类型较为单一,只能是获取/处理数据一种模式。还有就是文档缺失比较严重
-  elastic-job:当当开发的弹性分布式任务调度系统,功能丰富强大,采用zookeeper实现分布式协调,实现任务高可用以及分片,目前是版本2,并且可以支持云开发
-  Saturn:是唯品会自主研发的分布式的定时任务的调度平台,基于当当的elastic-job 版本1开发,并且可以很好的部署到docker容器上,实现正真的弹性

优点:可以实现高可用和高性能,将任务分片,分配到多个节点执行,并且支持弹性伸缩,节点可以动态增加删除
缺点:复杂,依赖第三方分布式协调组件

分布式开发--分布式定时任务相关推荐

  1. 分布式开发与集群式开发

    分布式开发与集群开发 一.分布式开发 分布式开发和分布式应用开发是两个不同的概念. 分布式开发:是讲隔离开发配合或者透明开发配合的一个开发模式,本质是工作模式. 分布式应用开发:是讲分布式应用服务系统 ...

  2. 安排,谷粒商城java分布式开发基础篇高级篇与高可用集群架构篇2020

    来源: 来自网络,如侵权请告知博主删除????. 仅学习使用,请勿用于其他- 最近有小伙伴管我要分布式这类的项目,还有一些要商城的,还有要springboot,springcloud,k8s等,几乎涵 ...

  3. WCF分布式开发步步为赢(12):WCF事务机制(Transaction)和分布式事务编程

    今天我们继续学习WCF分布式开发步步为赢系列的12节:WCF事务机制(Transaction)和分布式事务编程.众所周知,应用系统开发过程中,事务是一个重要的概念.它是保证数据与服务可靠性的重要机制. ...

  4. WCF分布式开发步步为赢(1):WCF分布式框架基础概念

     众所周知,系统间的低耦合一直是大型企业应用系统集成追寻的目标,SOA面向服务架构的出现为我们的如何利用现有企业系统资源进行企业ERP系统设计和实现提供了重要的参考原则.SOA如此炙手可热,各大厂商都 ...

  5. WCF分布式开发步步为赢(15):错误契约(FaultContract)与异常处理(ExceptionHandle)

    今天学习WCF分布式开发步步为赢系列的15节:错误契约(FaultContract)与异常处理(ExceptionHandle).本节内容作为WCF分布式开发的一个重要知识点,无论在学习还是项目中都应 ...

  6. WCF分布式开发步步为赢(0):WCF学习经验分享,如何更好地学习WCF?

    WCF分布式开发学习,应该从哪里开始? 微软WCF Web服务 Web API学习群 339444457 微软ASP.NET MVC 4 Web编程群     44206115 学习WCF是不是就不需 ...

  7. [zz]WCF分布式开发步步为赢(0):WCF学习经验分享,如何更好地学习WCF?

    WCF分布式开发学习,应该从哪里开始?    学习WCF是不是就不需要学习Enterprise Sevices(COM+).Net Remoting.Web Service(ASMX).WSE3.0和 ...

  8. WCF分布式开发步步为赢系列

    众所周知,系统间的低耦合一直是大型企业应用系统集成追寻的目标,SOA面向服务架构的 出现为我们的如何利用现有企业系统资源进行企业ERP系统设计和实现提供了重要的参考原则.SOA如此炙手可热,各大厂商都 ...

  9. hadoop jar包_【大数据学习】Hadoop的MR分布式开发小实战

    前提:hadoop集群应部署完毕. 一.实战科目 做一个Map Reduce分布式开发,开发内容为统计文件中的单词出现次数. 二.战前准备 1.本人在本地创建了一个用于执行MR的的文件,文件中有209 ...

  10. 分布式开发必须了解的Zookeeper的Leader选举机制(源码解析)

    分布式开发必须知道的Zookeeper知识及其的Leader选举机制(ZAB原子广播协议)   ZooKeeper是Hadoop下的一个子项目,它是一个针对大型分布式系统的可靠协调系统,提供的功能包括 ...

最新文章

  1. linux iptables 命令简介
  2. 在oracle中通过connect by prior来实现递归查询!
  3. 基于SuperSocket的IIS主动推送消息给android客户端
  4. Linux IPC实践(5) --System V消息队列(2)
  5. 5.7 Components — Sending Actions From Components to Your Application
  6. frame页面跳转和信息提示页面
  7. 在linux系统中下载thchs30,aishell数据处理为thchs30格式
  8. linux通过数字权限设置密码,linux--权限管理和用户管理
  9. 美国航天能力断层严重
  10. 树链剖分解析---WYD
  11. 深度强化学习(深度Q学习
  12. 【CS224n】(lecture1)课程介绍和word2vec
  13. 宏想固态无法格式化,SM2258XT主控开卡成功经验,SM2259XT可参考
  14. 数字1的ASCII值是多少
  15. 【2019年05月10日】指数估值排名
  16. 乾坤大挪移——使用PQ分区魔术师扩大C盘空间
  17. Tegra X2 系统上安装 openpose
  18. 【PyTorch】CUDA error: device-side assert triggered
  19. C语言示例分析-乒乓球抽取
  20. java 用户登录界面代码_求JAVA实现用户登录界面代码?

热门文章

  1. spark java mysql 连接数据库_Spark入门:通过JDBC连接数据库(DataFrame)
  2. 手机自动关机故障分析与维修
  3. “挑战杯”中国大学生创业计划竞赛创业企划书100篇(二)- 武汉思睿锦程环保建材科技有限公司创业计划书(材料类)...
  4. Python 去掉空格的方法
  5. Django项目——报错处理
  6. js 随机选取动画_jquery实现随机运动动画
  7. 双系统重装Ubuntu
  8. 连的共享打印机显示服务器脱机,打印机显示服务器脱机
  9. Kindeditor使用常见问题
  10. 《Adobe Flash CS6中文版经典教程》——1.10 修改内容和舞台