当前位置: 首页 > 后端技术 > Java

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

时间:2023-04-01 16:13:48 Java

简介:告警是一个公司的日常需求。一些公司在运维过程中除了满足基础设施监控告警(CPU/内存/磁盘等)外,还会对应用指标(如QPS、RT等)和业务指标有相应的告警需求(例如GMV/日常活动等)。作者|HuangXiaomeng01问题背景告警是公司的日常需求。除了满足运维过程中的基础设施监控告警(CPU/内存/磁盘等)外,一些公司还使用指标(如QPS、RT等)和业务指标(如GMV/日活)等)都有相应的报警要求。业务发展初期,基础设施少,应用形式单一,处理这类需求往往比较粗糙直接。但是随着业务的增长,尤其是发展到百万级甚至上亿级的日常活动,监控指标也变得困难起来。在这种情况下,对报警系统提出了巨大的挑战。如何解决这个体量下告警的有效性和及时性成为IT治理的重中之重。在本文中,我们将从监控指标量入手,详细讲解报警系统在各个阶段遇到的挑战。02下图是一个例行报警流程示意图。常规告警流程主要包括并发检查、完整性检查、数据补充、阈值判断等核心环节。同时,为了保证报警的及时性,基本上整个过程都会秒级触发,具体如下:其中,报警后台任务处理系统是我们这次讨论的重点。几个核心流程的描述如下:并发检查:检查当前告警规则是否正在其他进程或节点执行,避免一些告警规则检查时间过长,重复执行,或被其他任务抢占执行的节点。完整性检查:获取当前告警规则对应的数据源的完整性时间,即最新一条数据上报的时间。因为数据源的数据收集和报告会有延迟,如果数据不完整,就会被检查,很容易漏报和误报。数据查询:从监控数据中获取规则的数据,通常是从采集的日志服务(如:ElasticSearch服务等)或基础监控指标存储服务(如:Zabbix、Prometheus等)获取。数据补充:一些报警任务设置的策略,没有数据点的情况下如何处理。填充有0、填充和不填充三种。比如在业务数据归零告警的场景下,我们更倾向于填写0;但对于平均CPU超过80%的场景,我们倾向于不填写。阈值判断:根据获取到的数据和告警情况,判断是否需要触发告警。告警:通过短信、钉钉、邮件等方式将告警信息通知配置人,以便后续有人处理。03当进程内调度方案一开始业务很少时,告警任务数趋于少。这时候一般的实现都会基于一个进程内的线程池来进行相关的操作。架构图如下:上图“处理系统”中的“后台任务”可以单机运行,可以快速满足小规模场景。但是当业务量不断上升的时候,一台机器就出现了资源瓶颈。这时候一个下意识的反应就是扩展上面的任务处理系统,让不同的服务器处理不同的告警规则。但是随着告警规则的不断增加,负载的不断增加会导致服务器突然重启或者挂掉。因此,高可用、任务的幂等执行、故障转移等分布式问题又是一个复杂的问题。04分布式调度方案如果任务数达到数万,寻求轻量级的分布式方案是我们的目标。分布式调度方案的基本思想是通过一个单独的任务调度中心来调度任务,报警后台只执行任务,即任务调度和任务执行隔离的思想,让两层都可以做做好横向扩张,达到产能增加的目的。在业务实现上,每条报警规则都会生成一个定时任务,可以保证每条报警规则的负载均衡执行。开源市场上有很多产品,比如:Quartz、xxl-job、elastic-job等,以quartz为例,示意图如下:如上图所示,quartz的每个server都会全部加载所有任务,每次任务时间到,所有服务器都会通过数据库抢锁,抢到锁的服务器会触发任务给报警中心。该架构解决了任务的分布式调度和幂等执行问题,执行层可以横向扩展,在任务负载较低时也能稳定运行。但是从上面的架构图可以看出,Quartz的调度主要是通过轮询DB和锁定DB来实现的。这时候整个系统的吞吐量基本和DB的规格和性能密切相关。经过测试,如果在1分钟的任务调度频率级别触发次数达到10000次,会出现明显的调度延迟。05基于SchedulerX2.0的超大规模任务调度方案一、SchedulerX2.0的优势SchedulerX2.0是阿里巴巴自研的商用分布式任务调度平台。开发轻量级分布式批量运行可视化任务调度模型商业化告警可视化日志服务SchedulerX2.0基础架构图SchedulerX2.0与普通方案相比,会将任务分发到不同的服务器调度,每个任务调度不同,需要抢锁触发器,不与数据库交互,不存在性能瓶颈。2、分布式系统中最常见的高可用问题就是高可用问题。SchedulerX2.0的服务器挂了怎么办?如上图所示,每个应用都会有三备,通过ZK抢锁,一主二备。如果某台服务器挂掉,它会进行故障转移,其他服务器接管调度任务。3、商业告警SchedulerX2.0目前支持钉钉、短信、邮件三种告警渠道:支持任务失败、超时、不可用机器告警:以钉钉告警为例,可以实时接收告警:06SchedulerX2.0总结在阿里巴巴集团支撑着各事业群的业务,经历了多次双十一的考验。目前接入公有云1000+企业,在海量任务和高可用方面有足够的经验。显然,在超大规模任务调度领域,SchedulerX2.0已经是目前最好的解决方案之一。原文链接本文为阿里云原创内容,未经许可不得转载。