探索微服务治理:从发展到实践构建高效稳定的系统| 微服务的度量

随着软件行业的不断发展,微服务架构凭借其高度的灵活性、可扩展性和可维护性,逐渐成为企业应用的主流架构风格。然后微服务架构的复杂性也带来了一系列的挑战,其中之一就是如何有效地管理和治理微服务。本文灸哥给你详细介绍和服务治理相关的内容,帮助大家更好地理解和应用微服务治理。

三、微服务的度量

如果你不能度量它,你就无法改进它 —— 彼得·德鲁克

本篇用管理大师彼得·德鲁克的这句话开篇,微服务架构是需要持续演进迭代优化的,如果没有度量指标,你就无从下手。因此度量是微服务治理的基础,通用对微服务进行全方位的监控和测量,收集关键性指标,为后续的管控和管理提供数据支持。这些度量数据不仅有助于实时了解系统的运行状态,还能在问题发生时提供快速定位和解决问题的依据。

1、微服务的局限性

需要度量是因为微服务存在着一定的局限:

  • 不断增长的微服务数量会导致信息屏障,可能没人能明确所有微服务都是干什么的
  • 必须应对分布式系统固有的各种常见故障,处理各种网络延迟、抖动、丢包、分流、重试、超时等问题,需要采取很多措施,比如容错、分流、限流等措施来保证高可用性
  • 对问题的发现与诊断更加困难,需要多个微服务以及对应团队共同协作解决

2、微服务局限性的解决方案

  • 化繁为简:大的单体服务拆分为多个微服务,依旧不能改变软件固有的复杂性,最好是各司其职,尽量简化对外的接口,简化彼此的交互,把复杂性封装在内部
  • 快速迭代:天下武功唯快不破,微服务就要快速迭代,出现问题不可怕,但要做到快速演变、快速伸缩、快速上线
  • 自动化:自动化是提高效率的不二法宝,众多微服务必须全程自动化,包括自动化集成、自动化测试、自动化运维
  • 容错设计:分布式系统中任何一个节点都有可能出现问题,备份冗余、分流、限流、断流等手段一个都不能少,以及上面我将的所有容错机制
  • 度量:及时地发现问题、修复问题并避免再出现类似问题是微服务高可用性的保证,度量可以让你见微知著,不放过任何一个问题,让你在审慎分析之后了解产品运行的真实情况,并视问题的严重程度做出快速反应

3、度量的重要性

不能度量就不能管理、不能度量就不能证明、不能度量就不能提高。微服务数量多,更新频繁,发生故障的可能性随时都存在,必须做好监控和度量工作。

  • 微服务中发现和诊断问题比较困难,需要多个微服务和相关团队共同协作解决,而度量的数据能跟踪定位一个请求的数据流向,从而节约诊断成本
  • 微服务中的服务宕机可能会引发雪崩,为了避免雪崩需要做好限流、分流等措施。但是区分是普通偶发错误还是崩溃,需要足够的度量数据来支持,比如在单位时间内,错误率达到多少应该熔断,而流量回落到多少应该自动恢复服务
  • 必须应对分布式系统固有的各种常见故障,大多数时候这些问题出现的概率不高,如何找出这些小概率问题并验证解决方案,可以由度量数据来提供有效支撑
  • 微服务的无状态架构可能会导致由网络和存储读取变多而引起的性能损耗,而度量数据可以有效评估性能损耗的程度以及优化是否有效等问题
  • 不断增长的微服务数量会导致信息屏障,度量数据,特别是业务层的度量数据可以管理在一起,展示出数据流动和调用关系,对于了解系统有很大作用

4、度量的内容

按照度量的目标划分
  • 度量工作:用来对日常工作进行度量,看时间都花费在哪里并且可以评估工作效率、数量和质量,一般包括工作量(文档或代码行数)、时间、质量、计划等
  • 度量产品:服务健康程度、服务用量和趋势、业务关键指标
  • 度量用户:用户的行为喜好
