如何通过任务调度实现百万规则报警

简介:报警是一个公司的日常需求,常见的形态除了满足运维过程中的基础设施监控报警(CPU/内存/磁盘等)之外,部分公司也会在应用指标(如 QPS、RT 等)及业务指标(如 GMV/日活 等)上有相应的报警需求。

作者 | 黄晓萌

01 问题背景

报警是一个公司的日常需求,常见的形态除了满足运维过程中的基础设施监控报警(CPU/内存/磁盘等)之外,部分公司也会在应用指标(如 QPS、RT 等)及业务指标(如 GMV/日活 等)上有相应的报警需求。

在业务发展初期,基础设施较少,且应用形态单一,所以处理这一类需求往往会比较粗暴直接,但是随着业务的增长,尤其发展到日活百万甚至上亿级的时候,监控指标也会呈指数级上涨,在这种情况下对于报警体系就提出了巨大的挑战,如何解决这种体量下报警的有效性和时效性就成为了 IT 治理的重中之重。本篇文章,我们将从监控指标的体量出发,详解各个阶段报警体系中遇到的各个挑战。

02 一次常规的报警流程示意图

如下图所示,一次常规意义上的报警流程,主要会包含并发检查、齐全度检查、数据追补、阈值判断等核心环节。同时,为了保证报警的时效性,基本上整个流程会是一个秒级触发的形态,具体如下:

1.png

其中,报警后台任务处理系统是我们这次讨论的重点,几个核心流程的说明如下:

  1. 并发检查:检查当前告警规则是不是在其他进程或者节点中执行中,避免有些告警规则检查耗时过长,被重复执行了或被其他的任务节点抢占执行。
  2. 齐全度检查:获取当前告警规则对应的数据源的齐全度时间,即最新数据上报到什么时间了。因为数据源数据采集和上报一定会有延时的,如果数据不齐就进行检查,很容易漏报和误报。
  3. 数据查询:从监控数据中获取该规则的数据,一般会从收集上来的日志服务(如:ElasticSearch 服务等)或者基础监控指标存储服务(如:Zabbix、Prometheus 等)中获取。
  4. 数据追补:由某些报警任务设置的策略,没有数据点的情况下怎么处理。有补0,补满和不补三种。如在针对业务数据跌零报警的场景,我们会更倾向于补 0 ;但是针对 CPU 平均值超 80% 的场景,我们会倾向于不补。
  5. 阈值判断:根据获取的数据和报警条件,判断是否需要触发报警。
  6. 告警:将告警信息通过短信、钉钉、邮件等方式通知到配置的人,以便后续有人处理。

03 进程内调度方案

一开始的业务很少的时候,报警任务也趋于少数,这个时候一般的实现都会基于一个进程内的线程池执行相关的操作,架构图如下:

2.png

把上图的“后台任务处理系统”放到一台机器上运行,能很快速的满足小规模的场景。但是等到业务量持续上涨的时候,一台机器就出现了资源瓶颈,这个时候一个下意识的反应就是扩容上面的任务处理系统,让不同的 Server 处理不同的报警规则。但是随着报警规则在不断增加,负载的持续上涨会引起 Server 也会重启或者突然挂掉。于是高可用、任务幂等执行、failover 等分布式问题又是面临的一个复杂的难题。

04 分布式调度解决方案

如果任务数达到万级别,寻求一个轻量的分布式的方案是我们的目标。分布式调度方案的基本思路都是通过单独的任务调度中心来调度任务,报警后台只管执行任务,即任务调度和任务执行隔离的思路,使得两层都能做很好的横向扩容来达到容量上涨的目的。业务实现上,每个报警规则会生成一个定时任务,这样可以保证每个报警规则负载均衡地执行。开源市场有挺多产品,比如:Quartz、xxl-job、elastic-job 等。以 quartz 为例,示意图如下:

3.png

如上图所示,quartz 的每个 Server,会加载全量的所有任务,每次任务时间到了,所有 Server 会通过数据库抢锁,抢到锁的 Server 触发该任务给报警中心。

这个架构解决了任务的分布式调度、幂等执行的问题,并且执行层可以水平扩展,在任务量低的情况下可以稳定运行。

可是从上面的架构图可以看出,Quartz 的调度主要通过轮询 DB 和通过 DB 加锁的方式而实现,这个时候整个系统的吞吐基本上和 DB 的规格和性能息息相关。经测试,如果在任务量调度频率 1 分钟级别的触发达到1万,就会出现比较明显的调度延时。

