微服务实践04--DevOps07--度量指标00--度量指标(Metrics)

本文涉及的产品
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
简介: 微服务实践04--DevOps07--度量指标00--度量指标(Metrics)

微服务实践目录,可以参见连接。

起因:

在很多人的想法里认为事务是无法考量的。无法说明的,就想老子所说的:

道可道,非常道。名可名,非常名。

人对不了解的事务的学习与分析过程中有个分歧:

  1. 追求了解事务最根本的真相,不断的分解、抽象、联想去组织处合适的理论。
  2. 赋予这个事务神话的色彩。以神的意志,解释不可理解的事务

对于现代学科来说,现代的理学和文学都最终会归化到数学,数学会归化的哲学。例如:美学中的黄金比例,文学中的逻辑学,经济学中统计学等等。

但是,对于软件工程一门工程类学科来说无法考量与度量某一项事务是否是可行?答案自然是明确的软件工程必须是可以度量的,虽然在这么多年的发展过程中没有一套完整适应时代与技术的度量方法。但是度量对于一个工程类学科来说是必须的,而且之后也会不断的朝着可度量的方向发展。

度量是了解事务内部特征的最基础的方法。但在国内度量其实是从上到下都回避的一件事,所以,需要考量加入度量指标的时间点,以及加入的度量指标,加入方式等。不过可度量的标准是公司达到一定水平是一个标志。

本文主要描述度量指标的实践,上面这些社会学的理论请自行把握。

度量指标:

在网上找了很多关于度量、指标、维度的资料。这几个词可以从《统计学》到《软件运营》、再从《分析指标体系》到《软件过程度量模型》。就这几个词我找了很大一圈还是没有找到很好的解释,所以,我就妄自尊大的自己对度量指标进行一个解释:

度量是指对于一个物体或是事件的某个性质给予一个数字,使其可以和其他物体或是事件的相同性质比较。度量可以是对一物理量(如长度、尺寸或容量等)的估计或测定,也可以是其他较抽象的特质。

指标 : 预期中打算达到的指数、规格、标准

度量出自维基百科,指标出自以上是从Wiki上找到的介绍。简单的看度量就是描述事物的一个特定方面的数字。

度量指标(Metrics) : 指用于描述一个物体或事物的某个性质的指数、规格、标准,使其可以和其他的物体或者事物的提交。

从软件的角度讲度量即把所有东西都量化、数据化、可采集。指标即表示对这些量化后的数据的目标值。维度即标识一个事物某一个侧面的一组指标。

软件指标定义:

大概说明了度量指标的内容之后,接下来以工程化实施方案的思维方式思考如果要实施度量指标需要完成怎样的工作。借鉴一些ToGAF的概念,每一项事都是需要有目标的,在目标的指导下去做具体的实施工作。度量指标工作具体的实施步骤如下:

  1. 制定度量指标所关心的目标,所要解决的问题;(明确要解决的问题域)
  2. 建立一套针对问题域的分析方法,并找到要进行分析的数据域;(制定方法论,解决域)
  3. 对数据域中的数据进行可度量化的拆解与分析;(度量指标拆解)
  4. 针对解决域中的方法以及分解出的具体指标,制定实施方案;(具体实施)
  5. 实施完成后可以产出数据与报表。针对结果进行评估平调整整个解决过程。(持续优化)
  • 指标系统目标:

“指标体系”这个概念是应用比较广泛的,我们从正式出版物中摘取一个定义:指标体系,即统计指标体系,是由一系列具有相互联系的指标所组成的整体,可以从各个侧面完整地反映现象总体或样本的数量特征。

统计指标体系从其功能和作用不同,可分为描述统计指标体系,评价统计指标体系和预警统计指标体系三种。描述统计指标体系是由若干对社会经济活动状况做出完整而系统描述的基础指标所组成的。评价统计指标体系是由若干对社会经济行为结果进行比较、评估、考核,以检查其工作和综合效益的统计指标所组成。预警统计指标体系主要用于对社会经济宏观运行的监测,并根据指标值的变化,预报社会经济即将出现的不平衡状态、突发事件及某些结构性障碍等。

引自《统计学教程》(主编:王怀伟 清华大学出版社)
度量体系

从上图可以看到在软件行业内指标体系可以分为很多种。最终对客户有意义的,有价值的肯定是运营指标体系。运行软件指标体系是本次的目标,主要描述软件运行过程中的一些参数。《软件过程指标》、《软件指令指标》、《DevOps指标》都是软件在开发以及运营过程中的软件过程指标。

