文档章节

taobao-pamirs-schedule2.0设计和实现的局限性

杨武兵
 杨武兵
发布于 2016/03/14 10:38
字数 1291
阅读 406
收藏 1

不适合简单的少量任务调度

问题描述

非常简单的定时调度任务,只是定时触发执行任务,这个任务量是非常少的,单机实现就可以的任务,这种场景使用taobao-pamirs-schedule就会存在开发、配置和使用非常繁琐的问题,需要很多的配置、编写更多的代码大,产生更多的对象和线程,这是非常不适合的。

解决方案

请根据具体使用场景选择本产品,大批量任务需要处理的场景才选择使用taobao-pamirs-schedule。少量任务定时调度的场景请使用Timer,Spring调度等简单的调度解决方案,如果要实现多实例的高可用,可以通过分布式锁来实现(比如redis,zookeeper等均可以实现)。

强依赖Spring


问题描述

该项目是强依赖Spring容器的,而且依赖的是Spring2.5.6.SEC02的版本。这样可能会跟集成应用本身的版本冲突。并且它的类TBScheduleManagerFactory是实现了Spring的接口ApplicationContextAware,因此若使用该工厂则必须在Spring环境下使用淘宝调度2.0.

解决方案

1.只在Spring环境下使用该项目。由于本项目对Spring的依赖较轻,只是依赖一个ApplicationContextAware接口,因此可以在Spring2.5.6以上的环境下都是可以的。

2.在非Spring环境下,可以重新编译该项目,创建一个不依赖于Spring接口的TBScheduleManagerFactory实现类。

调度频繁的场景资源消耗大


问题描述

项目的实现中可以看出调度重新恢复会创建Processor对象,又会创建和启动配置的多个线程,这是一个非常重的操作,当调度暂停后,重新恢复的时候又会重新创建新的对象,那么之前创建的对象和线程都会被销毁,对象和线程无法复用,当我们的调度在非常频繁的进行恢复和暂停之间切换的时候,会导致大量的对象和线程的创建及销毁,系统各种资源的损耗过大。

解决方案

1.避免配置一个非常短暂的调度启动和恢复间隔。

2.修改源码使得在调度和暂停切换的过程中可以复用Processor对象。

系统伸缩性受队列数限制

问题描述

淘宝调度的任务队列需要提前配置,系统启动后会将任务队列分配给制定调度管理器,任务队列和调度管理器的关系是1..n:1,也就是一个队列组多只能分配给1个调度管理器,因此调度管理器的数量受实现配置的队列数的约束,当我们在生产环境遇到任务量骤然增加的情况(比如电商系统的双十一、618大促)下,希望通过扩展机器来提高任务处理能力的时候就无法动态伸缩了。

解决方案

调度器改进:

改进调度的实现,增加动态增加任务队列的管理功能,动态增加后的队列可以分配给新增加的机器。

任务生产者改进:

任务生产者的队列数也应该可以通过管理器动态增加新的队列,生产系统可以动态的向新增加的队列增加任务。

数据库作为配置管理中心性能较差

问题描述

taobao-pamirs-schedule的默认配置管理中心的实现是基于数据库的,由于每个任务类型都会生成对应的管理器对象,管理器会维持心跳信息,定期的会调用更新信息接口维持自己的服务器心跳信息,还有很多信息的增删改查都会涉及到数据库的操作,并且有些操作还会利用数据库的锁,当服务器数据量较多的情况下,会比较容易出现性能瓶颈。

解决方案

使用其它一些高性能的、高可扩展的配置管理实现方案替代数据库,比如:zookeeper、reddis等实现配置管理器的功能,能够获得更好的性能,支持更高的并发方案。

taobao-pamirs-schedule项目3.0版本目前已经更名为tbschedule,它的配置管理中心的默认实现就是基于zookeeper实现的,项目主页参考:http://code.taobao.org/p/tbschedule/src/

它的基于zookeeper的配合管理中心请查看http://code.taobao.org/p/tbschedule/src/trunk/src/main/java/com/taobao/pamirs/schedule/zk/ScheduleDataManager4ZK.java


© 著作权归作者所有

杨武兵

杨武兵

粉丝 277
博文 61
码字总数 123254
作品 1
昌平
架构师
私信 提问
加载中

评论(5)

杨武兵
杨武兵 博主

引用来自“杨武兵”的评论

引用来自“夜礼服假面2”的评论

大神你好,能具体的讲解一下“调度频繁的场景资源消耗大”的解决方案么?新人,刚接到一个任务,出了一个问题,在调用TBSchedule服务是,频繁的注册,清除,求大神指点如何解决54

看了下,你这个是3.0版本的。我分析的是2.0,两者还是有很大的差异。

引用来自“夜礼服假面2”的评论

java.lang.NullPointerException java.lang.String.(String.java:554) com.taobao.pamirs.schedule.zk.ScheduleStrategyDataManager4ZK.loadStrategy(ScheduleStrategyDataManager4ZK.java:54) com.taobao.pamirs.schedule.zk.ScheduleStrategyDataManager4ZK.loadAllScheduleStrategy(ScheduleStrategyDataManager4ZK.java:112) org.apache.jsp.schedule.scheduleStrategyList_jsp._jspService(scheduleStrategyList_jsp.java:142) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)抛这个错。
这个错误还是挺明显的,打开源码调试一下,看看为什么会空指针,一层层往上追查下原因就能解决了。
夜礼服假面2

