随着软件行业的不断发展,微服务架构凭借其高度的灵活性、可扩展性和可维护性,逐渐成为企业应用的主流架构风格。然后微服务架构的复杂性也带来了一系列的挑战,其中之一就是如何有效地管理和治理微服务。本文灸哥给你详细介绍和服务治理相关的内容,帮助大家更好地理解和应用微服务治理。
三、微服务的度量
如果你不能度量它,你就无法改进它 —— 彼得·德鲁克
本篇用管理大师彼得·德鲁克的这句话开篇,微服务架构是需要持续演进迭代优化的,如果没有度量指标,你就无从下手。因此度量是微服务治理的基础,通用对微服务进行全方位的监控和测量,收集关键性指标,为后续的管控和管理提供数据支持。这些度量数据不仅有助于实时了解系统的运行状态,还能在问题发生时提供快速定位和解决问题的依据。
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 库,用于收集和报告自定义的业务指标
微服务的度量技术涵盖了性能监控、资源监控和业务监控三个方面。通过选择合适的监控工具和技术框架,可以有效地收集和分析微服务的运行数据,为后续的管控和管理提供有力支持。