【架构艺术】变更风险观测的任务调度设计

在先前的文章中,对于变更风险观测的流程逻辑设计,有浅谈一小部分。但从宏观来讲,一个变更观测平台,需要对大量的观测任务做统一调度,这样才能把整个观测平台给支撑起来。因此,本文就简单分享一下,变更风险观测的任务调度可能怎样设计。

这个问题可以拆分为几个子问题:多任务并发需要如何处理,任务调度的消息协议需要如何设计,以及怎么去保证整个调度系统的稳定性。

首先第一个问题是,多任务并发的整个系统设计。主要是两个路子,一种方式是有一个任务驱动服务去不断地向一个MQ去生产和消费任务调度信息,好比说创建任务的过程,HTTP接口逻辑先让任务记录落库,然后produce一条任务执行的消息,之后consumer消费了任务执行消息后,就initialize整个观测任务,开始执行,执行过程中不断生产消费poll的消息,如果用RMQ的话也可以借助延迟队列机制去定时推进任务进程,直到任务结束。另外一种方式是通过一个外部的cronjob去查询近期的非终止态任务,然后一个个去推进执行,不走消息队列。

两种方式各有利弊,后者因为有定时的查询过程,对DB的压力会稍微大一些,因此如果任务量非常多的话,查询时延会比较高,导致任务推进缓慢,而前者主要依赖MQ的稳定性,如果消费逻辑不稳定,容易造成消息积压或者任务推进过程中断。整体来看前者的架构会更加灵活一些,用mq分担一些任务推进工作,在这个基础上,再去附加一个外部的cronjob做兜底。对于MQ的生产消费,如果任务量有预估,可以用定容的服务去处理produce/consume逻辑,当然如果有计费要求,用faas会更加合理。

第二块是消息协议设计。这块会主要关注创建任务需要包括哪些信息,可以大致做这样的分门别类:

  • 任务创建的元信息:哪个job、创建人、创建来源以及任务的调度参数
  • 工单(阶段)的上下文信息:工单所属渠道、工单ID、变更类型、阶段唯一key以及放量比例等信息
  • DevOps的上下文信息:需求/发布信息、流水线ID等信息
  • 风险观测参数:上下游服务、观测时长、通知webhook等信息

这样,一个观测任务就能够精准对应到一次发布、一次特定节点以及一组特定的执行策略,就能够确定整个任务的运行方式和观测内容。

第三个问题是稳定性保障。除了一些必要的中间件/服务监控告警之外,影响整个系统稳定性的,还是producer/consumer和mq这个搭配。这里有几个点需要考虑的:

  • 代码:producer/consumer的panic需要recover+ack,防止任务进程中断;channel/singleflight/waitgroup阻塞之类问题需要有重试机制、死信队列兜底,先保证进度信息不丢失再做修复。
  • 容量:观测任务的处理延时主要在任务推进,一次任务推进的时间可能很长,兜底需要1~2min的timeout,所以除了对服务有一个合理的定容之外,整个任务推进的逻辑当中,需要把能够开goroutine异步执行的步骤尽可能单独拿出来,优先保证消费延时不要太高。如果遇到一个观测项又有多个子任务需要调度的场景,一个好的方法是把多个子任务调度放到单独的服务中进行,这样不影响主流程;如果是在消费不过来了,也可以通过一些兜底机制,根据任务执行时间或任务重要性,自主适配延长下次consume的间隔,从而减轻自己压力。

总体来看变更风险观测的任务调度,大体设计思路方面不需要做的非常复杂,重要还是去有一套稳定性兜底机制,保证整个生产消费链路能够持续稳定运转。后续有什么额外的经验,再在这里补充~

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

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

相关文章

unity 让两个物体相遇时候刚体互不影响

解决方案是设定好层级不同,在PlayerSetting中找到物理,有一个图层碰撞矩阵 取消对应 勾选即可 如图

编译Telegram Desktop