引用来自“杨武兵”的评论

引用来自“夜礼服假面2”的评论

大神你好,能具体的讲解一下“调度频繁的场景资源消耗大”的解决方案么?新人,刚接到一个任务,出了一个问题,在调用TBSchedule服务是,频繁的注册,清除,求大神指点如何解决54

看了下,你这个是3.0版本的。我分析的是2.0,两者还是有很大的差异。
java.lang.NullPointerException java.lang.String.(String.java:554) com.taobao.pamirs.schedule.zk.ScheduleStrategyDataManager4ZK.loadStrategy(ScheduleStrategyDataManager4ZK.java:54) com.taobao.pamirs.schedule.zk.ScheduleStrategyDataManager4ZK.loadAllScheduleStrategy(ScheduleStrategyDataManager4ZK.java:112) org.apache.jsp.schedule.scheduleStrategyList_jsp._jspService(scheduleStrategyList_jsp.java:142) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)抛这个错。
杨武兵
杨武兵 博主

引用来自“夜礼服假面2”的评论

大神你好,能具体的讲解一下“调度频繁的场景资源消耗大”的解决方案么?新人,刚接到一个任务,出了一个问题,在调用TBSchedule服务是,频繁的注册,清除,求大神指点如何解决54

看了下,你这个是3.0版本的。我分析的是2.0,两者还是有很大的差异。
杨武兵
杨武兵 博主

引用来自“夜礼服假面2”的评论

大神你好,能具体的讲解一下“调度频繁的场景资源消耗大”的解决方案么?新人,刚接到一个任务,出了一个问题,在调用TBSchedule服务是,频繁的注册,清除,求大神指点如何解决54

你的问题能够说得更明白一些吗?我不太理解。
夜礼服假面2
大神你好,能具体的讲解一下“调度频繁的场景资源消耗大”的解决方案么?新人,刚接到一个任务,出了一个问题,在调用TBSchedule服务是,频繁的注册,清除,求大神指点如何解决54
3.0.0全新改版,去除对数据库的依赖,通过zookeeper来实现配置数据存储,提供简单易用的Console

3.0.0全新改版,去除对数据库的依赖,通过zookeeper来实现配置数据存储,提供简单易用的Console http://code.taobao.org/p/taobao-pamirs-schedule/wiki/index/ 快速demo:http://code.taoba...

qhlhl
2012/02/10
3.3K
0
taobao-pamirs-proxycache源码分析学习与修改

taobao-pamirs-proxycache源码分析学习 --------------- 最近,由于公司业务量增长,对数据库的压力比较大,需要一款框架缓存查询结果,找到了淘宝的开源框架pamirs-proxycache,于是将其源码改改...

jason-寒江雪
2015/09/07
1K
5
taobao-pamirs-proxycache

taobao-pamirs-proxycache 是和业务代码完全隔离的缓存管理框架。

叶秀兰
2014/06/16
990
0
taobao-pamirs-schedule-2.0源码分析

taobao-pamirs-schedule-2.0源码分析,我们的生产环境中大量使用了该项目,因此才有了动机深入研究该项目,源码分析分享给大家。 http://my.oschina.net/ywbrj042/blog/626909...

杨武兵
2016/03/03
518
0
java定时调度器解决方案分类及特性介绍

什么是定时调度器? 我们知道程序的运行要么是由事件触发的,而这种事件的触发源头往往是用户通过ui交互操作层层传递过来的;但是我们知道还有另外一种由机器系统时间触发的程序运行场景。大...

杨武兵
2016/02/26
1K
4

没有更多内容

加载失败,请刷新页面

加载更多

Mybatis Plus性能分析

一、配置 /** * 性能分析 * @return */@Bean@Profile({"dev","test"})public PerformanceInterceptor performanceInterceptor (){ PerformanceInterceptor performanceInterceptor......

一个yuanbeth
24分钟前
4
0
一次写shell脚本的经历记录——特殊字符惹的祸

本文首发于微信公众号“我的小碗汤”,扫码文末二维码即可关注,欢迎一起交流! redis在容器化的过程中,涉及到纵向扩pod实例cpu、内存以及redis实例的maxmemory值,statefulset管理的pod需要...

码农实战
27分钟前
4
0
为什么阿里巴巴Java开发手册中不建议在循环体中使用+进行字符串拼接?

之前在阅读《阿里巴巴Java开发手册》时,发现有一条是关于循环体中字符串拼接的建议,具体内容如下: 那么我们首先来用例子来看看在循环体中用 + 或者用 StringBuilder 进行字符串拼接的效率...

武培轩
39分钟前
6
0
队列-链式(c/c++实现)

队列是在线性表功能稍作修改形成的,在生活中排队是不能插队的吧,先排队先得到对待,慢来得排在最后面,这样来就形成了”先进先出“的队列。作用就是通过伟大的程序员来实现算法解决现实生活...

白客C
48分钟前
65
0
聊聊nacos的notifyConfigInfo

序 本文主要研究一下nacos的notifyConfigInfo CommunicationController nacos-1.1.3/config/src/main/java/com/alibaba/nacos/config/server/controller/CommunicationController.java @Cont......

go4it
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部