[置顶] 某大型银行深化系统技术方案之十:核心层之任务调度

传送门 ☞ Android兵器谱 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229

核心层

        核心层主要提供后台业务集中处理中最基本、共性的信息处理、流程调度和相关的管理功能,如任务调度、路由确定、事务一致性管理、任务拆解合并、优先级管理等。核心层对业务处理中的各项工作进行高度的抽象,只管理共性的属性和操作,功能相对简单,具有较高稳定性和处理效率,并对外部服务提供基础调用接口。

任务调度
        系统通过闭环PID控制器,实现对工作项的优先级调度。工作项优先级动态调整包括流程实例和工作项两个层次,在模态维度方面包括静态参数和动态参数,其次还应该包括仲裁参数、噪音参数等,优先级应该是以上几种参数的综合。


        随着时间的迁移,在无序控制下,完成的时间是无法预测的,对于稳定的系统而言,取决节点的个数和平均处理量。在时间优先级控制中,根据最大吞吐率原则,优先级将随着时间加速递增,对于一个系统而言,虽然大部分节点在处理后期才发现并及时的修正优先级,但由于没有考虑到流程的处理估算以及无法预知当前处理占整个流程的比重,节点的时间浪费在前提比较严重,就会产生负载不均匀现象。因此我们提出了PID闭关控制方式,目的是把每次处理的节点结合流程的关键路径以及系统的当前负载情况,通过这种参数控制来实现系统的均衡负载,同时保证业务流程的处理时间。
PID控制器就是根据系统的误差,利用比例、 积分、微分计算出控制量进行控制的。通过对系统的建模可以得到如下公式:


        其中APK(0)表示初始值,APK(t)表示当前时刻下该流程的优先级,取决于上一次的计算结果、剩余时间差值和当前噪音;K1,K2,K3 ,K4是该类流程的比例控制参数。该算法的目的是保证:
1.∑APK<=AMKT,即要流程能在估算的时间内尽早的完成。
2.∑∑APK<=∑AMKT,即对于批量任务,总时间不能超过任务的预期完成时间。


        其中WPK(0)表示初始值,WPK(t)表示当前时刻下该流程的优先级,取决于上一次的计算结果、剩余时间差值和当前噪音。K1,K2,K3 ,K4是该类工作项的比例控制参数。期望值是∑WPK<WKT,即要保证工作项能在估算的时间内尽早的完成。
        PID控制:利用PID控制可以实现工作项的合理调度,迭代公式:
        Output[下次] = Kp*P分量+Ki*I分量+Kd*D分量
             = Kp*Err+Ki*Σ(Err*Δt)+Kd*ΔErr/Δt
        其中,Err=Destination-Output。
        采用队列方式和基于B树的查找方式来实现基于PID控制的优先级动态调整,关键在于把公用的参数提取出来,实现预排序和B树搜索功能。预排序将当前时间参数t、当前系统运行统计G等与当前相关的信息需要从公式中剥离考虑,因此在优先级表中不会体现。
        因此,不难得到任务队列的计算模型如下:
1.定义Hash队列长度为HL,消耗一个工作项时间为WET,那么一个Hash队列完全消耗掉的时间为HET=HL*WET。
2.定义B+树最大容积为BL,完全消耗掉B+树内容的时间为BET=BL*WET
3.定义Buffer更新时间为CHT,长度为BUL,则存在:
        当BET+HET>CHT并且BUL<BL+HL时,系统才能保证队列的正常运作,即每次刷新队列池,从数据库查找和jms更新队列时间间隔要远小于队列的消耗时间。
        任务队列的更新效率为:CHT/(BET+HET),即队列每隔一段时间才更新的效率。
        任务队列的使用效率为:(BL+HL)/CHT,即系统能够提供的每秒消耗的工作量。

 

posted @ 2013-06-23 17:13  爱生活,爱编程  阅读(319)  评论(0编辑  收藏  举报