按照度量的层次划分
  • 基础设施层指标
    • CPU:使用率(%us、%sy、%ni)、空闲 CPU(%id)、CPU 运行时在等待 IO 的时间(%wa)、CPU 处理硬中断的数量(%hi)、CPU 处理软中断的数量(%si)、被虚拟机偷走的 CPU(%st)
    • 负载:Load1、Load5、Load10
    • 磁盘:总大小、使用的空间、可用的空间、空间使用率
    • 网络:TCP 连接数、每秒传输的字节数、传输错误发生次数等,ifconfig、netstat
    • 内存:内存总量、已经使用的内存、空闲的内存等
  • 应用程序层指标
    • TPS:每秒事务数,类似的有 RPS、QPS、CPS
    • RT:响应时间
    • 成功率:服务水平的重要指标,保障 SLA 的依据
    • 总次数:对每小时、每天、每周、每月和每年的各种 API 总次数进行统计度量
  • 业务层指标
    • WHO:对用户进行多维度和各类指标的度量
    • WHAT:哪些功能点用得多,比较受欢迎
    • WHERE:用户的地理分布
    • WHEN:服务的波峰和波谷,业务趋势
    • HOW:用户的使用行为分析

5、度量指标

  • 集中量:最大值、最小值、平均数、总和、次数
  • 差异量:全距(最大值-最小值)、方差(每个样本值与全体样本值的平均数之差的平方值的平均数)、标准差(方差的算数平方根)、协方差(衡量两个变量的总体误差)
  • 分位量:中位数、分位数

6、度量方法

  • 聚合
  • 分析
  • 报警
  • 行动

7、度量实践:性能监控

性能监控主要关注微服务的响应时间、吞吐量、错误率等关键性能指标,这些指标直接反映了微服务的运行效率和用户体验。

实现方法
  • 响应时间监控:通过微服务中埋点或者使用代理技术,记录请求的处理时间,并统计不同时间段的平均响应时间、最大响应时间等
  • 吞吐量监控:统计单位时间内处理的请求数量,包括成功和失败的请求,以评估微服务的处理能力
  • 错误率监控:记录请求处理过程中的异常情况,统计错误发生的频率和分布,以便及时发现和解决问题
技术框架和组件
  • Prometheus:开源的监控和告警工具包,可以方便地收集和存储时间序列数据,并通过强大的查询语言进行数据分析和可视化
  • Zipkin/Jaeger:分布式追踪系统,可以追踪请求在微服务间的调用链路,帮助定位性能瓶颈

8、 度量实践:资源监控

资源监控主要关注微服务运行所需的计算资源,包括 CPU、内存、磁盘、网络等,合理的资源分配和监控是确保微服务稳定运行的关键。

实现方法
  • CPU/内存监控:通过操作系统提供的接口或者第三方工具,实时监控微服务的 CPU 和内存使用情况,包括占用率、峰值等
  • 磁盘监控:监控磁盘的使用率、I/O 性能等,确保微服务有足够的磁盘空间进行数据存储和日志记录
  • 网络监控:监控网络带宽、延迟、丢包率等指标,确保微服务间的网络通信稳定可靠
技术框架和组件
  • cAdisor:开源的容器监控工具,可以收集和展示容器内部的资源使用情况
  • Node Exporter:Prometheus 的一个导出器,可以收集和暴露主机级别的资源指标

9、 度量实践:业务监控

业务监控主要关注微服务的业务逻辑和流程,确保业务功能的正确性和完整性。

实现方法
  • 业务日志监控:收集和分析微服务的业务日志,包括操作日志、事件日志等,以了解业务处理过程和结果
  • 业务指标监控:定义和收集与业务相关的关键性能指标,比如订单处理量、用户活跃度等,以评估业务运行状况
技术框架和组件
  • ELK Stack(Elasticsearch、Logstash、Kibana):开源的日志管理和分析平台,可以收集、处理、存储和展示微服务的业务日志
  • Metrics 库:各种编程语言和框架通常都提供 Metrics 库,用于收集和报告自定义的业务指标

