设计方案

更新时间:

基于稳定性支柱设计原则,整体稳定性设计方案可参考如下:

(应用上云规划-应用上云实施-图5)  备份 2 2.jpg

架构设计原则

软件系统从所有的功能都在一个应用程序内运行的单体应用架构,到不同的功能模块分别部署在不同的服务器上的传统分布式应用架构,再到服务细分通过轻量级的通信机制进行互相调用的微服务架构,到现在将云计算、容器化、微服务架构等技术结合起来的云原生架构。在软件系统架构演进中不变的是系统的基本属性,包含存储、计算和网络,变的是存储、计算和网络的实现方式和规模,往大规模、高性能、高可靠、易扩展等方向迭代演进,所以对架构稳定性提出了更高的要求。

系统可预见的稳定性风险包含软硬件故障和不可预期的流量,小到线程级风险,大到地域级灾难,从此出发可通过容灾、容错、容量三方面建立系统架构稳定性。

容灾

容灾就是在灾难发生时,在保证生产系统的数据尽量少丢失的情况下,保持生存系统的业务不间断地运行。异地多活、同城双活都属于容灾的范畴。借助阿里云多区域(Region)及可用区(Availability Zone,简称AZ)能力,应用可以用较小成本来完成容灾架构部署。

容灾需要具备较为完善的数据保护与灾难恢复功能,保证生产中心不能正常工作时数据的完整性及业务的连续性,并在最短时间内由灾备中心接替,恢复业务系统的正常运行,将损失降到最小。

容错

容错是指在分布式系统中,系统出现故障时,通过设计和实现可靠的机制和策略,使系统能够自动检测、排除或者纠正错误,保证系统能够正常运行,从而提高系统的可靠性和稳定性。

容量

容量是在一定时间内,系统能够处理的最大工作量或数据量,或指系统所能够承载的最大负载。系统容量与系统的硬件、软件、架构以及网络带宽等因素密切相关。在云上,还需要关注单个阿里云账号下的云服务配额,避免因触及云服务配额限制导致的业务故障。

变更设计原则

在企业的运维管理与运行过程中,就会有变更产生。变更是指添加、修改或删除任何可能对服务产生直接或间接影响的内容。当变更失败时可能会带来严重后果:业务中断、客户舆情等等一系列问题。为了降低变更带来的业务风险,需要遵循变更设计原则:可灰度、可监控、可回滚。

可灰度

可灰度,需要建立起完整的灰度发布机制,完善的灰度机制有助于变更失败时降低业务影响,提升用户体验。

灰度发布机制包含但不限于以下几点:灰度方式、灰度批次、间隔时间、灰度观测等。灰度发布需注意:

  1. 灰度间隔时间:合理设定灰度间隔时间,不宜过长。过长的灰度间隔时间可能导致下游应用出现数据不一致等问题。

  2. 灰度发布方式:合理选择灰度发布方式,可按用户、按区域、按渠道等方式进行灰度,避免出现灰度过程中用户体验不一致的问题。

  3. 灰度发布批次:建议先小范围的进行灰度验证,再逐步扩大灰度范围。

  4. 灰度观测指标:明确灰度期间的可观测指标,用于判断发布结果,避免造成连锁反应。

可回滚

大部分变更要做好应急恢复手段,最常用的技术手段就是回滚。

理论上回滚永远是最合适最有效的方法,当问题发生时,保证业务连续运行永远是第一要义。实际中可能存在其他解决方案,但后果无法预料,所以选择回滚是最好方式。

在发布时建议多版本小更新,避免因变更版本跨度较大,带来的系统依赖关系问题导致无法回滚。

可观测

在变更过程中,会影响到现有环境以及上下游业务,通过对业务、链路、资源等做到可观测,就能够第一时间发现问题。在观测过程中,关注业务指标(如下单成功率)和应用指标(如CPU、Load、异常数量等)。当指标较多时,优先关注高优先级的业务指标,业务指标能够最直观反映当前系统状况,当业务指标发生变化时,往往应用指标也会有相应的变化。

变更前需准备好对应的检查清单。在变更期间,要做到持续观察监控数据,确定是否有负面影响或问题。在变更结束后,对变更前后的业务指标进行对比,没有问题后才结束变更。

应急响应机制

应急响应机制的关键点在于事件发生后,有标准的操作流程和动作。阿里巴巴在过去十几年的安全生产过程中,沉淀了一套故障应急响应机制,简称应急响应1-5-10。是指在1分钟内发现故障,5分钟内组织相关人员进行初步排查,10分钟内开展故障恢复和处理工作。企业在设计应急响应机制时,可以参考该方式明确响应期间的标准动作和流程,确保在事件发生时,相关干系人都能够明确自身职责和所需要采取的措施。

故障发现

