当前位置: 首页 > news >正文

架构师面试(三十七):监控系统架构模式

题目

监控是在产品生命周期的运维环节,能对产品的关键指标数据进行【实时跟踪】并对异常数据进行【实时报警】。

一句话描述,监控系统可以帮我们【主动预防和发现】业务系统中的问题。

我们常说,监控系统是 “粮草”,业务系统是 “兵马”,【兵马未动,粮草先行】,其重要性可见一斑。

你都接触过哪些监控系统或监控模式呢?能否抽象出监控系统的【架构模式】,并对架构模式中各个关键部分的职责进行分析?

解析

监控系统需要对指标数据进行【实时跟踪】和【实时报警】,所以数据源非常关键;根据对数据源处理的方式,我们可以抽象出三类监控系统的【架构模式】,即:【轮询计算模式】、【中心计算模式】和【边缘计算模式】。

一、轮询计算模式

在项目初创,业务和集群规模都非常小的时候,通常使用【轮询计算模式】搭建监控系统,如下图所示:

图片

【轮询计算模式】的监控系统主要包括这样几个关键部分:日志、脚本、中控机。

日志:服务在运行过程中会将日志打印在日志文件中,比如常见的错误日志;

脚本:针对特定的日志文件和特定的日志统计逻辑编写特定的【脚本】,比如“ grep err error.log | wc -l ”;

中控机:中控机即是部署中控逻辑程序的服务器;中控机会定时发送指令到每台业务服务器上,运行已经部署好的脚本来对日志进行统计,在中控机获取到的统计结果超过预定的阈值时,进行报警。

轮询模式的监控系统架构比较简单,也非常容易落地实现。每台服务器上的脚本在中控机指令的驱动下会轮询对日志进行计算,不过这类计算比较简单,以统计特定关键字的日志为主;每产生一类新的日志,需要根据逻辑编写新的脚本,并需要对脚本进行部署。轮询模式的监控系统适合小规模的集群系统。

二、中心计算模式

在上述【轮询计算模式】的监控系统中,逻辑处理集中在 【脚本】单元,在部署和维护上很麻烦;【中心计算模式】的监控系统则将统计和分析逻辑进行中心化处理,如下图所示:

图片

【中心计算模式】的监控系统主要包括这样几个关键部分:日志、flume、kafka集群 和 大数据日志统计平台。

日志:服务在运行过程中会将日志打印在日志文件中,在【中心计算模式】下,日志文件种类会很多,可以是错误日志,也可以各类业务信息日志;

flume:flume 是很常用的日志采集程序,它时刻监测日志文件,并读取新增日志,然后将新增日志进行上报;常见的采集程序除了 flume外,还有 filebeat;

kafka集群:流处理平台,对大量的采集程序客户端生产的日志消息做数据缓冲,并与 消费端逻辑处理进行解耦;

大数据日志统计平台:通过大数据实时数据处理技术,如:Spark/Storm/Flink,对日志根据指定关键字进行统计,在达到预设阈值时进行报警。

另外,ELK日志查询平台也可以从 kafka 集群中消费日志,然后对日志进行查询。

所有服务节点打印的日志,都会被采集程序采集后上报到中心化的处理单元,即【大数据日志统计平台】进行集中处理,而服务节点没有任何的计算逻辑,所以这种模式叫做【中心计算模式】;业务开发同学有任何的统计和监控需求,直接将需求和日志格式提报给 “大数据”部门即可。【中心计算模式】的监控系统,可以对日志做非常灵活的统计和分析,但是 磁盘IO 和 网络IO 非常大,而且中心计算单元机器成本非常高。

三、边缘计算模式

上述两种监控计算模式:【轮询计算模式】和【中心计算模式】的处理对象都是服务程序打印的日志,这就决定了这两种模式对资源的重量级消耗;【边缘计算模式】的监控系统相对来说更轻量级,如下图所示:

图片

【边缘计算模式】的监控系统主要包括SDK、agent、监控后台系统 三部分。

SDK:SDK 是数据采集组件,嵌入在服务程序中运行;SDK提供函数供服务程序调用,常见函数如:Sum()、Avg()、Max()、Min()等;

agent:agent 是监控系统客户端,作为独立进程运行,在每台服务器上会部署一个专门的 agent 进程;服务器上所有的服务程序调用 SDK 后采集到的数据,通过本机传输到 agent,由 agent 进行汇总后上报到 监控系统服务端;

监控后台系统:监控后台系统即监控系统服务端;后台系统包括三大功能:接收 agent 上报的数据后,首先进行阈值告警判断,如果超过阈值则要报警;上报的数据为了方便分析和展示需要进行持久性存储(历史久远的数据意义不大,只存储近期数据即可);最后需要一个管理平台对阈值进行设定,对监控项数据进行图形化展示。

【边缘计算模式】的监控系统,采集程序 SDK 采集的是汇总过的一个数值,而非日志。举个例子, 要统计消息发送接口(msg_send)的 QPS,则服务程序需要在接口的入口处添加一行 代码:Sum("msg_send", 1);SDK会定时或定量将汇总过的一个数值传输给 agent,agent 会定时上报再次汇总过的数值到监控系统服务端,服务端也会对 agent 上报的数值进行聚合和统计。SDK 和 agent 基于业务服务器资源对监控的数据进行了计算,大大降低了服务端的压力,所以称为【边缘计算模式】。 

下面对 【中心计算模式】和【边缘计算模式】进行简单对比:

图片

三种模式的监控系统各有优劣,你是否都经历过?!

http://www.xdnf.cn/news/256555.html

相关文章:

  • 新手学编程前端好还是后端
  • React useMemo函数
  • C语言 之【队列的简介、队列的实现(初始化、销毁、入队、出队、判空、元素个数、元素的访问)】
  • n8n 安装 n8n-nodes-mcp 社区节点
  • 对解微分方程分离变量法本质的思考
  • nt!NtReplyWaitReceivePortEx函数分析之nt!LpcpMoveMessage拷贝csr_api_msg
  • 【数据结构】单链表的增删查改
  • 微软发布了最新的开源推理模型套件“Phi-4-Reasoning
  • 构建更快,部署更智能:立即优化您的 Docker 设置
  • CPO-BP+NSGA,豪冠猪优化BP神经网络+多目标遗传算法!(Matlab完整源码和数据)
  • 如何掌握 Lustre/Scade 同步数据流语言
  • BERT+CRF模型在命名实体识别(NER)任务中的应用
  • 自主机器人模拟系统
  • Flutter - 概览
  • 数字智慧方案5869丨智慧健康医疗养老大数据整体规划方案(76页PPT)(文末有下载方式)
  • 【HarmonyOS Next】地图使用详解(三)标点定位问题
  • Java 中 Unicode 字符与字符串的转换:深入解析与实践
  • Go-web开发之帖子功能
  • 纯前端Word文档在线预览工具
  • Fedora升级Google Chrome出现GPG check FAILED问题解决办法
  • PyTorch_创建张量
  • 爱胜品ICSP YPS-1133DN Plus黑白激光打印机报“自动进纸盒进纸失败”处理方法之一
  • 解决Flutter项目中Gradle构建Running Gradle task ‘assembleDebug‘卡顿问题的终极指南
  • 【AI面试准备】元宇宙测试:AI+低代码构建虚拟场景压力测试
  • InnoDB索引的原理
  • 模型上下文协议(MCP)
  • 学习记录:DAY22
  • 数字智慧方案5873丨智慧交通设计方案(57页PPT)(文末有下载方式)
  • 动态库与静态库的区别
  • 内置类型成员变量的初始化详解