高可用的本质(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公式不仅仅适用于软件系统风险,也适用于其他风险领域,希望对大家有用。

相关文章
|
1月前
|
人工智能 安全 API
Nacos 安全护栏:MCP、Agent、配置全维防护,重塑 AI Registry 安全边界
Nacos安全新标杆:精细鉴权、无感灰度、全量审计!
992 74
|
关系型数据库 MySQL Java
MySQL单表膨胀优化之MyCat分库分表
MySQL单表膨胀优化之MyCat分库分表
408 0
|
2月前
|
人工智能 前端开发 Unix
从CLI原理出发,如何做好AI Coding
本文探讨CLI类AI编程工具的产品美学与技术原理,分析其遵循Unix哲学的轻量、可组合、可集成特性,解析Single Agent架构与上下文工程的实践,并分享如何通过Prompt优化、任务拆解与团队对齐,高效利用CLI提升编码效率,展望AI时代人机协作的新范式。
621 10
从CLI原理出发,如何做好AI Coding
|
9月前
|
人工智能 负载均衡 API
长连接网关技术专题(十二):大模型时代多模型AI网关的架构设计与实现
随着 AI 技术快速发展,业务对 AI 能力的渴求日益增长。当 AI 服务面对处理大规模请求和高并发流量时,AI 网关从中扮演着至关重要的角色。AI 服务通常涉及大量的计算任务和设备资源占用,此时需要一个 AI 网关负责协调这些请求来确保系统的稳定性与高效性。因此,与传统微服务架构类似,我们将相关 API 管理的功能(如流量控制、用户鉴权、配额计费、负载均衡、API 路由等)集中放置在 AI 网关层,可以降低系统整体复杂度并提升可维护性。 本文要分享的是B站在大模型时代基于多模型AI的网关架构设计和实践总结,希望能带给你启发。
767 4
|
SQL 监控 Oracle
高可用的本质
无论是一个域,一个BG,还是一个站点,虽然范围有大有小,对象有所不同,但其高可用的理念都是相通的,今天将自己对高可用的一点点思考以及总结的【nPRT公式】分享给大家。
高可用的本质
|
NoSQL Redis
redis 的 key 过期策略是怎么实现的(经典面试题)超级通俗易懂的解释!
本文解释了Redis实现key过期策略的方式,包括定期删除和惰性删除两种机制,并提到了Redis的内存淘汰策略作为补充,以确保过期的key能够被及时删除。
315 1
|
关系型数据库 MySQL
MySQL 分库分表实战
MySQL 分库分表实战
350 0
|
存储 监控 Java
一文看懂分布式链路监控系统
本文通过阿里的Eagleeye(鹰眼)和开源的Skywalking,从数据模型、数据埋点以及数据存储三个方面介绍分布式链路监控系统的实现细节,其中将重点介绍Skywalking字节码增强的实现方案。
92205 6
|
存储 缓存 NoSQL
聊一聊缓存和数据库不一致性问题的产生及主流解决方案以及扩展的思考1
聊一聊缓存和数据库不一致性问题的产生及主流解决方案以及扩展的思考
291 0
|
运维 供应链 容灾
阿里异地多活架构新突破:库存单元化部署技术思路揭秘(2)
阿里异地多活架构新突破:库存单元化部署技术思路揭秘
838 0