扁鹊三兄弟的启示,探寻系统稳定的秘诀

一、稳定性的重要性

1. 公司收益的角度

        从公司收益的视角审视,系统不稳定可能会引发直接损失。例如,当系统突然出现故障导致交易中断时,可能造成交易款项的紊乱、资金的滞留或损失,这不但会阻碍当前交易的顺利完成,还可能诱发一系列财务纠纷与赔偿事宜。同时,订单损失亦不容小觑。系统的不稳定会导致客户下单失败、订单处理延迟或出错,促使客户取消订单,进而影响公司的业务量。长此以往,必将对公司的盈利能力和发展前景形成沉重打击。

 

2. 用户体验的角度

        从用户体验的角度出发,系统不稳定可能引发热搜,带来社会舆论的巨大压力。如今社交媒体发达,用户在遭遇系统故障时极易在网络上表达不满,引发广泛的关注和讨论。这不仅会损害公司的品牌形象,还可能导致潜在客户对公司的产品或服务产生疑虑。此外,用户对系统的信任感会大幅降低,他们会对公司的技术实力和服务质量产生质疑。这种不稳定还会直接影响用户的使用,比如页面加载缓慢、功能无法正常使用、数据丢失等问题,都会令用户感到沮丧和不满,进而降低用户的忠诚度和使用频率。

 

二、故障的种类

        常见的系统故障种类多样,涵盖变更类、容量类、依赖类、固件类和安全类等。

1. 变更类故障

变更类故障通常是由于系统更新、配置更改或软件升级过程中出现的错误导致的。比如,在更新系统版本时,新的代码可能与原有的系统架构不兼容,或者配置参数设置不当,从而引发系统功能异常或性能下降。

 

2. 容量类故障

        容量类故障往往是因为系统无法承受预期的负载而产生的。随着业务的增长,如果系统没有及时进行扩容或优化,当访问量突然大幅增加时,系统可能会出现响应迟缓、服务中断甚至崩溃的情况。

 

3. 依赖类故障

        依赖类故障则是由于外部依赖的服务或组件出现问题而影响到整个系统的正常运行。例如,系统依赖的第三方接口出现故障、网络延迟过高或者外部数据源不可用,都可能导致系统的部分或全部功能无法正常使用。

 

4. 固件类故障

        固件类故障涉及硬件设备的固件问题,比如硬件驱动程序的错误、固件版本过旧或存在漏洞,可能导致硬件设备工作异常,进而影响系统的稳定性。

 

5. 安全类故障

        安全类故障包括黑客攻击、数据泄露、恶意软件感染等安全事件。这些问题不仅会导致系统瘫痪,还可能造成用户数据的丢失和泄露,给公司和用户带来巨大的损失。

 

三、系统可用性指标

        系统可用性可以通过特定的指标来精确衡量,其中一个重要的公式为:可用性 = MTTR / (MTTF + MTTR) 。在这个公式中,分母是 MTTF(Mean Time To Failure,平均故障间隔时间)加上 MTTR(Mean Time To Repair,平均修复时间),分子是 MTTR。

        以一个具体的例子来说,如果一个系统平均每运行 60 分钟就会出现一次故障,那么 MTTF 就是 60 分钟。而每次修复故障需要 10 分钟,那 MTTR 就是 10 分钟。根据上述公式,该系统的可用性约为 14.29% 。

        此外,常提及的“N 个 9”也是衡量系统可用性的重要指标。

  • 3 个 9:99.9%的可用性,意味着(1 - 99.9%)× 365 × 24 = 8.76 小时,即系统每年的停机时间不得超过 8.76 小时。

  • 4 个 9:99.99%的可用性,(1 - 99.99%)× 365 × 24 = 0.876 小时 = 52.6 分钟,表明系统每年的停机时间不能超过 52.6 分钟。

  • 5 个 9:99.999%的可用性,(1 - 99.999%)× 365 × 24 × 60 = 5.26 分钟,意味着系统每年的停机时间不能超过 5.26 分钟。

 

