美文网首页netty
高性能架构设计-分布式定时任务

高性能架构设计-分布式定时任务

作者: 费列罗与小明 | 来源:发表于2019-11-25 20:27 被阅读0次

    前言背景

    在分布式架构中涉及到定时任务总是让人感觉到头疼,为了应对不断增长的定时任务数量,需要横向扩展节点线性的提升任务处理数量。本章节简要概述两种设计方案。一切只为高性能!

    一、数据结构设计

    数据存在redis当中(设计方案不同redis版本不同),数据结构采用有序集合,score存放任务执行的时间戳,value存放将要执行的任务的taskId,排序按照score升序排序。

    分布式定时任务表结构

    二、程序架构设计

    1、抢占式

    技术组件:redis(版本任意)

    设计思想:每个分布式实例均开启一个分布式定时任务的专有线程,方式采用抢占式,先到先得,每秒钟去redis中查询当前时刻以及之前的所有任务(根据score中存放的时间戳字段),查询后删掉防止其他实例获得(此处需要redis事务操作)。

    相关redis命令:

    watch key

    multi

    ZRANGEBYSCORE key -inf now()

    ZREMRANGEBYSCORE key -inf now()

    exec

    2、调度式

    技术组件:redis5.0(版本至少是5.0,因为5.0版本增加了zpopmin命令)、消息中间件(这里用rocketMQ)

    设计思想:抢占式的方案有明显缺点,如果任务集中在某一个时刻过多,有可能该时刻处理不完,所以方案需要优化就有了-调度式。实现一个调度系统专门用来处理任务调度,通过zcount命令查询出当前时间内可用的任务数量,然后除以实例数量,可以计算出每个实例处理多少任务,之后通过mq发送广播,这样每个实例收到广播消息知道对应的处理任务数,之后通过zpopmin命令(5.0版本新增)pop出任务数根据taskId执行即可。

    调度式分布式定时任务架构图

    本文章严禁转载!

    相关文章

      网友评论

        本文标题:高性能架构设计-分布式定时任务

        本文链接:https://www.haomeiwen.com/subject/drnjwctx.html