微服务的度量技术涵盖了性能监控、资源监控和业务监控三个方面。通过选择合适的监控工具和技术框架,可以有效地收集和分析微服务的运行数据,为后续的管控和管理提供有力支持。

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

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

相关文章

SQL 表信息 | 统计 | 脚本

介绍 统计多个 SQL Server 实例上多个数据库的表大小、最后修改时间和行数,可以使用以下的 SQL 查询来获取这些信息。 脚本 示例脚本: DECLARE Query NVARCHAR(MAX)-- 创建一个临时表用于存储结果 CREATE TABLE #TableSizes (DatabaseName NVARCHAR…

Java学习笔记2024/2/3

1. 方法 1.1 什么是方法 package com.angus.method.whatIsTheMethod_1;public class note {public static void main(String[] args) {//什么是方法//方法是程序当中最小的执行单元//调用方法和使用数组很类似//方法->方法名//数组->数组名->地址值//什么时候用到方…

2024 AI 前端:回首展望,光芒未至,破晓之前!

前言 回望 2023 年,ChatGPT 的突然爆火,让 AI 无疑成为最为值得注目的新兴领域之一,我们也一起见证了生成式 AI 的寒武纪大爆发。这一年来,国内外的生成式 AI 、大模型和相关产品以令人眼花缭乱的速度更新迭代,新的创业…

服务器性能监控管理方法及工具

服务器是组织数据中心的主干,无论是优化的用户体验,还是管理良好的资源,服务器都能为您完成所有工作,保持服务器随时可用和可访问对于面向业务的应用程序和服务以最佳水平运行至关重要。 理想的服务器性能需要主动监控物理和虚拟…

JavaScript内嵌函数是传值还是传址

在一般编程语言中, 参数都是"传值", 假设一个C函数的原型是int Fun(int value); 当你调用这个函数时, Fun函数首先会在自己的函数栈上copy一份参数, 就是这个函数的副本, 当你在Fun外部修改value值, 并不会影响Fun内部的value. 而Javascript的内嵌函数很特殊, 如果传…

LeetCode 133:克隆图(图的深度优先遍历DFS和广度优先遍历BFS)

回顾 图的Node数据结构 图的数据结构&#xff0c;以下两种都可以&#xff0c;dfs和bfs的板子是不变的。 class Node {public int val;public List<Node> neighbors;public Node() {val 0;neighbors new ArrayList<Node>();}public Node(int _val) {val _val;…

windows10 利用DDNS-GO解析IPV6 IPV4 阿里云 腾讯云 华为云

这里写目录标题 [工具包DDNS-GO Windows 版](https://github.com/jeessy2/ddns-go/releases)创建ddns-go windows服务打开浏览器 输入127.0.0.1:9876 就可以使用ddns-go解析ipv4 或者 IPV6 了创建的服务已经在windows的服务管理里面自动启动了 工具包DDNS-GO Windows 版 创建dd…

C++:模板

C&#xff1a;模板 函数模板显式实例化模板参数缺省参数匹配规则 类模板类名与类型类成员的声明定义分离 非类型模板参数模板特化函数模板特化类模板特化全特化偏特化部分特化限制特化 在讲解模板前&#xff0c;我提出一个问题&#xff1a; 如何实现一个通用的swap交换函数&…

StringBuffer和StringBuilder的区别,设计目的

StringBuffer和StringBuilder是Java编程语言中用于处理字符串的两个类&#xff0c;它们在功能上非常相似&#xff0c;都用于创建可变的字符串。然而&#xff0c;它们之间存在一些关键的区别&#xff0c;主要体现在线程安全性和性能上。这两个类的设计目的反映了不同的使用场景需…

Java中的main方法和可变参数

目录 分析main方法形参为String[] 那么实参到底是什么&#xff1f;可变参数实例 分析main方法 在Java中&#xff0c;main方法是程序的入口点。当你运行一个Java程序时&#xff0c;JVM&#xff08;Java虚拟机&#xff09;会寻找一个名为main的方法&#xff0c;并从这里开始执行…

html2canvas 截图功能使用 VUE

html2canvas 是一个 JavaScript 库&#xff0c;可以将网页内容转换为 Canvas 元素&#xff0c;并生成图像或 PDF 文件。使用 html2canvas&#xff0c;你可以在客户端将网页的内容截图&#xff0c;并将其作为图像或 PDF 文件保存或分享。 以下是一些 html2canvas 库的特点和用途…

LeetCode 0292.Nim 游戏:脑筋急转弯

【LetMeFly】292.Nim 游戏&#xff1a;脑筋急转弯 力扣题目链接&#xff1a;https://leetcode.cn/problems/nim-game/ 你和你的朋友&#xff0c;两个人一起玩 Nim 游戏&#xff1a; 桌子上有一堆石头。你们轮流进行自己的回合&#xff0c; 你作为先手 。每一回合&#xff0c…

【NTN 卫星通信】基于NTN的多3GPP连接应用场景

1 概述 同时聚合两条3GPP接入链路&#xff0c;其中一条为非地面网络&#xff0c;可以提供以下5G业务使能&#xff0c;尤其适用于带宽有限或接入链路不可靠的服务不足地区:   -扩展流动宽频   -超可靠的服务通信 如技术报告38.821所述&#xff0c;若干服务场景(例如在偏远地…

【算法题】91. 解码方法

题目 一条包含字母 A-Z 的消息通过以下映射进行了 编码 &#xff1a; A -> "1" B -> "2" ... Z -> "26" 要 解码 已编码的消息&#xff0c;所有数字必须基于上述映射的方法&#xff0c;反向映射回字母&#xff08;可能有多种方法&…

缓存组件Caffeine的使用

caffeine是一个高性能的缓存组件&#xff0c;在需要缓存数据&#xff0c;但数据量不算太大&#xff0c;不想引入redis的时候&#xff0c;caffeine就是一个不错的选择。可以把caffeine理解为一个简单的redis。 1、导入依赖 <!-- https://mvnrepository.com/artifact/com.git…

STM32F407 CAN参数配置 500Kbps

本篇CAN参数适用 芯片型号&#xff1a;STM32F407xx系统时钟&#xff1a;168MHz&#xff0c;CAN挂载总线APB1为42M波 特 率 &#xff1a;500Kpbs引脚使用&#xff1a;TX_PB9&#xff0c;RX_PB8&#xff1b;修改为PA11PA12后&#xff0c;参数不变。 步骤一、打勾开启CAN&#xf…

百面嵌入式专栏(面试题)网络编程面试题

沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇我们将介绍网络编程面试题 。 1、什么是IO多路复用 I/O多路复用的本质是使用select,poll或者epoll函数,挂起进程,当一个或者多个I/O事件发生之后,将控制返回给用户进程。以服务器编程为例,传统的多进程(多线程…

GaussDB新体验,新零售选品升级注入新思路【华为云GaussDB:与数据库同行的日子】

选品思维&#xff1a;低频VS高频 一个的商超&#xff0c;假设有50个左右的品类&#xff0c;每个品类下有2到10个不等的商品。然而如此庞大的商品&#xff0c;并非所有都是高频消费品。 结合自身日常的消费习惯&#xff0c;对于高频和低频的区分并不难。一般大型家电、高端礼盒…

HCIA--DHCP动态分配ip地址实验

要求&#xff1a; 1. pc1&#xff0c;pc2不能获取 250-254的地址 2. pc3固定获取172.16.1.3/24 pc4固定获取172.16.1.6/24 1. 在AR1上配接口ip、划分网段&#xff0c;创建地址池&#xff0c;开启dhcp: [Huawei]int g0/0/0 [Huawei-GigabitEthernet0/0/0]ip add 192.168.1.1 2…

FPGA开发

Quartus13.0使用 编译下载&#xff1a; 添加引脚&#xff1a; # ---------------- LED ---------------- # set_location_assignment PIN_K2 -to led_out[11] set_location_assignment PIN_J1 -to led_out[10] set_location_assignment PIN_J2 -to led_out[9] set_locatio…