1.深入理解稳定性和高可用稳定性和高可用是两个常见的词。根据经验和感受,我们知道提升系统的这两个指标,会让系统更健康,产品会有更好的用户体验。但是如果要定义稳定性和高可用,应该怎么表达呢?稳定性和高可用有什么区别和联系?我觉得首先要弄清楚这两个问题,才能定下明确的目标。系统地制定完整可行的方案。在维基百科上搜索stability,定义如下:Stability是一个数学或工程术语,决定一个系统是否为有界输入产生有界输出。如果是,则称系统稳定;如果不是,则系统不稳定。再看高可用性:高可用性(英文:highavailability,缩写为HA),一个IT术语,指的是系统不间断地执行其功能的能力,代表系统的可用性程度。它是系统设计的标准之一。高可用性系统可以比组成系统的各个组件运行更长的时间。首先从稳定性的定义中提炼出关键词——系统、输入、输出。在Ant目前的技术架构中,一个应用可以看作一个系统,应用之间的服务请求是输入,服务响应是输出。当服务响应达到预期时,应用系统才算稳定。当它们组合成一个更大的系统,作为商业产品向用户表达时,用户的请求作为输入,产品表达作为输出。当产品功能正常运行时,可以认为产品系统稳定。综上所述,稳定性的定义可以概括为——当系统接收到输入时,能够产生正确的、预期的输出,系统称为稳定的;否则,系统称为不稳定。回到命题,为什么叫稳保?能不能换个说法叫稳定性提高?从上面的定义,我们可以得出结论,稳定性描述了系统的行为。一个系统是否稳定,就像我们评价一个人是否健康一样,很难用一句话来描述和量化。但是可以从消极的角度快速判断。人们通过良好的饮食和生活习惯来减少疾病的发生,保持身体健康。保证系统的稳定性或提高系统的稳定性也是如此。我们需要使用各种方法来避免那些不稳定的情况。所谓更稳定并不是客观存在的,而是主观上希望避免或减少不稳定的发生。与稳定性不同,可用性是一个可量化的指标。计算公式在维基百科中是这样描述的:根据系统损坏、不可用时间、从不可运行状态到可运行状态的时间,与系统总运行时间比较。我们经常听到的三个九(99.9%)和四个九(99.99%)衡量系统的可用性。高可用就是保证系统的这个指标保持在高水平。在公式的定义和描述中,系统的运行时间分为三部分:系统正常运行的时间,即系统处于稳定状态的时间。系统损坏或不可用的时间,即系统处于不稳定状态的时间。系统从不可运行状态恢复到可运行状态所用的时间,即系统从不稳定状态恢复到稳定状态所需的时间。系统可用性和系统稳定性是正相关的。然而,在现实生活中,系统不可能永远处于稳定状态。逆向思考,将上面的公式进行转换,更有利于我们的分析:至此,这个命题的目标,KPI就很明确了。保证系统稳定和高可用的目标是让系统保持稳定的工作状态,不对用户造成负面影响,避免出现在线问题和P级故障。核心kpi是系统的可用性。为了提高系统的可用性,首先要保证系统的稳定性,减少不稳定情况的发生。其次,当系统因各种组件故障而处于不稳定状态时,可以快速发现并恢复到稳定可用状态。.2.稳定性和高可用保障的核心思想通过上面的推导,我们可以得到以提高系统可用性为目标的两个基本的问题解决思路。如图所示,要解决问题,首要任务就是找到问题并定义问题。因此,为了提高系统的稳定性,我们首先列举应用系统中常见的不稳定情况,然后一一对症下药:功能:应用程序执行的功能有错误,不符合预期.容量:当系统接收到的请求数量增加时,应用无法正常处理,出现异常或超时,导致服务失败。安全性:当系统收到未经授权或恶意的攻击请求时,会导致应用异常甚至服务失败。容错:应用程序无法正确处理用户在使用中的错误。当出现上述情况时,说明系统处于不稳定状态,需要我们能够及时发现并处理。造成这些问题的原因在软件系统中通常可以归纳为以下三类:人为故障:由于软件开发各个环节的思考不够充分,或者执行不慎导致的各种问题。硬件故障:网络故障、硬盘空间不足、内存崩溃等。软件故障:线程池异常、JVM异常、中间件或其他依赖的应用服务异常。对于一个动态演进的系统,我们没有办法将故障发生的概率降为0,只能通过在软件生产过程中建立流程规范和机制,将其发生的概率降到最低。其次,对于运行中的系统,需要建立健全监控预警机制,及时发现系统故障,通过预案的实施快速恢复系统。基于以上结论,为了提高系统的可用性,需要从以下三个方面着手:故障预防、故障发现和故障恢复。人犯错的概率远大于机器,所以防错最重要的是建立机制,在团队内部达成共识,并按照这个流程不断进行研发工作,从而减少个人因素(思维、执行力、状态等)对系统稳定性的影响。对于故障发现和故障恢复,需要通过系统监控和应急方案,快速发现系统异常并进行恢复,将故障影响降到最低。以蚂蚁蚂蚁日常产品开发流程为例,从功能、容量、安全、容错四大核心要素出发,给出一套解决方案,仅供参考。1.研发规范(1)设计阶段1)团队分段文档模板2)高可用设计规范(2)编码阶段1)代码规范通用代码规范工程结构规范2)单次测试覆盖率单次测试通过率代码覆盖率3)日志规格4)安全漏洞修复规格(3)发布阶段(4)变更规格:三招2.容量保障(1)容量评估1)机器容量2)DB容量3)缓存容量(2)压力测试找出(3)限流方案(4)降级方案3.监控告警(1)日志规范(2)监控排序1)应用基础监控2)网关监控3)服务监控4)业务监控5)限流监控(3)告警规范(4)数据校验4.应急响应(1)日常计划1)硬件异常计划2)中间件异常计划3)业务异常计划(2)大促计划(3)计划执行onspecification3.Howtodo总结良好的稳定性和高可用保证是一个巨大的命题,任何一小部分的内容在内网都能找到大量的文章。写这篇文章的目的是总结一下我对稳定性和高可用保障工作的理解,和大家分享一套系统框架思路。希望大家读完本书后,能够对安全生产有一个更全面的认识,而不是拘泥于细节。
