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状态的占比即是这个模块的可用性。

Ztoy网络商铺多用户版
Ztoy网络商铺多用户版

在原版的基础上做了一下修正:增加1st在线支付功能与论坛用户数据结合,vip也可与论坛相关,增加互动性vip会员的全面修正评论没有提交正文的问题特价商品的调用连接问题删掉了2个木马文件去掉了一个后门补了SQL注入补了一个过滤漏洞浮动价不能删除的问题不能够搜索问题收藏时放入购物车时出错点放入购物车弹出2个窗口修正定单不能删除问题VIP出错问题主题添加问题商家注册页导航连接问题添加了导航FLASH源文

下载

那么,如何判断业务或模块是否正常呢?我们以一个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模块的权重。以此类推,我们得出的可用性就可以尽可能的贴近业务及其目标了。

其它的方法

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

写在最后

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

相关专题

更多
云朵浏览器入口合集
云朵浏览器入口合集

本专题整合了云朵浏览器入口合集,阅读专题下面的文章了解更多详细地址。

0

2026.01.20

Java JVM 原理与性能调优实战
Java JVM 原理与性能调优实战

本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。

20

2026.01.20

PS使用蒙版相关教程
PS使用蒙版相关教程

本专题整合了ps使用蒙版相关教程,阅读专题下面的文章了解更多详细内容。

62

2026.01.19

java用途介绍
java用途介绍

本专题整合了java用途功能相关介绍,阅读专题下面的文章了解更多详细内容。

87

2026.01.19

java输出数组相关教程
java输出数组相关教程

本专题整合了java输出数组相关教程,阅读专题下面的文章了解更多详细内容。

39

2026.01.19

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

10

2026.01.19

xml格式相关教程
xml格式相关教程

本专题整合了xml格式相关教程汇总,阅读专题下面的文章了解更多详细内容。

13

2026.01.19

PHP WebSocket 实时通信开发
PHP WebSocket 实时通信开发

本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

19

2026.01.19

微信聊天记录删除恢复导出教程汇总
微信聊天记录删除恢复导出教程汇总

本专题整合了微信聊天记录相关教程大全,阅读专题下面的文章了解更多详细内容。

160

2026.01.18

热门下载

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

精品课程

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

共48课时 | 7.5万人学习

Git 教程
Git 教程

共21课时 | 2.8万人学习

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

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