四、如何提升系统稳定性

        在探讨如何提升系统稳定性之前,先为大家分享一则有趣的故事——扁鹊三兄弟的故事。

        魏文王曾问扁鹊:“你们兄弟三人都是医生,谁的医术最高明?”扁鹊回答:“大哥医术最高,二哥其次,我最差。”魏文王感到疑惑,惊讶地问:“那为什么只有你名动天下,他们两个一点名气都没有?” 扁鹊解释道:““我大哥的医术之高,可以防患于未然,一个人的病未起之时,他一望气色便知,然后用药将其调理好,所以天下人都以为他不会治病,他便一点名气都没有。我二哥的能耐,是能治病初起之时,防止别人酿成大病。病人刚开始感冒咳嗽时,他就用药将人治好了,所以我二哥的名气仅止于乡里,被人认为是治小病的医生。我呢,就因为医术最差。所以一定要等到这个人病入膏肓、奄奄一息,然后下虎狼之药,起死回生。所以都以为我的医术最高明,名气传遍诸侯各国。想想看,像我大哥这样治病,人的元气丝毫不伤,我二哥治病,这个人元气稍有破损就补回来了,像我这么治病呢,命是捞回来了,可元气大伤,您说,我们家谁医术明?”

b840e06246bf495ab18e42a23e56e3c5.jpeg

        这个故事与提升系统稳定性存在奇妙的关联,提升系统稳定性的关键举措——事前预防、及时发现、快速恢复,恰好能够与扁鹊三兄弟相对应,且看以下解析。

 

1. 扁鹊大哥——防患于未然,降低故障发生的可能性

b88b67b98fe14ca0a1a7a6fb1e180ad8.webp

        扁鹊大哥在病未发作时就将其消除,我们在提升系统稳定性时,也要向扁鹊大哥学习,全力做好预防与控制工作,将故障发生的可能性扼杀在萌芽中。为此,我们需要做到如下几点。

1.1 研发阶段

1.1.1 隔离

        在系统设计时,确保不同功能之间互不干扰。比如,将核心业务逻辑与非关键的辅助功能进行分离,即使辅助功能出现问题,也不会影响核心业务的正常运行。

 

1.1.2 幂等

        无论重复多少次,结果都应保持一致。例如,在电商系统中,多次提交相同的订单请求,系统都应只处理一次,避免重复下单造成混乱。

 

1.1.3 限流

        当流量过大时,自动拦截部分请求,以保护服务的稳定性和可用性。比如,设定每秒处理的最大请求数,超过限制的请求将被暂时缓存或拒绝。

 

1.1.4 兼容性

        在系统升级或引入新代码时,要确保新旧代码能够和谐共存。例如,在更新数据库结构时,要考虑到对旧数据的兼容处理,确保系统在升级过程中不会丢失或错误处理原有数据。

 

1.2 测试阶段

1.2.1 功能测试

        严格检验新开发的功能是否符合预期。涵盖功能的完整性、准确性、性能等方面,确保新功能在各种场景下都能正常工作。

 

1.22 回归测试

        通过对已有功能的重新测试,确保新代码确保新代码不影响至少不负面影响已有逻辑。

 

1.2.3 兼容性测试

        验证在新功能加入后,系统是否能正常运行。例如,测试新的操作系统版本与应用程序的兼容性。

 

1.2.4 压力测试

        在新功能上线之前,进行压力测试,评估系统是否能够承受预期的业务流量。最好是能把线上实际的流量录制下来,在待上线的代码上进行流量回放。

 

1.3 上线阶段

1.3.1 发布顺序

        明确各个服务的先后发布顺序。某些基础服务必须先上线,其他依赖于它的服务才能正常运行。

 

1.3.2 灰度策略

        逐步让新变化生效,如同让身体逐步适应新的环境或变化。比如,先让一小部分用户使用新功能,收集反馈并进行优化,然后再逐步扩大使用范围,降低问题的影响面。

 

2. 扁鹊二哥——一叶落而知秋,提升故障的发现速度

997a939f26be405d8033e9699f354b9c.jpeg

        扁鹊二哥在病症刚出现时就能迅速治愈,我们也要具备如他一般敏锐的洞察力和快速的反应能力,能够在系统出现小问题时就及时察觉并解决,防止问题进一步恶化。为此,我们需要做到以下几点。

 

