架构思维:通用架构模式_系统监控的设计
文章目录
- 引言
- 什么是监控
- 三大常见监控类型
- 1. 次数监控
- 2. 性能监控
- 3. 可用率监控
- 落地监控
- 1. 服务入口
- 2. 服务内部
- 3. 服务依赖
- 监控时间间隔的取舍
- 小结
引言
架构思维:通用架构模式_从设计到代码构建稳如磐石的系统
架构思维:通用架构模式_稳如老狗的SDK设计最佳实践
架构思维:通用架构模式_怀疑下游的设计思路与最佳实践
我们以“防备上游、做好自己、怀疑下游”的准则,分别从系统设计、部署和代码层面,介绍了如何构建高可用后台系统。但再完善的防护也难保万无一失,真正的挑战在于在用户感知之前,第一时间发现问题。
接下来我们将从监控的角度出发,教你如何设计微服务监控,帮助快速、自动地暴露故障,保障系统稳定运行。
什么是监控
监控是指对系统运行状态数据持续审查,并设定阈值,对超出阈值的指标发出告警的机制。如下所示,监控数据通常以 时间(X 轴) 与 指标值(Y 轴) 的曲线图形式展示:
X 轴:时间间隔(秒或分钟)
Y 轴:该间隔内汇聚的指标(数量、平均值、最大值等)
三大常见监控类型
1. 次数监控
用于统计某个事件或方法的调用次数,比如接口被调用次数、某段逻辑执行次数。
图 2:次数监控示例
Y 轴:指定间隔内总调用次数
2. 性能监控
关注接口或依赖调用的延迟,常用指标有:
- 平均耗时(AVG) = 总耗时 / 调用次数
- 最大耗时(Max) = 区间内单次最长耗时
- TPn(如 TP999)= 排序后第 n‰ 位置的耗时值
通常将 Avg、Max、TP99X 三者合并展示:
3. 可用率监控
计算指定区间内业务执行成功的比例。
在可用率判断中,要区分:
- 业务异常(如参数校验失败):不算失败,不降可用率
- 非业务异常(如网络超时、空指针):算失败,需降可用率并报警
阈值设置需结合接口级别和 SLA,核心接口可设 100%,其他接口可适当放宽。
落地监控
业务
1. 服务入口
-
次数监控
- 基于压测瓶颈设阈值告警,并配合限流
- 按调用方维度统计,快速定位流量异常来源
- 同环比监控,自动识别突增
-
性能监控
- 必要时只告警 Avg、Max、TP999(或 TP9999)
- 按调用方分层监控,排查使用差异
- 基于入参(如批量大小)分段监控,辅助优化策略
-
可用率监控
- 接口级与调用方级双重告警
- 按业务/非业务异常判定成功与否
- 阈值分级:重要接口近乎 100%,普通接口可降至 95%
2. 服务内部
- 聚焦核心与可疑方法,避免监控点过多导致告警疲劳
- 监控 JVM(Young/Full GC、堆内存使用)、RPC 线程池剩余数、进程存活状态
- 机器层面:CPU、内存使用率与负载(Load)监控
3. 服务依赖
- 对每个下游依赖统一埋点监控(可用率、性能、次数)
- 注意解析 RPCResult 等包装返回,防止“隐性”失败漏报
- Java 应用可通过 AOP 或框架拦截(如 MyBatis Interceptor)统一实现
监控时间间隔的取舍
- 秒级监控最优,能最快暴露故障
- 但存储成本高(1s 数据量是 1min 的 60 倍)
- 若系统同时支持秒级和分钟级,生产环境推荐秒级,测试或存储受限时可降至分钟级
小结
- 三大基础指标:次数、性能、可用率
- 三层架构落地:入口、内部、依赖
- 补充监控:JVM、线程池、进程、机器资源
- 阈值与时序:结合 SLA、接口重要度,优先秒级
相关文章:

架构思维:通用架构模式_系统监控的设计
文章目录 引言什么是监控三大常见监控类型1. 次数监控2. 性能监控3. 可用率监控 落地监控1. 服务入口2. 服务内部3. 服务依赖 监控时间间隔的取舍小结 引言 架构思维:通用架构模式_从设计到代码构建稳如磐石的系统 架构思维:通用架构模式_稳如老狗的SDK…...
Laravel 参数验证工具
Laravel 提供了内置的参数验证工具,可以让你定义参数需满足的规则,程序自动进行验证。如果验证成功,程序继续运行;如果失败,则自动返回响应并显示失败原因。 具体实现方式如下: 1. 创建自定义请求类 你可…...