05 基于 SchedulerX 2.0 的超大规模任务调度方案

1、SchedulerX 2.0 优势

SchedulerX 2.0 是阿里巴巴自研的一款商业化分布式任务调度平台,相对于开源任务调度系统,它有几大优势:

  • 支持海量任务
  • 自研轻量级分布式跑批模型
  • 可视化任务编排
  • 商业化报警
  • 可视化日志服务

4.png

SchedulerX2.0 基础架构图

与常见方案相比,SchedulerX2.0 会将任务分布式到不同的 Server 调度,每次任务调度也不需要抢锁触发,和数据库无任何交互,没有性能瓶颈。

2、高可用能力

在分布系统中最常见的就是高可用问题,如果 SchedulerX 2.0 的某个 Server 挂了会怎么办?

5.png

如上图所示,每个应用都会做三备份,通过 zk 抢锁,一主两备,如果某台 Server 挂了,会进行 failover,由其他 Server 接管调度任务。

6.png

3、商业化报警

SchedulerX 2.0 当前支持钉钉、短信、邮件三种报警通道:

7.png

支持任务失败、超时、无可用机器报警:

8.png

以钉钉告警为例,您可以实时收到报警:

9.png

06 总结

SchedulerX 2.0 在阿里巴巴集团内支撑了所有事业群的业务,经历了多次双十一的考验,当前在公有云已接入1000+家企业,在海量任务和高可用方面有充足的经验。显然,在超大规模任务调度领域,SchedulerX 2.0 已经是目前最优解决方案之一。

原文链接
本文为阿里云原创内容,未经允许不得转载。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/511982.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux无法关机 grub2,Ubuntu关机卡住无法关机如何解决?

电脑无法关机是最让人头疼的事,在Ubuntu系统中,有时会遇到关机卡住的情况,导致关不了机,遇到这种情况千万不要强制关机,下面小编就教你如何解决这个问题。解决方案:在终端用sudo vi打开/boot/grub/grub.cfg…

不用跑项目,组件效果所见即所得,绝了!

作者 | 零一来源 | 前端印象大家好,看到一个好东西,忍不住来分享一下。我们在写需求时都会封装一些组件,然后会为该组件定义一些 props ,使其跟业务分离,变得更通用。写完组件后需要验证一下组件的效果,也就…

Kubernetes 已经成为云原生时代的安卓,这就够了吗?

简介:本文将介绍如何在 Kubernetes 上构建新的应用管理平台,提供一层抽象以封装底层逻辑,只呈现用户关心的接口,使用户可以只关注自己的业务逻辑,管理应用更快更安全。 作者:司徒放 导语:云原生…

我们如何实现“业务 100% 云原生化,让阿里中间件全面升级到公共云架构”?

简介:在今年的天猫双 11 中,中间件支撑了 5403 亿的交易量,并全面升级到了公共云架构。 此次的架构升级,是以开源为内核、以公共云为基础、以 OpenAPI 进行解偶扩展,在架构上,对开源、自研、商业化进行统一…

两台电脑usb直连 linux,两台电脑怎么传文件没有网线(两台电脑usb直连)

对于两台电脑的数据传输而言,当下可通过各类社交(QQ,陌陌、微信.....)、传输(飞鸽传书、360快传......)软件都可以实现但由于各类软件需要下载安装以及相关软件学习使用成本,迫使很多用户都放弃了这种想法那么,今天我们对两台需要…

Gartner发布2022年数据分析十二大趋势:数据和分析将成为创新起源

数据与分析将会成为创新的起源,为企业发展创新助力同时,还将有基于数据的变现、降本增效,基于数据与分析的决策能力已成为有韧性企业的最核心能力。 作者 | 宋慧 出品 | CSDN 云计算 对数据的分析已经被企业与技术界愈加重视,国际…

重拾面向对象软件设计

简介:从上个世纪五十年代冯诺依曼创造第一台计算机开始,一直到现在只有短短70年时间,从第一门计算机语言FORTRAN,到现在我们常用的C,JAVA,PYTHON等,计算机语言的演进速度远超我们所使用的任何一…

数据与AI如何提升IT运维价值?锐捷发布乐享智能运维管理平台

运维的价值如何体现,听刚刚发布锐捷乐享智能运维管理平台的锐捷网络怎么说。 编辑 | 宋慧 出品 | CSDN云计算 运维可能是 IT 技术人中最苦的岗位。 IT系统运维工作就像安全一样,平稳运行不出事故是“份内事”,出了事故则要冲到修复一线。因此…