2.1 研发环节

2.1.1 关键逻辑添加日志

        在编写代码时添加关键的日志。比如,最基础的对异常捕获后的日志,能够记录下系统出现异常时的具体情况;对下游服务调用的日志,可以追踪服务之间的交互过程;出入参日志,有助于了解数据的输入和输出情况;业务关键流程的日志,能够监控重要业务的执行过程。通过这些丰富的日志信息,一旦出现问题,就能迅速定位到故障点。

 

2.1.2 打点

        系统主动上报数据到监控系统。比如,在电商网站中,实时上报用户的浏览行为、购买行为等数据,通过对这些数据的监控和分析,能够及时发现潜在的问题,如用户购买转化率突然下降、页面浏览时长异常等。

 

2.2 运行环节

2.2.1 监控报警

        配置全面的监控,涵盖系统的各个层面和关键指标,搭配上恰到好处的报警规则,当系统指标超过预设的阈值,如 CPU 使用率过高、内存占用过大、网络延迟增加等,能够及时发出警报通知相关人员,以便迅速采取措施。

 

2.2.2 日常巡检:

        周期性主动探测各种链路是否正常,就像定期对身体进行全面的体检。比如,每天定时检查数据库连接是否正常、网络通信是否稳定、服务器负载是否均衡等,及时发现潜在的问题。

 

2.2.3 数据核对

        上下游系统的单据进行核对,发现单系统内的潜在 bug 。比如,核对订单系统和库存系统之间的数据一致性,确保订单的处理和库存的更新准确无误。

 

3. 扁鹊——动如雷霆,提升故障恢复速度

2b7a08810f734041a39fb374807e9352.webp

        扁鹊在病情严重时能够采取果断措施使其康复,我们在系统出现严重问题时,也要迅速采取有效的恢复措施,使其尽快恢复正常运行。为此我们需要做到如下几点。

 

3.1 研发阶段

3.1.1 工具建设

        针对系统中可能存在的各种问题,预先开发检测或修复的工具,如同家中会常备一些常见疾病的药品一样。例如,开发修复数据库一致性的工具、优化系统性能的工具等,在出现问题时能够迅速使用这些工具进行处理。

 

3.1.2 容灾切换

        在系统设计时,考虑到可能出现的严重问题,提前规划好快速切换流量和设施的方案。比如,建立备份数据库、备用服务器等,在主系统出现故障时能够快速切换,确保服务的连续性。

 

3.1.3 降级开关

        在发生异常情况时,能够灵活地绕开或忽略某些非关键的错误情况,保证系统的核心功能不受影响。例如,在支付系统出现故障时,可以先暂停一些高级支付方式,只保留最基本的支付渠道,确保交易能够继续进行。

 

3.1.4 流控设置

        通过对流量设置合理的上限,保护系统自身不被突然涌入的流量击垮。比如,根据系统的处理能力和资源状况,设定每秒或每分钟能够处理的最大请求数量,当流量超过上限时,进行适当的限流措施,以保证系统的稳定性。

 

3.2 运行阶段

3.2.1 限流

        根据系统的实时运行状况和负载情况,动态调整流量限制策略。比如,当发现系统资源紧张时,进一步收紧流量限制;而当系统资源充足时,适当放宽限制,以提高系统的服务能力。

 

3.2.2 禁用

        当某台机器出现严重问题,可能对整个系统造成更大影响时,直接让其停止提供服务。这样可以迅速隔离问题源,避免问题的扩散。例如,如果某台服务器频繁出现故障或响应异常,立即将其从服务集群中禁用,以保障整体系统的稳定。

 

3.2.3扩容:

        当流量持续上涨,现有资源无法满足需求时,快速扩充机器资源来抗住流量压力。比如,通过增加服务器数量、扩展存储容量等方式,提升系统的处理能力。

 

