0

0

运维稳定性问题的关键–可用性

WBOY

WBOY

发布时间:2024-03-27 18:11:20

|

1457人浏览过

|

来源于Linux就该这么学

转载

复盘更多的是基于事后的总结与提升。那么我们如何发现、测量稳定性问题呢?那么我们就需要请出今天的主角了——可用性。

什么是可用性?

可用性作为评价业务稳定性的一个重要指标,它可以通过数据量化、建立基线的方式来发现业务中存在的周期性问题,并由此更有针对性的进行服务质量改进。

那么,什么是可用性呢?可用性是指在一个指定的时间间隔内,对于一个功能个体来讲,总的可用时间所占的比例。换句话说,是指在指定的时间段内,系统能够正常运行的概率或占比。对于我们现在的互联网业务来说大部分都属于「实时」、「在线」,即Real-Time Online System,实时在线系统。对于我们的大部分业务说上面所指的指定时间段,应该就是7*24小时。

可用性的结果经常使用小数点或者百分比表示。我们通常使用一个被称为几个九的度量,对应小数点后连续9的个数。比如,“五个九”就是指该系统在指定时间段内有0.99999(或者99.999%)的可用性。

怎么理解对应的量级呢?

比如,某系统在一个指定的时间段内,如1天,即24小时。同时我们的监测粒度是分钟,即1440分钟。在我们监控的1440分钟内,系统正常运行了1430分钟。那么在这个指定的时间段内,该系统的可用性即为1430/1440≈0.99306(99.306%)。也就是我们常说的2个9。

那么,99.306%这个值就代表该系统处于正常可用的Availability状态占比,那么1-99.306%得到的0.694%这个值就代表该系统处理异常不可用的Unavailability状态占比。简单的罗列为公式,即为:

业务在线总时长 = 业务的正常可用时长 + 业务的异常不可用时长

更进一步,可用性就是指:

可用性=业务的正常可用时长 / 业务在线总时长

运维稳定性问题的关键–可用性

如何建立可用性

理解了什么是可用性,接下来我们讲一下如何建立可用性。建立可用性的方法有很多,常见的方法有几种:

拨测法

拨测法即是按照各业务的应用、功能、模块进行周期性测试其运行状态是否正常的一种方法。

举例:我们业务有一个名为A的模块,那么就周期性的(比如,每5分钟一次)对这个模块使用模拟用户行为的方法对其运行状态进行抽样检查。如果该模块运行正常,就记为Availability,如果为非正常,就记为Unavailability。累加至一个时间周期内(比如,1天)Availability状态的占比即是这个模块的可用性。

Giiso写作机器人
Giiso写作机器人

Giiso写作机器人,让写作更简单

下载

那么,如何判断业务或模块是否正常呢?我们以一个web类型的业务为例,我们可以检查该服务下的主页、分类页或内容页的关键内容。一般来说,我们可以匹配指定页面Head、Body、bottom的指定字段或关键字。如果可以匹配到指定的一个或一组字段或关键字,那么即为正常,反之为异常。我们可以通过脚本、Nagios、Zabbix等工具来实现对业务的周期性拨测。

这种方法的优、缺点都很明显。优点是这种方法实施难度较低且可以与通过模拟用户行为的方式来测量,也业务实际情况可以比较吻合。但通过这种周期性抽样的方法,存在抽样样本不足或偏差的问题。比如每5分钟拨测一次,如果故障出现和修复都在这5分钟内完成,那么拨测法就很难去捕获到这种错误。

日志分析法

日志分析法即是通过各业务的应用、功能、模块日志进行分析得到可用性的一种方法。

举例:我们业务有一个名为A的模块,那么就周期性的(比如,每小时一次)对这个模块上1个小时日志进行分析。从日志层面区分出正常请求在占比,即是这个模块在过去1个小时的可用性。还是以web类型的业务为例,我们可以从日志中将2XX、5XX状态分别进行统计、分析,可以理解2XX即是Availability,5XX即是Unavailability。(3XX与4XX可以按照实际的业务情况再考虑是否参与分析)

这种方法上很明显的解决了拨测法抽样样本不足或偏差的问题,但也存在与实际业务影响指数可能会存在较大差别的情况。比如,我们在过去1个小时的错误都发生在1分钟内,剩余的59分钟业务都是正常的。很显然这样得出来的可用性和实际业务情况是有一定偏差的。那么怎么解决这种偏差呢?日志分析阈值法就应运而生了。

日志分析阈值法

日志分析阈值法是在日志分析法的基础上添加了状态阈值判断的一种可用性计划方法。

举例:我们业务有一个名为A的模块,我们通过日志分析法得到,这个模块每分钟正常情况下的请求数约为10W次,那么我们可以设置一个阈值为10次。这10次的意思就是指,我们容许在1分钟内发生万分之一以内的错误。如果1分钟内发生的错误在10次以内,我们就认为在过去1分钟的状态为正常,就标记为Availability。如果1分钟内发生的错误超过10次,那么我们就认为在过去1分钟的状态为异常,就标记为Unavailability。最后再统计Availability状态的占比即是这个模块的可用性。当然这个阈值需要根据业务的实际情况进行调整。

这种方法上就很好的解决了拨测法抽样样本偏差与日志分析法差生实际业务影响脱节的不足,达到很好的一种平衡。

还有一个问题,如果一个业务由A、B、C三个模块构成,那么怎样通过模块的可用性,怎么算出业务的可用性呢?简单的方法就是通过最三个模块可用性的平均值即可。但这存在与业务目标相悖的问题。那么我们可以通过与业务目标对齐,进行加权平均的方法。比如A模块对业务来说更加关键,那么我们在计算可用性时就给出A模块更多的权重;C模块是业务的旁路系统,那么就可以在计算时降低对C模块的权重。以此类推,我们得出的可用性就可以尽可能的贴近业务及其目标了。

其它的方法

我们还可以通过利用像基调、博睿这种第三方的测试平台的节点,对业务进行更加广泛的拨测,以提高采集样本的精度,减少其偏差。当然其结果也受限于第三方平台及链路间的稳定性的影响
对于有客户端的业务,我们可以通过在客户端关键路径上进行打点,然后将用户的打点日志集中至服务端后再进行集中分析。这种方法虽然可以反应出最真实的用户状态,但也存在实施成本相对 较高、日志上传延迟等问题。

写在最后

计算可用性的方法有远不至上面写的几种,并且并有哪一种方法可以解决所有的问题和痛点。从成本、收益、时间等角度选择一种或多种最合适自己业务或团队的方法,用于持续改进业务的服务质量才是王道。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

49

2026.03.13

Python异步编程与Asyncio高并发应用实践
Python异步编程与Asyncio高并发应用实践

本专题围绕 Python 异步编程模型展开,深入讲解 Asyncio 框架的核心原理与应用实践。内容包括事件循环机制、协程任务调度、异步 IO 处理以及并发任务管理策略。通过构建高并发网络请求与异步数据处理案例,帮助开发者掌握 Python 在高并发场景中的高效开发方法,并提升系统资源利用率与整体运行性能。

89

2026.03.12

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

276

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

59

2026.03.10

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

99

2026.03.09

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

105

2026.03.06

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

230

2026.03.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

619

2026.03.04

AI安装教程大全
AI安装教程大全

2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

173

2026.03.04

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 10.7万人学习

Git 教程
Git 教程

共21课时 | 4.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号