InfluxDB 2.7 连续查询实战指南:Task 替代方案详解
InfluxDB 2.7 引入了 Task 功能,作为连续查询(CQ)的现代替代方案。本文详细介绍了如何使用 Task 实现传统 CQ 的功能,包括语法解析、示例代码、参数对比以及典型应用场景。通过实际案例和最佳实践,帮助开发者高效迁移并…...

【SpringBoot】从零开始全面解析SpringMVC (二)
本篇博客给大家带来的是SpringBoot的知识点, 本篇是SpringBoot入门, 介绍SpringMVC相关知识. 🐎文章专栏: JavaEE进阶 🚀若有问题 评论区见 👉gitee链接: 薯条不要番茄酱 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条…...

蒟蒻编程日志
ORZ (用于记录你这个“人”是不是真的,也就是说CSDN的流量是否属合适) 2025/4/14 21:25 开坑 前言 2024/10/26:CSP-J 260pts,CSP-S 45pts。 2025/3/1:%你赛 180pts rk34 寄!这就是不认真的…...

git克隆github项目到本地的三种方式
本文旨在使用git工具将别人发布在github上的项目保存到本地 1.安装git,创建github账户,并使用ssh关联自己的github账号和git,具体教程可以参照下面两篇文章: Github入门教程,适合新手学习(非常详细&#…...
深入理解 this 指向与作用域解析
引言 JavaScript 中的 this 关键字的灵活性既是强大特性也是常见困惑源。理解 this 的行为对于编写可维护的代码至关重要,但其动态特性也会让我们感到困惑。 与大多数编程语言不同,JavaScript 的 this 不指向函数本身,也不指向函数的词法作…...

EtherCAT转EtherNet/IP解决方案-泗博网关CEI-382
一、应用场景 在智能制造快速发展的背景下,工业自动化领域对设备间通信提出了更高要求,需要同时满足实时性、可靠性和灵活性的需求。EtherCAT 与 EtherNet/IP 作为工业通信领域的两大核心协议,各自在不同应用场景中发挥着关键作用。EtherCAT …...

子查询对多层join优化记录
需求背景 查询某个用户是否具有某个角色 表 CREATE TABLE mdm_platform_role_user (ID bigint NOT NULL AUTO_INCREMENT,ROLE_ID varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,USER_ID varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci …...

分布式AI推理的成功之道
随着AI模型逐渐成为企业运营的核心支柱,实时推理已成为推动这一转型的关键引擎。市场对即时、可决策的AI洞察需求激增,而AI代理——正迅速成为推理技术的前沿——即将迎来爆发式普及。德勤预测,到2027年,超半数采用生成式AI的企业…...
随笔:hhhhh
第一题 ∫ − ∞ ∞ x e x − e x d x ∫ 0 ∞ ln t ⋅ e ln t − t ⋅ 1 t d t ∫ 0 ∞ ln t ⋅ e − t ⋅ 1 t ⋅ t d t ∫ 0 ∞ ln t ⋅ e − t d t ψ ( 1 ) − γ \begin{align*} \int_{-\infty}^{\infty}xe^{x-e^x}\text{d}x&\int_{0}^{\infty}…...

PR-2021
推荐深蓝学院的《深度神经网络加速:cuDNN 与 TensorRT》,课程面向就业,细致讲解CUDA运算的理论支撑与实践,学完可以系统化掌握CUDA基础编程知识以及TensorRT实战,并且能够利用GPU开发高性能、高并发的软件系统…...
CMD(Command Prompt)和 Anaconda 的不同
CMD(Command Prompt)和 Anaconda 是两种不同的工具,它们在功能和用途上有明显的区别: CMD(Command Prompt) 定义:CMD 是 Windows 操作系统自带的一个命令行界面工具。 主要用途: 文件…...
软考 系统架构设计师系列知识点之杂项集萃(60)
接前一篇文章:软考 系统架构设计师系列知识点之杂项集萃(59) 第97题 在面向对象设计中,()可以实现界面控制、外部接口和环境隔离。()作为完成用例业务的责任承担者,协调…...
如何备考GRE?
1.引言 GRE和雅思不太相同,首先GRE是美国人的考试,思维方式和很多细节和英系雅思不一样。所以底层逻辑上我觉得有点区别。 难度方面,我感觉GRE不容易考低分,但考高分较难。雅思就不一样了不仅上限难突破,下限还容易6…...

Linux复习笔记(六)shell编程
遇到的问题,都有解决方案,希望我的博客能为你提供一点帮助。 三、shell编程简明教程 一、Shell基础概念 1. Shell的作用 是用户与Linux内核交互的桥梁,既是命令解释器,也是一种脚本语言。运行机制:用户输入…...

Unity 拖尾烟尘效果及参数展示
亮点:在移动特效过后 ,粒子会顺着惯性继续向前移动一小段距离。 以unity-URP管线为例,下图是Particle System参数分享: Start Color参数: UnityEditor.GradientWrapperJSON:{"gradient":{"serialized…...

Vue3 Echarts 3D饼图(3D环形图)实现讲解附带源码
文章目录 前言一、准备工作1. 所需工具2. 引入依赖方式一:CDN 快速引入方式二:npm 本地安装(推荐) 二、实现原理解析三、echarts-gl 3D插件 使用回顾grid3D 常用通用属性:series 常用通用属性:surface&…...

Kafka快速安装与使用
引言 这篇文章是一篇Ubuntu(Linux)环境下的Kafka安装与使用教程,通过本文,你可以非常快速搭建一个kafka的小单元进行日常开发与调测。 安装步骤 下载与解压安装 首先我们需要下载一下Kafka,这里笔者采用wget指令: wget https:…...

Java EE初阶——wait 和 notify
1. 线程饥饿 线程饥饿是指一个或多个线程因长期无法获取所需资源(如锁,CPU时间等)而持续处于等待状态,导致其任务无法推进的现象。 典型场景 优先级抢占: 在支持线程优先级的系统中,高优先级线程可能持续…...

RPA vs. 传统浏览器自动化:效率与灵活性的终极较量
1. 引言 在数字化转型的大潮下,企业和开发者对浏览器自动化的需求日益增长。无论是网页数据抓取、自动化测试,还是用户行为模拟,浏览器自动化已经成为提升效率的关键工具。然而,面对越来越严格的反自动化检测、复杂的 Web 结构和…...
Flask框架深度解析:蓝图、上下文机制与Jinja2模板引擎实战
Flask作为Python最流行的轻量级Web框架之一,以其简洁、灵活和高度可扩展的特性赢得了广大开发者的青睐。本文将深入探讨Flask框架的三大核心特性:蓝图(Blueprint)模块化开发、上下文(Context)管理机制以及Jinja2模板引擎的高级用法。无论你是Flask初学者…...

docker 快速部署若依项目
1、首先创建一个自定义网络,作用是使连接到该网络的容器能够通过容器名称进行通信,无需使用复杂的IP地址配置,方便了容器化应用中各个服务之间的交互。 sudo docker network create ruoyi 2、创建一个文件夹,创建compose.yml文件…...

polarctf-web-[rce1]
考点: (1)RCE(exec函数) (2)空格绕过 (3)执行函数(exec函数) (4)闭合(ping命令闭合) 题目来源:Polarctf-web-[rce1] 解题: 这段代码实现了一个简单的 Ping 测试工具,用户可以通过表单提交一个 IP 地址,服务器会执…...
数据备份与恢复方案
数据备份与恢复方案 一.背景 为确保公司信息安全,防止关键数据丢失,应对突发事件,特制定全面的数据备份与恢复方案。该方案将对公司的各类文件资料进行分级管理,并针对不同级别的数据设定相应的备份策略和恢复流程。 二…...

Redis+Caffeine构造多级缓存
一、背景 项目中对性能要求极高,因此使用多级缓存,最终方案决定是RedisCaffeine。其中Redis作为二级缓存,Caffeine作为一级本地缓存。 二、Caffeine简单介绍 Caffeine是一款基于Java 8的高性能、灵活的本地缓存库。它提供了近乎最佳的命中…...

docker(四)使用篇二:docker 镜像
在上一章中,我们介绍了 docker 镜像仓库,本文就来介绍 docker 镜像。 一、什么是镜像 docker 镜像本质上是一个 read-only 只读文件, 这个文件包含了文件系统、源码、库文件、依赖、工具等一些运行 application 所必须的文件。 我们可以把…...
ms-swift 代码推理数据集
目前想要对SFT微调后的模型进行测试,看官方文档ms-swift中有eval的教程,但是从介绍来看,eval使用的是modelscope的评测内容。 评测 SWIFT支持了eval(评测)能力,用于对原始模型和训练后的模型给出标准化…...

AXI4总线协议 ------ AXI_LITE协议
一、AXI 相关知识介绍 https://download.csdn.net/download/mvpkuku/90841873 AXI_LITE 选出部分重点,详细文档见上面链接。 1.AXI4 协议类型 2.握手机制 二、AXI_LITE 协议的实现 1. AXI_LITE 通道及各通道端口功能介绍 2.实现思路及框架 2.1 总体框架 2.2 …...
DATE_FORMAT可以接收date类型,也可以接收String类型!
DATE_FORMAT 是 SQL 函数,主要用于将日期/时间类型的字段按照指定格式转换成字符串。在 MyBatis 的 XML 动态 SQL 中,你看到的这段代码是为了比较数据库中的日期字段和传入参数的日期值,但会忽略时间部分,只比较年月日。 代码解释…...