3.2.4 回滚

        当发现线上变更导致了问题时,能够迅速撤销之前的变更操作。因为系统中的变更可能多种多样,每一种变更都需要提前规划好回滚方案,确保在出现问题时能够快速消除影响,恢复到之前稳定的状态。

 

总结

        总之,提升系统稳定性,我们要借鉴扁鹊三兄弟的智慧,像扁鹊大哥一样在事前减少故障数量,像扁鹊二哥一样在问题还小时快速发现,像扁鹊一样在出现问题时迅速恢复。多管齐下,从预防、发现到恢复,全方位保障系统的稳定健康运行。

b641c1d0c3fc4763a8a61a8720a8c855.png

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/41358.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringbootAOP的入门程序

1、SpringbootAOP的入门 1、添加依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId> </dependency>2、写serivce代码 public interface IUserService {void save();void …

长沙(市场调研公司)源点 企业如何决定是否需要开展市场调研?

长沙源点调研咨询认为&#xff1a;对于一个特定问题&#xff0c;管理者在面临几种解决问题的方案时&#xff0c;不应该凭直觉草率开展应用性市场调研。事实上&#xff0c;首先需要做的决策是是否需要开展调研。在下述情况下&#xff0c;最好不要做调研&#xff1a; *缺乏资源。…

【qt】如何获取网卡的信息?

网卡不只一种,有有线的,有无线的等等 我们用QNetworkInterface类的静态函数allInterfaces() 来获取所有的网卡 返回的是一个网卡的容器. 然后我们对每个网卡来获取其设备名称和硬件地址 可以通过静态函数humanReadableName() 来获取设备名称 可以通过静态函数**hardwareAddre…

使用OpenCV对图像进行三角形检测、颜色识别与距离估算【附代码】

文章目录 前言功能概述必要环境一、代码结构1. 参数定义2. 距离估计3. 颜色转换4. 图像处理函数4.1 读取图像和预处理4.2 轮廓检测4.3 过滤面积并检测三角形4.4 提取边框并计算距离 二、效果展示红色三角形绿色三角形蓝色三角形黄色三角形 三、完整代码获取总结 前言 本文将介…

如何远程访问运行电脑上运行的程序?

远程访问运行电脑上运行的程序的实用指南 一、使用远程桌面协议&#xff08;RDP&#xff09;适用场景配置步骤 二、利用虚拟网络计算&#xff08;VNC&#xff09;适用范围配置过程 三、通过 SSH 隧道主要针对实现方式 四、借助 TeamViewer 等第三方工具特点使用方法 五、注意事…

springai+pgvector+ollama实现rag

首先在ollama中安装mofanke/dmeta-embedding-zh:latest。执行ollama run mofanke/dmeta-embedding-zh 。实现将文本转化为向量数据 接着安装pgvector&#xff08;建议使用pgadmin4作为可视化工具&#xff0c;用navicate会出现表不显示的问题&#xff09; 安装好需要的软件后我们…

【Linux进阶】磁盘分区3——目录树,挂载

Linux安装模式下&#xff0c;磁盘分区的选择&#xff08;极重要&#xff09; 在Windows 系统重新安装之前&#xff0c;你可能会事先考虑&#xff0c;到底系统盘C盘要有多大容量&#xff1f;而数据盘D盘又要给多大容量等&#xff0c;然后实际安装的时候&#xff0c;你会发现其实…

linux 下载依赖慢和访问github代码慢

1 pip install 下载依赖慢&#xff0c;添加清华镜像源 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple 2 git 出现错误 Could not resolve host: github.com 原来是因为github.com没有被主机给解析&#xff0c; 第一步 先 ping 看一下主机地址 …

CAPL如何对txt文件进行读写

文章目录 简单示例CANoe示例Example fileGetStringExample fileGetStringSZ可以将一些测试过程中的日志输出到txt文档。 简单示例 dword txtHandle = 0;//TXTchar fileBuffer[128];txtHandle = OpenFileWrite ("TEST.txt",2); //参数为0,清空文件内容,重新写入

CV02_超强数据集:MSCOCO数据集的简单介绍

1.1 简介 MSCOCO数据集&#xff0c;全称为Microsoft Common Objects in Context&#xff0c;是由微软公司在2014年推出并维护的一个大规模的图像数据集&#xff0c;旨在推动计算机视觉领域的研究&#xff0c;尤其是目标识别、目标检测、实例分割、图像描述生成等任务。该数据集…

Qt项目:基于Qt实现的网络聊天室---注册模块

文章目录 基本页面设计创建登录界面创建注册界面优化样式完善注册类界面 客户端逻辑完善客户端增加post逻辑客户端配置管理 邮箱注册服务认证服务读取配置邮箱验证服务联调设置验证码过期封装redis操作类封装redis连接池注册功能Server端接受注册请求封装mysql连接池封装DAO操作…

鸿蒙开发:Universal Keystore Kit(密钥管理服务)【密钥导入介绍及算法规格】

密钥导入介绍及算法规格 如果业务在HUKS外部生成密钥&#xff08;比如应用间协商生成、服务器端生成&#xff09;&#xff0c;业务可以将密钥导入到HUKS中由HUKS进行管理。密钥一旦导入到HUKS中&#xff0c;在密钥的生命周期内&#xff0c;其明文仅在安全环境中进行访问操作&a…

【CV炼丹师勇闯力扣训练营 Day24:§7 回溯3】

CV炼丹师勇闯力扣训练营 代码随想录算法训练营第24天 93 复原IP地址 有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 ‘.’ 分隔。 例如&#xff1a;“0.1.2.201” 和 “192.168.…

JavaEE——计算机工作原理

冯诺依曼体系&#xff08;VonNeumannArchitecture&#xff09; 现代计算机&#xff0c;大多遵守冯诺依曼体系结构 CPU中央处理器&#xff1a;进行算术运算与逻辑判断 存储器&#xff1a;分为外存和内存&#xff0c;用于存储数据&#xff08;使用二进制存储&#xff09; 输入…

鸿蒙开发设备管理:【@ohos.account.appAccount (应用帐号管理)】

应用帐号管理 说明&#xff1a; 本模块首批接口从API version 7开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。开发前请熟悉鸿蒙开发指导文档&#xff1a;gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 导入模…

大厂开发必知必会:Devops、CI/CD、流水线和Paas的关系解析说明

为什么作为程序开发人员需要了解ci/cd流程和原理&#xff1f; 作为程序开发人员&#xff0c;了解CI/CD&#xff08;持续集成/持续交付&#xff09;的流程和原理具有以下几个重要的理由&#xff1a; 1. 提高代码质量和稳定性 自动化测试&#xff1a;CI/CD流程中集成了自动化测…

C++容器map的常见用法

文章目录 1.map和multimap容器1.map容器的构造和赋值1.构造函数2.赋值操作 2.map容器的大小和交换1.获取大小2.交换内容 3.map容器的插入和删除1.插入元素2.删除元素3.注意事项 4.map容器的查找和统计1.查找元素2.统计元素3.示例 5.map容器的排序1.自定义排序规则2.注意点3.示例…

责任链模式在金融业务中的应用及其框架实现

引言 责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为设计模式&#xff0c;它通过为请求创建一个处理链&#xff0c;使多个对象都有机会处理这个请求。责任链模式通过将请求的发送者和接收者解耦&#xff0c;使得多个接收者可以依次处理请求&am…

Linux——命令执行原理,命令别名

### 执行原理 - 系统为了让用户在命令行快速方便地执行命令&#xff0c;将可执行文件的路径存储在环境变量PATH中&#xff0c;使得shell知道命令的可执行文件位置 - PATH环境变量&#xff1a;当用户每次执行外部命令的时候都会去该变量所记录的路径下搜索和命令同名的二进制文件…

景区智慧公厕解决方案,公厕革命新方式

在智慧旅游的浪潮下&#xff0c;景区智慧公厕解决方案正悄然引领着一场公厕革命&#xff0c;不仅革新了传统公厕的管理模式&#xff0c;更以智能化、人性化的服务理念&#xff0c;为游客提供了前所未有的舒适体验。作为智慧城市建设的重要一环&#xff0c;智慧公厕解决方案正逐…