下图中是指标体系的一个实例,用于描述DevOps指标体系中的一些指标:
DevOps之度量体系
这个实例中描述了DevOps的几个指标。主要的指标目标是为了体现DevOps怎样为客户提供价值,并在这个基础上提出适应多变的环境(需求环境,开发环境,质量环境,过程环境等)。

真对于软件运行指标体系的目标是提高稳定性,减少故障,降低运营成本。

  • 指标分析方法与选型:

在驱动指标体系搭建形成闭环的最后一步就是数据应用,在采集的数据验证无误后应用于实际业务中,驱动业务增长。常用的分析理论有:4P理论、PESTEL理论、SWOT理论、5W2H理论、逻辑树理论、用户使用行为理论、AARRR理论。可以参照:数据分析方法论(二)——常用数据分析方法

真对于软件运行指标体系的目标,分析方法需要满足故障检测,平稳程度,自动化程度几个方向。分析方法以统计方法为主,统计故障情况,统计自动化占比,统计测试质量等。

  • 度量指标体系:

    上面说明了度量指标的目标和指标分析方法。都是一些通用性的分析,未对某一个特定领域中的指标体系进行分析。一个特定领域中的指标体系包括的内容有哪些,这些内容起着怎样的作用。这些内容会在本节加以分析与描述。

先给出一个指标体系的整体架构:
指标体系结构
上图出自数据体系搭建 | 梳理架构和指标体系,类似于软件指标定义中提到的内容一个指标体系从上到下可以分为:分析(模型,方法),数据可视化,基础数据平台部分。

分析方法:
在整个指标体系中分析方法提供跟业务相关的,对业务负责的内容。因为分析方法是根据要解决的问题域进行建立的,并对业务是有意义的。分析方法是多变的,在针对同样的行业、同样的场景、不同的公司时使用的分析与建模的方法都可能是不同的。因为分析方法是真对大环境去把控的,所以,需要做的是真对这些元知识(分析方法),进行分析与总结之后在应用于不同的场景。

从某个侧面来说,数据分析技术(大数据,BI等)最终有意义的方面都是分析方法。具体使用哪项分析方法,怎样做展示其实对整个数据分析来说意义不大。

数据可视化:
数据需要展示出来才可以体现出数据的意义,所以,就像敏捷中“交付价值”一样。数据有了必须要提供价值才可以展现出数据的意义。这里的数据可视化的方式还是需要针对度量进行相关的分析与展示的,或者直接使用相关的内容进行展示的能力。下面说明另种可以进行定制化的展示的可视化工具。

数据基础平台:
数据基础平台即包括数据采集,数据接收,数据存储,数据分析基础等内容。主要满足基础的数据处理要求,可以与现在流程的DMP概念认为是等同的。大数据的基础也就是:
数据基础平台基础栈
数据收集部分这里写的不是很完全,数据接收、存储、分析都还算比较完善,不过也没有做更多的深入。在之后的实施部分里会说明本文的技术选型。

  1. Grafana是一个开源的度量分析和可视化套件。它最常用于可视化基础设施和应用程序分析的时间序列数据,但也用于许多其他领域,包括工业传感器,家庭自动化,天气和过程控制。
  2. Kibana是一款开源的数据分析和可视化平台,它是 Elastic Stack 成员之一,设计用于和 Elasticsearch 协作。您可以使用 Kibana 对 Elasticsearch 索引中的数据进行搜索、查看、交互操作。您可以很方便的利用图表、表格及地图对数据进行多元化的分析和呈现。

至于其他的指标可视化工具:Tableau,FindReport,Splunk。都是商业版软件,不适合在小公司使用。所以,不会选择这些商业化软件。

  • 度量指标拆解:

    上面定义了软件指标的目标以及方法,现在需要将度量指标体系确定并细化到可度量级别。所以,就需要对指标进行拆解工作。
    事件、参数和属性

事件、参数和属性说明:先给大家解释三个概念,事件、参数和属性。事件可以理解为用户的某个行为,比如登录、注册、购买,都统称为事件;事件和参数结合起来就是指标,比如登录次数、注册人数、购买金额这些我们称为指标,而次数、人数、金额就是事件的参数。事件属性可以从某个维度对事件进行拆分分析,比如登录方式就是登录的属性,分析不同登录方式的登录次数。

上图为运营指标的实例,软件运行指标体系的例子服务从异步消息系统接收到一个消息。事件即接收到消息,参数可以是处理时长(消息处理时长以及消息处理事件)。指标是处理时长必须在10ms之内。属性是消息可以是定时任务,异步任务等等。

