高可用的本质(2)

简介: 高可用的本质

四  软件风险在何方
前面介绍了控制风险的方法,回到软件系统这个领域,它的风险又在哪里?
以软件系统为对象,从内看包括:计算系统和存储系统;从外看包括:人员,硬件,上游系统,下游系统;以及(隐含的)时间。



由于每个对象都是由其他对象组成的,因此每个对象还可以继续往细分解(理论上可以无限分解下去),上面的分解方式主要是为了简化理解。
1  软件系统风险的来源
风险源于(有危害的)变化,一个对象的风险来源于所有跟它有关系的对象的(有危害的)变化。因此,软件系统风险的来源,分为以下7大类:
计算系统变化:运行变慢,运行错误
系统运行所依赖的服务器资源(如CPU,MEM,IO等),应用资源(RPC线程数,DB连接数等),业务资源(业务ID满了,余额不足,业务额度不够等)的负载等都会影响系统运行的风险期望。
存储系统变化:运行变慢,运行错误,数据错误
系统运行所依赖的服务器资源(如CPU,MEM,IO等),存储资源(并发数等),数据资源(单库容量,单表容量等)的负载和数据一致性等都会影响存储系统运行的风险期望。
人的变化:变更出错
变更人员的数量,安全生产意识,熟练程度,变更的数量,变更的方式等都会影响变更的风险期望。
由于变更的人多,变更的次数也多,导致变更成为蚂蚁所有故障来源里的TOP1,这也是为什么“变更三板斧”这么出名的原因。
“变更三板斧”正确的排序应该是“可灰度,可监控,可应急”;可灰度代表的是R,可监控和可应急代表的是T。

思考:如果变更三板斧让你再加一板斧,你觉得应该是什么?


硬件变化:损坏
硬件的数量,质量,使用年限,保养等都会影响硬件的风险期望,硬件损坏会影响上层软件系统不可用。
上游变化:请求变大
请求分为3个维度:(由无数API汇集而成的)网络流量,(由无数KEY请求组成的)API,KEY。

  • 网络流量过大会造成网络堵塞,影响网络通道中的所有网络流量请求。


  • API请求过大会造成对应服务集群过载,影响整个服务机器上的所有API请求,甚至往外传播。


  • KEY请求过大(俗称“热点KEY”)会造成单机过载,影响单机上所有KEY请求,甚至往外传播。


所以大促保障的时候,不仅仅是关注核心API的容量保障,还需要考虑网络流量和热点KEY。
下游变化:响应变慢,响应错误
下游服务的数量,服务等级,服务可用率等影响下游服务的风险期望。下游响应变慢可能会拖慢上游,下游响应错误可能会影响上游运行结果。
时间变化:时间到期
时间到期往往被人忽视,但它往往具有突然性和全局破坏性,一旦时间到期触发故障会导致非常被动,所以要提前识别,尽早预警,如:秘钥到期,证书到期,费用到期,跨时区,跨年,跨月,跨日等。

  • 例如:2019年日本运营商软银因证书到期引发3000w用户长达4小时通信中断。


以上每一大类风险都可以基于nPRT公式进行逐一分析处理。


2  风险的数量:一生三,三生万物
任何一个事物既是由其他事物组成的又是其他事物的组成部分,无限循环下去;一生三,三生万物,风险的数量是无穷无尽的。
向内看,内含内,可以无限小下去;当原子粒度的问题传播开时,也可能影响软件系统的可用性,就像100纳米的新冠病毒就可以影响人体的可用性一样。
向外看,外有外,可以无限大下去;当太阳系毁灭,软件系统的可用性自然就不复存在。
虽然风险无穷无尽,但是只要我们对风险多一些了解,根据控制风险的一些理念和原则,还是可以更好的降低风险期望。
谈一谈敬畏之心:

  • 我们对世界的认知是有限的,这也让我们少了许多恐惧,同时也让我们少了一些敬畏之心。


  • 我们真正要敬畏的不是处罚条例,而是我们不知道的,以及我们不知道我们不知道。


五  结束语

  • 所有事物都是变化的。


  • 所有事物都不是100%可靠的。


  • 因此才有了风险,风险是不可见的,可见的是故障。


  • 风险是不能消灭光的,但是可以远离,可以减少。


  • 故障是不可避免的,但是可以推迟,可以缩小影响范围,缩短影响时间。


nPRT公式不仅仅适用于软件系统风险,也适用于其他风险领域,希望对大家有用。

