业务背景:
XX系统为支撑电商平台的微服务系统,系统为电商平台提供搜索页、四级页、加入购物车等提供查找货源唯一四要素接口服务,通过商品主数据、上下架信息、销售范围、供应链规则、售价、库存等信息计算获取货源,并通过售价、库龄、时效等比较获得最优货源。
系统设计:
为了支撑高并发,高访问的业务特性,系统在设计的时候考虑在每晚凌晨计算所有商品的货源信息(称为全量计算),计算完成后,如果外围系统通过MQ(消息队列)同步来的数据影响到查找货源的计算,则会将影响的商品数据异步的放入动因范围表中,JOB扫描动因范围表,重新计算受影响商品的货源(称为动因计算)。
对外提供的服务接口直接在已有货源的基础上进行过滤,计算。
系统实现(全量计算&动因计算):
由于每天计算量巨大,因此会使用多台机器进行并行计算。需要解决如何调度这些机器有条不紊的计算?
设计调度方案如下:
1. 按照商品编码后三位 000-999分为1000个号段 建立任务调度表
2. 多台机器每个机器都有各自唯一的jobID,争抢号段进行计算,如果抢到该号段,将号段设置为执行状态,锁定该号段后通过该号段查询对应商品进行计算。
Question? --- 多台机器争抢号段,可能发生同时update一条号段记录的情况,对数据库也存在压力,这里为了减少数据库碰撞,设计为构建一个redis的缓存list队列,将所有待处理号段初始化进去,每个机器争抢的时候从list中取出一个号段,然后update,这样减少了碰撞,保证按照顺序执行。
这样设计的好处是资源(机器)和调度任务解耦,并且也保证了高可用性 就算部分机器挂掉,也能保证正常计算。
详细实现:
1. 任务调度表
/*'号段争抢调度表'*/ CREATE TABLE TASK_SCHEDULE ( id INTEGER AUTO_INCREMENT PRIMARY KEY, post_num VARCHAR(10) NOT NULL /*'号段(000-999)'*/ , handle_status INTEGER NOT NULL /*'处理状态 0 待处理 1 在执行 2 已完成 3 异常'*/, jobID VARCHAR(10) /*'抢到该号段的jobID'*/ ) ENGINE=INNODB DEFAULT CHARSET=utf8;
2. 逻辑流程图
3 其他
为了保证全量计算的高效率及高可用性,设计表会有A,B两套表,每天用一套表,在全量计算的时候,清空更新时间最老的表,然后将计算结果插入,如果全部计算成功,进行切表操作,保证了高可用。
相关推荐
针对大多数现有的异构系统调度算法没有考虑由多类任务特别是抢占式任务所引起的可用性需求的不足,在现有基于可用性的非抢占式任务调度算法的基础上,通过计算任务的平均等待时间来确定优先级等级,对异构系统中多类...
c语言版本,使用数据结构简单实现抢占式动态优先级调度算法
1、实验目的 通过动态优先权算法的模拟加深对进程概念和进程调度过程的理解 2、实验内容 (1)用C语言来实现对N个进程采用动态优先权优先算法的进程调度 (2)每个用来标示进程的PCB用结构来描述,包括字段如下: ...
抢占式进程调度算法代码.doc
c语言版本,使用数据结构简单实现抢占式短进程优先调度算法
在分析了非抢占式EDF调度算法的可调度性判定条件基础上,提出了基于非抢占式EDF调度算法下周期性任务最小相对截止期的计算算法。算法通过逐渐增加任务的相对截止期直到使任务集变为可调度的方式,实现某个任务相对...
针对此类调度问题,分析其特点,明确其与已有调度模型研究问题的区别,提出新的非抢占式周期任务调度模型,并证明了该类问题为NP完全问题。在此基础上,给出了一种求解最优解的模式剪枝算法,以及一种求解近似解的...
c#环境编写的一个模拟IO系统实现进程的抢占式优先权调度算法,设计简单。希望可以给大家带来小小帮助
用实验的方法解释了ecos线程调度的原理和现象,本文档是了解ecos线程调度的最佳文档。
操作系统课程中 处理机调度中 模拟非抢占优先权调度算法的实现
进程调度算法包括先来先服务调度算法、最短作业时间优先(抢占式和非抢占式)、最高响应比调度算法4种。(每个人必须做FCFS,然后在后面的三种中任选一种,即每个人必须做2种调度算法的模拟。) [2]. 衡量算法性能的...
操作系统实验,抢占式短作业优先算法,结合内存管理,实现进程调度
汇总了gmp原理的流程,以及常见的阻塞和抢占
进程调度 非抢占短作业优先算法源代码(C语言)操作系统课程设计
ucos-II是基于任务优先级抢占式任务调度法的,就是内核在管理调度时,调用任务切换,在中断服务程序中不允许进行任务调度
介绍了新的调度系统,包括资源调度、应用编排、配置标签中心、云网络和云存储服务等子...通过优化点对点大数据量读取的资源调度,解决网络风暴造成的影响;通过网络和磁盘隔离技术以及可抢占的方式来保证服务等级协议。
2. ... 4. unsigned short add_priority 5. } 2. { 3. ... 1. int sys_setpriority(in
进程调度模拟设计--先来先服务、非强占式短进程优先算法 ,我们刚做完这个课程设计,把自己写的和网上下载的都传上来,希望大家稀饭
具有六个调度算法先来先服务算法,可抢占式调度短作业调度算法轮转式调度算法 非抢占式调度