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

作者 | 黄晓萌

01 问题背景

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

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

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

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

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

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

03 进程内调度方案

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

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

04 分布式调度解决方案

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

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

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

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

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

1、SchedulerX 2.0 优势

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

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

SchedulerX2.0 基础架构图

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

2、高可用能力

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

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

3、商业化报警

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

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

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

06 总结

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

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

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

  1. 百万级报警平台的架构设计与实现

    本文根据肖双2018年10月19日在[第十届中国系统架构师大会]上的演讲内容整理而成. 讲师介绍: 肖双,去哪儿网高级运维开发,目前负责去哪儿网监控系统的设计.开发和运维工作,对DevOps理念有深入 ...

  2. 任务调度系统就该这么设计(万能通用),稳的一批!

    点击上方"芋道源码",选择"设为星标" 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | ...

  3. 实现一个任务调度系统,这篇文章就够了

    阅读一篇「定时任务框架选型」的文章时,一位网友的留言电到了我: 我看过那么多所谓的教程,大部分都是教"如何使用工具"的,没有多少是教"如何制作工具"的,能教&q ...

  4. 聊聊分布式任务调度系统

    我看过那么多所谓的教程,大部分都是教"如何使用工具"的,没有多少是教"如何制作工具"的,能教"如何仿制工具"的都已经是凤毛麟角,中国 软件行 ...

  5. 20 张图告诉你,如何实现一个任务调度系统

    阅读一篇「定时任务框架选型」的文章时,一位网友的留言电到了我: 我看过那么多所谓的教程,大部分都是教"如何使用工具"的,没有多少是教"如何制作工具"的,能教&q ...

  6. quartz框架_定时任务调度框架Quartz

    最近需要写一个每天定点自动执行的定时任务,对于以前自己写小项目,可能会选择java自带的Timer类,但是对于公司中的项目,Timer类实现定时任务只能有一个后台线程执行任务,并且只能让程序按照某个频 ...

  7. Prometheus Alertmanager报警组件

    全栈工程师开发手册 (作者:栾鹏) 架构系列文章 Prometheus Alertmanager 概述 Alertmanager与Prometheus是相互分离的两个组件.Prometheus服务器根 ...

  8. Prometheus监控告警规则

    Prometheus监控MongoDB报警规则.MySQL报警规则.Nginx报警规则.Redis报警规则. MongoDB报警规则 报警名称 表达式 采集数据时间(分钟) 报警触发条件 Mongod ...

  9. 轻松掌控全链路服务监控:方案概述与对比 | 真的很干!

    点击上方"搜云库技术团队",选择"设为星标" 回复"1024"或"面试题"获取4T学习资料 0 - 问题背景 随着微服务 ...

最新文章

  1. chgrp 简明笔记
  2. Java线程详解(13)-锁
  3. mysql order by 日期_mysql order by基于时间的盲注
  4. python程序开子进程打包成exe文件运行炸内存原因剖析
  5. 网狐棋牌(五) TCPSocketEnging分析
  6. linuxmint安装开发工具_vscode如何安装在Linuxmint系统_编程开发工具
  7. 微信公众号开发-接入
  8. 即时通讯开发----回音消除技术
  9. 为RedHat系统安装发布版的PostgreSQL数据库
  10. rails 开发随手记 9
  11. 刷新后保持大分类和小分类的展开状态
  12. 基于python处理问卷数据并进行卡方分析全流程
  13. 空间四点定位原理及应用
  14. 2015 年度新增开源软件排名TOP100
  15. 快应用是什么软件?快应用有什么用?
  16. android平板刷成windows,安卓系统的平板电脑可以刷成windows系统吗?
  17. 数据库数据增删改查练习题(1)——学生选课数据库
  18. 【Oracle】一条SQL的一生
  19. 学linux作用,linux有必要学吗?学linux有什么作用,学linux能干什么
  20. Maze_AI: 一款基于 Python + Pygame + AI 算法的迷宫小游戏

热门文章

  1. 如何实现文件互拖-VMware Tools (ubuntu系统)安装详细过程与使用
  2. postgresql 客户端_一款功能强大的数据库客户端:DataGrip
  3. 狸窝音频剪辑软件_「附下载链接」常用的5款视频格式转换软件,收藏起来吧...
  4. c++ 二维数组 排序_漫画:“排序算法” 大总结
  5. 成为一名成功的程序员要做到以下10点?网友:是真的吗?
  6. 小白学习Java技术知识点总结,其实学习Java没那么难
  7. 做为一名java高级程序员,需要了解哪些岗位?
  8. windows7系统适合哪个python_Python3.6.4在Windows7系统下安装配置教程
  9. python怎么理解_讨论 - 廖雪峰的官方网站
  10. python定位元素在列表中的位置_python定位列表元素