阿里云服务网格ASM集成SLS告警

简介:随着微服务的流行,微服务的架构也在不断的发展演进,Spring Cloud 与 Dubbo为代表的微服务开发框架也得到了普及和落地;在云原生时代,无侵入的服务网格(Service Mesh)开始走向成熟&#xff…

走进英特尔中国研究院探索创新日:发布最新科研成果与创新策略

如何穿越技术周期,英特尔揭秘创新策略与最新科研进展。 “2022英特尔中国研究院探索创新日”在北京举行。此次活动以“智探索汇无界”为主题,展示了英特尔中国研究院一系列前瞻性研究项目和创新成果。活动中,英特尔研究院副总裁、英特尔中国研…

零基础玩转SLS日志查询-SLS Query Builder发布

简介:日志服务(Log Service,简称 SLS) 是阿里云提供的行业领先的日志大数据解决方案,一站式提供数据收集、清洗、分析、可视化、告警等功能。智能查询分析是数据中台重要的一环,SLS支持秒级查询10亿到千亿级…

块存储监控与服务压测调优利器-EBS Lens发布

简介:SLS团队联合EBS团队发布了EBS Lens,针对块存储提供数据分析、资源监控的功能,可以帮助用户获取云上块存储资源信息与性能监控数据、提升云上块存储资源的管理效率、高效分析业务波动与资源性能消耗情况。 EBS监控现状 块存储是阿里云为…

阿里云 EventBridge 事件驱动架构实践

简介:我们认为 EventBridge 是云原生时代新的计算驱动力,这些数据可以驱动云的计算能力,创造更多业务价值。 作者:周新宇 本文内容整理自 中国开源年会 演讲 首先做一个自我介绍,我是 RocketMQ 的 PMC member 周新宇…

代理网关设计与实现(基于NETTY)

简介:本文重点在代理网关本身的设计与实现,而非代理资源的管理与维护。 作者 | 新然 来源 | 阿里技术公众号 一 问题背景 平台端购置一批裸代理,来做广告异地展现审核。从外部购置的代理,使用方式为:通过给定的HTTP …

Gartner 发布2022年数据分析十二大趋势:数据和分析将成为创新起源

作者 | 宋慧出品 | CSDN 云计算数据与分析将会成为创新的起源,为企业发展创新助力同时,还将有基于数据的变现、降本增效,基于数据与分析的决策能力已成为有韧性企业的最核心能力。对数据的分析已经被企业与技术界愈加重视,国际研究…

“2021ISIG中国产业智能大会低代码峰会”即将开幕,钉钉宜搭叶周全受邀出席

简介:2021年12月8-9日,“2021ISIG中国产业智能大会” 将在上海举行。阿里巴巴资深技术专家,钉钉宜搭创始人叶周全将作为特邀嘉宾出席大会。 2021年12月8-9日,由中国电子技术标准化研究院、苏州市金融科技协会、中国计算机用户协会…

在 react 里写 vue3 ? 还写了自定义 hooks和 Hoc 构建了响应式 !

作者 | 👽来源 | 前端Sharing前言自从vue3.0正式发布之后,vue3.0核心响应式部分被单独抽离成vue/reactivity包,也就是说,我们可以脱离vue框架之外,单独使用vue/reactivity做一些其他的愉快的事😊&#xff0…

阿里云云效发布研发协同工具,以新的产研协同工作方式助力实现BizDevOps

简介:2021云栖大会云效BizDevOps分论坛上,阿里云云效技术负责人陈鑫发布阿里云云效产品研发协同工具支撑ALPD理论,以新的产研协同工作方式助力实现BizDevOps。 编者按:10月21日,2021云栖大会云效BizDevOps分论坛上&am…

打通JAVA与内核系列之一ReentrantLock锁的实现原理

简介:写JAVA代码的同学都知道,JAVA里的锁有两大类,一类是synchronized锁,一类是concurrent包里的锁(JUC锁)。其中synchronized锁是JAVA语言层面提供的能力,在此不展开,本文主要讨论J…

android如何创建spinner组件,Andriod开发之下拉列表控件(Spinner)的用法

Spinner是Android的下拉列表控件,今天对这个控件进行了学习,发现该控件比其它简单控件使用起来稍微复杂,特地将Spinner控件的使用方法以及注意事项记录下来,以备后用。Spinner控件在Android中的继承结构如下:java.lang…