故障一旦发生,越早发现故障,能够越早进行响应。建议通过以下途径实现故障的快速发现:

  • 统一告警:在发现故障后,需要将相关信息及时告知相关人员,包括系统管理员、运维人员等。可以通过短信、邮件、钉钉等方式进行告警,确保所有相关人员第一时间得知故障情况,以便快速组织应急响应。

  • 监控大屏:监控大屏是指将所有系统的运行情况以图形化的方式展示在屏幕上,以便实时监控系统健康状况。在发生故障时,监控大屏可以快速反应故障情况,并提供相关数据,为故障排查及处理提供依据。

  • 风险预测:风险预测是指在发生故障前,通过数据分析、机器学习等方式,预测系统的风险情况,提前进行预防和处理。在故障应急响应中,风险预测可以作为重要参考,帮助快速识别问题的根本原因,提高故障处理效率和精度。

故障响应

在发现故障后,需要快速定位问题,通常有以下做法:

  • 组织协调:故障发生后,需要迅速组织相关人员进行应急响应。组织协调包括设置指挥中心、确定应急响应流程、分配任务等。这些工作的目的是提高应急响应的效率和准确性,让每个人都清楚自己的任务和责任,避免出现混乱和误操作。

  • 告警关联分析:在故障发生时,系统会自动产生告警信息。为了更好地定位故障原因,需要对各种告警信息进行关联分析。这样可以快速确定故障的范围和影响,并且能够帮助排查故障的根本原因。告警关联分析可以使用各种工具和算法,如事件关联分析、机器学习等。

  • 知识图谱:知识图谱是指通过将各种数据和知识进行关联和组织,建立一种知识库或知识图谱,以便在故障发生时快速定位和解决问题。在应急响应中,知识图谱可以指导故障排查和处理工作,提高效率和准确性。知识图谱可以使用各种工具和技术,如自然语言处理、图数据库等。

故障恢复

定位故障原因后,按照应急预案快速恢复业务,并在事后进行复盘总结。

  • 预案执行:在故障响应的过程中,需要按照事先制定的应急预案进行执行。应急预案包括了应急响应流程、各个岗位的职责、处理流程等。预案执行能够保证故障恢复和处理的规范化和标准化。

  • 故障自愈:故障自愈是指系统自动检测到故障并采取自动恢复措施。故障自愈技术可以帮助故障恢复和处理更加快速和准确。例如,利用容器技术,系统可以自动迁移容器来解决故障。

  • 故障复盘:故障复盘是指对故障进行分析和总结,以便更好地避免故障的再次发生。在故障复盘过程中,需要对故障的起因、影响、处理过程等进行详细的记录和分析,并制定相关的措施。故障复盘也是一种学习和提高的过程,能够不断完善系统和提高团队的应急响应能力。

演练常态化

故障演练提供了一种端到端的测试理念与工具框架,本质是通过主动引入故障来充分验证软件质量的脆弱性。从提前发现系统风险、提升测试质量、完善风险预案、加强监控告警、提升故障应急效率等方面做到故障发生前有效预防,故障发生时及时应对,故障恢复后回归验证。基于故障本身打造分布式系统韧性,持续提升软件质量,增强团队对软件生产运行的信心。故障演练可分为方案验证的容灾演练、稳定性验收的红蓝攻防,以及故障应急验证的突袭演练。

容灾演练

容灾演练是通过模拟实例、机房或地域级故障,判断系统服务的逃逸能力,验证系统的容灾能力以及面对灾难时的应对能力。容灾演练可以帮助企业更好的验证RPO、RTO指标,及时发现和解决相关问题,提高系统的可用性和可靠性。

红蓝攻防

红蓝攻防是在想定情况诱导下进行的作战指挥和行动演练,是部队在完成理论学习和基础训练之后实施的,近似实战的综合性训练,是军事训练的高级阶段。演习通常分为红军,蓝军,多以红军守,蓝军进攻为主。

红蓝攻防不仅能够用于安全演练,在稳定性演练中同样适用。在稳定性攻防中,蓝军从第三方角度发掘各类脆弱点,并向业务所依赖的各种软硬件注入故障,不断验证业务系统的可靠性。而红军则需要按照预先定义的故障响应和应急流程进行处置。在演练结束后,建议针对故障中的发现、响应、恢复三个阶段的时长和操作内容进行复盘,并梳理改进点进行优化,提升业务系统的稳定性。

突袭演练

突袭演练是一种手段以及目标对红军不透明的组织形式。通过突袭演练可以全面检验技术团队在面对突发故障时的应急和恢复能力,提升人员的安全意识。在突袭演练中,红蓝双方是纯对抗的关系,因此对红蓝双方提出了更高的要求,蓝军不仅需要了解目标系统的薄弱点,更需要了解目标系统的业务,红军不仅仅需要修复故障,还需要快速的发现故障和有效的应急协同。相比较计划演练,突袭演练涉及到的人员,场景,流程也会更加复杂,同时不但确保演练计划的私密性,还需要充分评估在红军未及时处理故障时的影响面控制。