相关文章
|
10月前
|
JSON 前端开发 JavaScript
如何开发一套EHS健康安全环境管理系统中的健康管理板块?(附架构图+流程图+代码参考)
本文深入探讨了企业EHS(环境、健康与安全)系统中的核心模块——健康管理。文章指出,企业健康管理不仅是合规要求,更是提升生产效率、降低事故率和用工成本的关键。通过构建系统化、数据化的健康管理模块,企业可以实现体检、档案、劳保用品管理、异常预警和统计看板的闭环管理。特别适用于中大型企业,文章提供了从系统架构设计、数据库建模、后端与前端实现到部署运维的完整解决方案,并附有可落地的代码示例和技术选型建议。此外,还涵盖了开发技巧、权限控制、数据隐私、接口设计等工程化实践,以及系统扩展和第三方集成的思路,为企业打造高效、合规、可持续优化的EHS健康管理体系提供了全面指导。
|
人工智能 运维 API
云栖大会 | Terraform从入门到实践:快速构建你的第一张业务网络
云栖大会 | Terraform从入门到实践:快速构建你的第一张业务网络
609 1
|
10月前
|
人工智能 JSON 边缘计算
从零开始学MCP(1)| MCP 协议核心原理解析
MCP 协议统一 AI 工具调用标准,解决碎片化、高耦合与上下文丢失问题,采用 Client/Server 架构,支持上下文传递与 SSE 流式响应,提升工具调用效率与灵活性。
|
SQL 关系型数据库 MySQL
MySQL中的12个SQL编写规范
SQL良好习惯提升查询清晰度、效率和安全性,包括使用EXPLAIN分析查询计划、DELETE/UPDATE时加LIMIT限制影响范围、为表和字段添加注释、关键字大写缩进、指定INSERT字段名、先测试后执行、表含主键及时间戳字段、Update/Delete需Where条件、用InnoDB引擎、避免SELECT *,选择UTF8字符集和规范索引命名。
MySQL中的12个SQL编写规范
|
Linux
Linux系统之id命令的基本使用
Linux系统之id命令的基本使用
712 5
Linux系统之id命令的基本使用
|
存储 编译器 C语言
【C语言】C语言的变量和声明系统性讲解
在C语言中,声明和定义是两个关键概念,分别用于告知编译器变量或函数的存在(声明)和实际创建及分配内存(定义)。声明可以多次出现,而定义只能有一次。声明通常位于头文件中,定义则在源文件中。通过合理组织头文件和源文件,可以提高代码的模块化和可维护性。示例包括全局变量、局部变量、函数、结构体、联合体、数组、字符串、枚举和指针的声明与定义。
863 12
|
XML 数据采集 数据格式
Python 爬虫必备杀器,xpath 解析 HTML
【11月更文挑战第17天】XPath 是一种用于在 XML 和 HTML 文档中定位节点的语言,通过路径表达式选取节点或节点集。它不仅适用于 XML,也广泛应用于 HTML 解析。基本语法包括标签名、属性、层级关系等的选择,如 `//p` 选择所有段落标签,`//a[@href='example.com']` 选择特定链接。在 Python 中,常用 lxml 库结合 XPath 进行网页数据抓取,支持高效解析与复杂信息提取。高级技巧涵盖轴的使用和函数应用,如 `contains()` 用于模糊匹配。
529 7
|
测试技术 C# 数据库
C# 一分钟浅谈:测试驱动开发 (TDD) 实践
【10月更文挑战第18天】测试驱动开发(TDD)是一种软件开发方法论,强调先编写测试代码再编写功能代码,以确保代码质量和可维护性。本文从 TDD 的基本概念入手,详细介绍了其核心步骤——编写测试、运行测试并失败、编写代码使测试通过,以及“红绿重构”循环。文章还探讨了 TDD 的优势,包括提高代码质量、促进设计思考、减少调试时间和文档化。此外,文中分析了常见问题及解决方案,如测试覆盖率不足、测试代码过于复杂、忽视重构和测试依赖过多,并通过一个简单的计算器类的代码案例,展示了 TDD 的实际应用过程。
422 1
|
数据可视化 物联网 程序员
使用webgl(three.js)搭建一个3D智慧园区、3D建筑,3D消防模拟,web版3D,bim管理系统——第四课(炫酷版一)
3d建筑,3d消防,消防演习模拟,3d库房,3d档案室,3d密集架,webGL,threejs,3d机房,bim管理系统
6442 0
|
网络虚拟化
【Loopback Detection 环回检测以及原理解读】
【Loopback Detection 环回检测以及原理解读】
1636 0