下面会具体的介绍软件运行指标体系中会涉及到的度量。
|类别|信息|触发机制|单位|说明|
|--|--|--|--|--|
|jvm|系统内存总量|定时|Kb|mem|
|jvm|空闲内存数量|定时|Kb|mem.free|
|jvm|处理器数量|初始化|个|processors|
|jvm|系统正常运行时间|定时|毫秒|uptime|
|jvm|应用上下文正常运行时间|定时|毫秒|instance.uptime|
|jvm|系统平均负载|定时|百分比|systemload.average|
|jvm|堆信息|定时|Kb|heap,heap.committed,heap.init,heap.used|
|jvm|线程信息|定时|个|threads,thread.peak,thead.daemon|
|jvm|类加载信息|定时|Info|classes,classes.loaded,classes.unloaded|
|jvm|垃圾收集信息|定时|个|gc.xxx.count, gc.xxx.time|
|tomcat|容器session|定时|个|httpsessions.active,httpsessions.max|
|数据库|连接|定时|个|最大连接数, 最小连接数, 活动连接数,连接池的使用情况|
|...|

指标分类:

软件本来就是数字化的事物,不过就是涉及到度量的维度。根据度量维度的不同,可能会涉及到很多模糊不清的指标。所以针对每一个度量指标必须遵循SMART原则:

  1. S代表具体(Specific)
  2. M代表可度量(Measurable)
  3. A代表可实现(Attainable)
  4. R代表现实性(Realistic)
  5. T代表有时限(Timebound)

这样既有度量目标,又可以具体的去实施。不存在不可度量的指标,方便具体的落地实施工作。

  1. Counter(计数器)
    Counter是一个累计度量指标,它是一个只能递增的数值。计数器主要用于统计服务的请求数、任务完成数和错误出现的次数等等。计数器是一个递增的值。

  2. Gauge(测量器)
    Gauges是一个最简单的计量,一般用来统计瞬时状态的数据信息。它表示一个既可以递增, 又可以递减的值。比如系统中处于pending状态的job。

  3. Histogram(柱状图)
    Histograms主要使用来统计数据的分布情况,最大值、最小值、平均值、中位数,百分比(75%、90%、95%、98%、99%和99.9%)。

  4. Meters(码表)
    Meters用来度量某个时间段的平均处理次数(request per second),每1、5、15分钟的TPS。比如一个service的请求数,通过metrics.meter()实例化一个Meter之后,然后通过meter.mark()方法就能将本次请求记录下来。统计结果有总的请求数,平均每秒的请求数,以及最近的1、5、15分钟的平均TPS。

  5. Timers(计时器)
    Timers主要是用来统计某一块代码段的执行时间以及其分布情况,具体是基于Histograms和Meters来实现的。

以上的度量指标分类是从Metrics-Java版的指标度量工具之一
Metrics Core整理出来的。

总结:

本阶段主要分析了度量指标的成因,以及度量指标中相关的分类方法。所以,这里只介绍了度量指标的前期概念。在下面一篇文章中给出相关的技术设计以及具体实践。

参考:

度量
互联网运营,该分析哪些数据和指标
数据分析方法论(一)——构建数据指标体系
数据分析方法论(二)——常用数据分析方法
创业公司如何构建数据指标体系?
电商数据分析基础指标体系
如何搭建指标体系
从 0 到 1 搭建数据运营体系
数据体系搭建 | 梳理架构和指标体系

监控:

metrics
Metrics-Java版的指标度量工具之一
JAVA Metrics度量工具 - Metrics Core 翻译
第 44 课 度量指标(Metrics)
度量指标类型

软件度量指标:

智能分析最佳实践——指标逻辑树
利用Metrics+influxdb+grafana构建监控
基于dropwizard/metrics ,kafka,zabbix构建应用统计数据收集展示系统

软件过程度量指标:

软件度量
軟體度量
软件过程质量度量与控制
软件过程度量模型
软件度量与软件过程管理
常见软件项目度量指标介绍
敏捷软件估算和度量

