学成day5(分布式任务调度,数据库索引,.avi视频处理流程,ExecutorService,CountDownLatch)

本文介绍了分布式任务调度的关键特性,包括并行任务调度、高可用、弹性扩容和任务管理,强调了避免任务重复执行的重要性。同时,讨论了数据库索引的概念和工作原理,如B-Tree索引,以及不同类型的索引。此外,提到了Java的ExecutorService线程池和CountDownLatch在多线程协调中的作用。
摘要由CSDN通过智能技术生成

一、分布式任务调度

任务调度顾名思义,就是对任务的调度,它是指系统为了完成特定业务,基于给定时间点,给定时间间隔或者给定执行次数自动执行任务。

一个服务往往会部署多个冗余实例来运行我们的业务,在这种分布式系统环境下运行任务调度,我们称之为分布式任务调度

分布式调度要实现的目标:

1、并行任务调度

        并行任务调度实现靠多线程,如果有大量任务需要调度,此时光靠多线程就会有瓶颈了,因为一台计算机CPU的处理能力是有限的。

        如果将任务调度程序分布式部署,每个结点还可以部署为集群,这样就可以让多台计算机共同去完成任务调度,我们可以将任务分割为若干个分片,由不同的实例并行执行,来提高任务调度的处理效率。

2、高可用

        若某一个实例宕机,不影响其他实例来执行任务。

3、弹性扩容

        当集群中增加实例就可以提高并执行任务的处理效率。

4、任务管理与监测

        对系统中存在的所有定时任务进行统一的管理及监测。让开发人员及运维人员能够时刻了解任务执行情况,从而做出快速的应急处理响应。

5、避免任务重复执行

        当任务调度以集群方式部署,同一个任务调度可能会执行多次,比如在上面提到的电商系统中到点发优惠券的例子,就会发放多次优惠券,对公司造成很多损失,所以我们需要控制相同的任务在多个运行实例上只执行一次。

二、数据库索引 

什么是索引?

索引是数据库表中的字段的索引,所谓的索引就是在表的字段上添加的,每个字段都可以添加索引来提高查找效率,也可以多个字段联合添加一个索引。

参考字典的实现,索引相当于字典的目录,通过目录缩小查找范围。

索引的实现原理
假设有一张用户表:t_user
 
    id(PK)                  name                        每一行记录在硬盘上都有物理存储编号
    ----------------------------------------------------------------------------------
    100                     zhangsan                    0x1111
    120                     lisi                               0x2222
    99                       wangwu                     0x8888
    88                       zhaoliu                       0x9999
    101                     jack                            0x6666
    55                       lucy                            0x5555
    130                     tom                            0x7777

 不管索引存储在哪里,索引在mysql当中都是一个树的形式存在。(自平衡二叉树:B-Tree)

假如sql语句是:select * from t_user where id = 101;

条件是id = 101,mysql发现id字段上有索引对象,所以会通过索引对象进行查找:

101比100大,看右边

101比120小,看左边

定位到101,通过定位到的101得出对应的物理编号0x6666,就会转换sql语句成:

select * from t_user where 物理编号 = 0x6666;

直接通过物理编号0x6666定位到存储的记录

101                     jack                            0x6666,

返回给用户。

假如id字段没有索引的话,他会到id字段上,进行从上到下查找,直至找到101,效率很低。

 索引的类型

分单列索引、组合索引和全文索引

单列索引:

  • 主键索引,数据库表的主键字段会自动创建索引。
  • 唯一索引,当某个列添加了Unique约束,也会自动创建唯一索引,要求值必须是唯一的。
  • 普通索引,给普通字段添加索引就是普通索引。

组合索引:

        多个字段合起来创建一个索引,只有当查询条件中使用了组合索引的第一个字段,索引才会被使用,使用组合索引是遵循最左前缀原则。
CREATE INDEX index_id_name ON mytable(id,name);

三、.avi视频处理流程 

  1. 任务调度:xxljob调度中心通过定时调度,开启服务层的任务,此处配置阻塞策略为丢弃后续进度,配置调度过期策略为忽略
  2. 服务层访问数据库,得到需要处理的任务的列表,并开启线程池(大小与任务数相同)和计数器,随后多线程处理,每个线程的任务为:从任务属性中获取文件路径,根据路径从Minio中下载文件,后利用工具类转码,将转码后的文件上传到Minio,最后修改媒资表、媒资任务表和媒资任务历史表的内容(status,url等)

四、ExecutorService 

 ExecutorService是Java提供的线程池,也就是说,每次我们需要使用线程的时候,可以通过ExecutorService获得线程。它可以有效控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞,同时提供定时执行、定期执行、单线程、并发数控制等功能

固定线程数线程池(暂时先认识这个)

Executors.newFixedThreadPool(3);

五、CountDownLatch

 原文章:CountDownLatch_半桶水的码农的博客-CSDN博客

CountDownLatch的作用很简单,就是一个或者一组线程在开始执行操作之前,必须要等到其他线程执行完才可以。我们举一个例子来说明,在考试的时候,老师必须要等到所有人交了试卷才可以走。此时老师就相当于等待线程,而学生就好比是执行的线程。 

我们使用学生考试的案例来进行演示:

在上面,我们定义了一个CountDownLatch,并设置其值为2。有两个学生使用两个线程来表示,然后依次执行。最后老师线程(main线程)在学生线程都执行完了才可以执行。我们来运行一边看看结果。

现在我们应该能体会到其用法了吧。在上面我们的等待线程时老师(main线程)。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值