流媒体视频点播网站 scheduler 调度器模块实现

scheduler 层

  1. 什么是scheduler

调度器(scheduler)是一个负责协调和分配计算资源的组件或程序。它的主要任务是决定何时、何地以及如何执行任务或进程。调度器通常用于操作系统、并发编程和分布式系统中。

在操作系统中,调度器负责管理和分配CPU时间片给不同的进程或线程。它根据一定的调度算法,如先来先服务(FCFS)、最短作业优先(SJF)、时间片轮转(RR)等,决定哪个进程或线程应该在给定的时间片内运行。

在并发编程中,调度器用于协调多个并发任务的执行。它可以根据不同的调度策略,如优先级调度、公平调度等,决定哪个任务应该获得执行权,并在不同的执行上下文之间进行切换。

在分布式系统中,调度器用于分配和管理分布式计算资源。它可以根据任务的需求和资源的可用性,决定将任务分配给哪些计算节点,并监控任务的执行情况。

总之,调度器在软件工程中起着重要的作用,它能够有效地管理和分配计算资源,提高系统的性能和资源利用率。

  1. 为什么需要scheduler

因为我们的系统中有异步任务需要处理,比如说延时删除视频,为什么需要延时删除视频呢?因为我们视频网站可能会有审计审查,恢复视频之类的需求,我们删除数据的时候一般会做伪删除,就是用户已经看不到视频了,但是其实在后台视频还是存在的,这个时候就会把这个任务下发到scheduler,由scheduler调度比如说过一周,或者过一个月才会真正的删除视频。

  1. scheduler通常做什么

一般用来处理瞬时可能并不会收到结果的异步任务,或者是那种周期性的任务。

本项目 scheduler 架构

  1. RESTful的http server

scheduler 也是一个微服务,所以肯定需要有http server。scheduler的http server工作主要是先接收任务然后写到我们自己的scheduler里面,让scheduler知道哪些视频是需要删除的。

  1. Timer

定时器,因为scheduler都是定时触发或者是周期性出发,所以肯定需要一个定时器。

  1. 生产者/消费者模型下的task runner

task runner就是我们Timer每触发的时候他下面的任务该是怎么做的,很多情况下实际上我们的任务会分成两种情况,第一种是读取任务,第二个是执行任务。读取跟执行实际上可以分开成完全分开的模块,所以我们就用最常见的设计模式——生产者消费者模式来做这个task runner。

55052c1c67b646408942aa76baea4011.png

我们整个大的框架由timer来启动,我们的timer里面有一个task runner,由三部分组成,分别是dispatcher,executor和channel,实际上也就是我们的生产者消费者,然后他们之间通过Go语言的原生channel来通信,这样的话dispatcher会把它得到的任务或者是内容通过channel发送给executor,那么excuter就会去读这些内容然后执行相关操作,这就是整个scheduler的架构和需要做什么。

scheduler代码架构

scheduler也是一个单独的服务,所以单独成一个文件,来看scheduler的代码架构:

scheduler
├── dbops
├── handler.go
├── main.go
├── response.go
└── taskrunner
    ├── defs.go          // 定义任务相关的常量和结构体
    ├── runner.go        // 任务运行器,负责调度和执行任务
    ├── task.go          // 定义任务的接口和具体实现
    └── tsmain.go        // 任务调度器的主程序入口文件
posted @ 2023-07-17 00:04  JIeJaitt  阅读(29)  评论(0编辑  收藏  举报