目录
相关文章
|
28天前
|
搜索推荐 NoSQL Java
微服务架构设计与实践:用Spring Cloud实现抖音的推荐系统
本文基于Spring Cloud实现了一个简化的抖音推荐系统,涵盖用户行为管理、视频资源管理、个性化推荐和实时数据处理四大核心功能。通过Eureka进行服务注册与发现,使用Feign实现服务间调用,并借助Redis缓存用户画像,Kafka传递用户行为数据。文章详细介绍了项目搭建、服务创建及配置过程,包括用户服务、视频服务、推荐服务和数据处理服务的开发步骤。最后,通过业务测试验证了系统的功能,并引入Resilience4j实现服务降级,确保系统在部分服务故障时仍能正常运行。此示例旨在帮助读者理解微服务架构的设计思路与实践方法。
81 16
|
2月前
|
运维 监控 Devops
自动化运维实践:打造高效的DevOps流水线
在软件开发的快节奏中,自动化运维成为提升效率、确保质量的关键。本文将引导你理解自动化运维的价值,通过实际案例分享如何构建一个高效、可靠的DevOps流水线。我们将从持续集成(CI)开始,逐步深入到持续部署(CD),并展示代码示例来具体说明。准备好让你的运维工作飞跃式进步了吗?让我们开始吧!
|
2月前
|
运维 监控 Java
后端开发中的微服务架构实践与挑战####
在数字化转型加速的今天,微服务架构凭借其高度的灵活性、可扩展性和可维护性,成为众多企业后端系统构建的首选方案。本文深入探讨了微服务架构的核心概念、实施步骤、关键技术考量以及面临的主要挑战,旨在为开发者提供一份实用的实践指南。通过案例分析,揭示微服务在实际项目中的应用效果,并针对常见问题提出解决策略,帮助读者更好地理解和应对微服务架构带来的复杂性与机遇。 ####
|
2月前
|
算法 NoSQL Java
微服务架构下的接口限流策略与实践#### 一、
本文旨在探讨微服务架构下,面对高并发请求时如何有效实施接口限流策略,以保障系统稳定性和服务质量。不同于传统的摘要概述,本文将从实际应用场景出发,深入剖析几种主流的限流算法(如令牌桶、漏桶及固定窗口计数器等),通过对比分析它们的优缺点,并结合具体案例,展示如何在Spring Cloud Gateway中集成自定义限流方案,实现动态限流规则调整,为读者提供一套可落地的实践指南。 #### 二、
82 3
|
2月前
|
负载均衡 Java 开发者
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
190 5
|
2月前
|
消息中间件 运维 安全
后端开发中的微服务架构实践与挑战####
在数字化转型的浪潮中,微服务架构凭借其高度的灵活性和可扩展性,成为众多企业重构后端系统的首选方案。本文将深入探讨微服务的核心概念、设计原则、关键技术选型及在实际项目实施过程中面临的挑战与解决方案,旨在为开发者提供一套实用的微服务架构落地指南。我们将从理论框架出发,逐步深入至技术细节,最终通过案例分析,揭示如何在复杂业务场景下有效应用微服务,提升系统的整体性能与稳定性。 ####
57 1
|
2月前
|
监控 安全 持续交付
构建高效微服务架构:策略与实践####
在数字化转型的浪潮中,微服务架构凭借其高度解耦、灵活扩展和易于维护的特点,成为现代企业应用开发的首选。本文深入探讨了构建高效微服务架构的关键策略与实战经验,从服务拆分的艺术到通信机制的选择,再到容器化部署与持续集成/持续部署(CI/CD)的实践,旨在为开发者提供一套全面的微服务设计与实现指南。通过具体案例分析,揭示如何避免常见陷阱,优化系统性能,确保系统的高可用性与可扩展性,助力企业在复杂多变的市场环境中保持竞争力。 ####
58 2
|
2月前
|
消息中间件 运维 API
后端开发中的微服务架构实践####
本文深入探讨了微服务架构在后端开发中的应用,从其定义、优势到实际案例分析,全面解析了如何有效实施微服务以提升系统的可维护性、扩展性和灵活性。不同于传统摘要的概述性质,本摘要旨在激发读者对微服务架构深度探索的兴趣,通过提出问题而非直接给出答案的方式,引导读者深入
55 1
|
2月前
|
负载均衡 监控 API
后端开发中的微服务架构实践与挑战
本文深入探讨了微服务架构在后端开发中的应用,分析了其优势和面临的挑战,并通过案例分析提出了相应的解决策略。微服务架构以其高度的可扩展性和灵活性,成为现代软件开发的重要趋势。然而,它同时也带来了服务间通信、数据一致性等问题。通过实际案例的剖析,本文旨在为开发者提供有效的微服务实施指导,以优化系统性能和用户体验。
|
2月前
|
弹性计算 Kubernetes API
构建高效后端服务:微服务架构的深度剖析与实践####
本文深入探讨了微服务架构的核心理念、设计原则及实现策略,旨在为开发者提供一套系统化的方法论,助力其构建灵活、可扩展且易于维护的后端服务体系。通过案例分析与实战经验分享,揭示了微服务在提升开发效率、优化资源利用及增强系统稳定性方面的关键作用。文章首先概述了微服务架构的基本概念,随后详细阐述了其在后端开发中的应用优势与面临的挑战,最后结合具体实例,展示了如何从零开始规划并实施一个基于微服务的后端项目。 ####