目录 一、前言 二、环境准备 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 三、编译 四、总结和学习 一、前言 Telegram 是一款全球广泛使用的即时通讯软件,以其强大的隐私保护、跨平台同步和丰富的功能而闻名。它支持一对一聊天、群组(最多20万成员&am…

(十七) Nginx解析:架构设计、负载均衡实战与常见面试问题

什么是Nginx? Nginx 是一款高性能的 HTTP 服务器和反向代理服务器,同时支持 IMAP/POP3/SMTP 协议。其设计以高并发、低资源消耗为核心优势,广泛应用于负载均衡、静态资源服务和反向代理等场景。 一、Nginx 的核心优势 高并发处理能力采用异步非阻塞的…

PCIE接口

PCIE接口 PIC接口介绍PIC总线结构PCI总线特点PCI总线的主要性能PIC的历程 PCIE接口介绍PCIe接口总线位宽PCIE速率GT/s和Gbps区别PCIE带宽计算 PCIE架构PCIe体系结构端到端的差分数据传递PCIe总线的层次结构事务层数据链路层物理层PCIe层级结构及功能框图 PCIe链路初始化PCIe链路…

边缘计算盒子:解决交通拥堵的智能方案

在当今的智能交通系统中,边缘计算盒子(Edge Computing Box)正逐渐成为不可或缺的核心组件。这种设备通过将计算能力下沉到网络边缘,极大地提升了数据处理的速度和效率,特别适用于实时性要求极高的交通监控场景。本文将…

INFINI Labs 产品更新 | Easysearch 增加异步搜索等新特性

INFINI Labs 产品更新发布!此次更新,Easysearch 增加了新的功能和数据类型,包括 wildcard 数据类型、Point in time 搜索 API、异步搜索 API、数值和日期字段的 doc-values 搜索支持,Console 新增了日志查询功能。 INFINI Easyse…

Kotlin从入门到精通:开启高效编程之旅

目录 一、为什么选择 Kotlin 二、Kotlin 基础语法入门​ 2.1 Hello, Kotlin​ 2.2 变量与数据类型​ 2.2.1 可变与不可变变量​ 2.2.2 基本数据类型​ 2.2.3 数组​ 三、Kotlin 流程控制与函数​ 3.1 流程控制语句​ 3.1.1 if 表达式​ 3.1.2 when 表达式​ 3.2 函…

大模型量化技术实践指南:GPTQ、AWQ、BitsandBytes 和 Unsloth

在大模型(LLM)的时代,我们需要了解量化技术,以便在本地电脑上运行这些模型,因为它们的规模非常庞大。然而,实现量化的方法有很多,这让像我这样的初学者很容易感到困惑。本文介绍了我们必须掌握的…

C51 Proteus仿真实验16:4X4矩阵键盘控制条形LED显示

说明 按下的按键值越大点亮的LED越多 Proteus仿真 注意: K1、K5、K9、K13左边引脚连接的是P1.0 K2、K6、K10、K14左边引脚连接的是P1.1 K3、K7、K11、K15左边引脚连接的是P1.2 K4、K8、K12、K16左边引脚连接的是P1.3 K1、K2、K3、K4右边引脚连接的是P1.4 K5、K6、…

Hive的架构

1. 概念 Hive 是建立在 Hadoop 上的数据仓库工具,旨在简化大规模数据集的查询与管理。它通过类 SQL 语言(HiveQL)将结构化数据映射为 Hadoop 的 MapReduce,适合离线批处理,尤其适用于数据仓库场景。 2. 数据模型 表&a…

P8686 [蓝桥杯 2019 省 A] 修改数组--并查集

P8686 [蓝桥杯 2019 省 A] 修改数组--并查集 题目 解析代码 题目 解析 首先先让所有的f(i)i,即每个人最开始的祖先都是自己,然后就每一次都让轮到那个数的父亲1,第二次出现的时候就直接用父亲替换掉 并查集适用场景 …

GitHub上传项目

总结(有基础的话直接执行这几步,就不需要再往下看了): git init 修改git的config文件:添加:[user]:name你的github用户名 email你注册github的用户名 git branch -m master main git remote add origin 你的URL gi…

关于Windows输入法切换的一些总结

语言和键盘的关系(第一层是语言 语言下一层是键盘) 如下图:语言就是 中文 英文 阿拉伯文之类的 键盘就是 语言中文下的:XX输入法 语言的切换 和 键盘(输入法)的切换 (用windos空格 可以切换…

C# Unity 唐老狮 No.7 模拟面试题

本文章不作任何商业用途 仅作学习与交流 安利唐老狮与其他老师合作的网站,内有大量免费资源和优质付费资源,我入门就是看唐老师的课程 打好坚实的基础非常非常重要: 全部 - 游习堂 - 唐老狮创立的游戏开发在线学习平台 - Powered By EduSoho 如果你发现了文章内特殊的字体格式,…

搜广推校招面经三十九

小红书﹣图搜 一、两个整数的汉明距离 两个整数之间的汉明距离是指这两个数字对应二进制位相同位置不同的个数。换句话说,它就是将一个整数变成另一个整数所需要改变的二进制位的数量。例如,如果两个整数在它们的二进制表示中有三个位置上的…

conda list <package> 指令输出的build和channel含义

Build:表示当前安装包的 构建版本,即该包的编译、构建、发布的具体版本。通常包含一些额外的标识,帮助你区分同一包的不同版本。 Channel: 表示该包的 来源渠道,即该包是从哪个 Anaconda 仓库(频道&#…

Windows下配置Flutter移动开发环境以及AndroidStudio安装和模拟机配置

截止 2025/3/9 ,版本更新到了 3.29.1 ,但是为了防止出现一些奇怪的bug,我安装的还是老一点的,3.19,其他版本的安装同理。AndroidStudio用的是 2024/3/1 版本。 — 1 环境变量(Windows) PUB_H…

Linux系统编程--线程同步

目录 一、前言 二、线程饥饿 三、线程同步 四、条件变量 1、cond 2、条件变量的使用 五、条件变量与互斥锁 一、前言 上篇文章我们讲解了线程互斥的概念,为了防止多个线程同时访问一份临界资源而出问题,我们引入了线程互斥,线程互斥其实…

学习小程序开发--Day1

项目学习开篇 项目架构 项目进程 创建uni-app项目 通过HBuilderX创建 小结 page.json 和 tabBar 目录文件 pages.json的配置

在word下写公式

需求 word的可视化编辑公式是好的,但是很丑(见下图) 我希望公式是这样的(见下图) 解决方案 1.先转换为“线性”(即Latex格式) 2.得到下面这个玩意,把\mathrm去掉(功能是…