中国信通院分布式系统稳定性保障体系标准详解
中国信通院分布式系统稳定性实验室致力于推动IT行业系统稳定性建设与保障工作的进步,建立了分布式系统稳定性评估体系(简称STA,详见文末)。其中STA-A为分布式系统稳定性保障能力评估,目的是评估评价各单位针对分布式系统的设计与开发流程管控、测试与评估、监控与应急、基础设施保障、管理保障等关键措施的完善程度。目前浙江移动、中国工商银行已先后完成评估。STA-A评估依托中国信通院分布式系统稳定性实验室与行业头部企业联合制定的《分布式系统稳定性保障能力分级要求》标准。本文将详细介绍该标准内容。
数据产品的稳定性是指产品能够平稳正常地持续提供服务的能力,通常可以通过产品生产环境中运行时的平均无故障时间(MTTF)和平均维修时间(MTTR)来定义稳定性(S):
如需使稳定性最大化,就必须尽可能地提升平均无故障时间,减少平均维修时间。
提升平均无故障时间可以拆解成以下几个目标:
1. 减少设计和开发过程中故障的引入。
2. 确保测试、评审等过程的有效性,使缺陷在引入生产环境前就能被排查。
3. 确保发布、变更过程的可靠,减少错误操作发生的概率。
减少平均维修时间可以拆解成以下几个目标:
1. 完善监控、告警系统,使故障更易被发现、定位。
2. 加强备份、双活等基础设施建设,故障发生时可快速切换。
3. 故障发生时可以高效应急,及时止损,快速恢复。
所有的稳定性保障工作都将围绕着这些目标展开。
稳定性要求制定:稳定性要求属于质量要求的一种,需要在产品需求设计阶段制定,并尽可能细分,落实到开发、测试、运维等各角色。
设计评审:系统架构、业务功能方面的评审需要涉及稳定性方面的考虑,主要体现在两个方面:一是需考察系统是否有针对性的应用韧性架构,如冗余设计、过载保护、去中心化等;二是需要考察系统是否能有效应对异常场景,如在尖峰流量、缓存击穿、网络不稳定等场景下是否能够保持稳定。这些设计也需要具备相应的验证手段。
代码审查:对代码进行自动化或人工审查,并设置代码提交门禁有助于减少低层次稳定性隐患的引入。
测试流程管理:测试过程需严格、规范、有效,需具备完善的测试报告和测试流程规范。并需要具备一定自动化测试的能力。
测试覆盖率、通过率评估:测试需完整而全面,且需要对开发过程形成有效的反馈。需具备基本的功能性测试如单元测试、集成测试、回归测试等,以及非功能测试如性能测试、安全测试等。对测试覆盖率(行覆盖率、分支覆盖率)、通过率进行统计且需具备相应的要求。
容量评估:需具备针对系统或关键组件的容量评估能力有助于流量高峰时期维持系统的平稳运行。容量评估要求具备对容量进行监控的能力,并可进行全链路(或部分关键链路)的压力测试。
稳定性分析:需具备对系统稳定性或稳定性相关指标进行分析的能力。包括进行稳定性相关测试,对系统模块进行稳定性(健康度)分级,分析组件间的强弱依赖等。
故障演练:故障演练是主动地对故障模拟并对故障进行应对,有助于锻炼系统和系统支撑人员的故障应对能力、容灾能力等,检验历史故障的修复情况,并评估故障应对机制和应对预案是否有效。
灰度能力:发布时采用渐进的灰度发布策略,有助于减少不稳定版本的影响范围。灰度发布可按照发布对象进行,如按照IP、机房进行灰度发布,更完善的灰度能力可以按照用户对象的级别进行,如按照用户组别,地域进行灰度发布。灰度发布平台的使用也使得灰度的编排更为容易。
回滚能力:当变更引发系统异常时,快速而有效地恢复到变更前的状态有助于降低故障对生产过程的影响。回滚的效果取决于回滚实施过程以及回滚决策的时效性。决策和实施的自动化将有助于系统的快速恢复。
发布变更风险应对:需对发布变更的风险进行评审。对于高风险的发布需采取一定措施,通过先转移流量等方式使得应用处于非业务处理状态再进行发布,以减少发布风险。
监控能力:对关键的系统资源指标,服务指标进行监控的能力有助于提升系统透明度。监控的完备程度取决于监控的类别与层级是否全面,通常需包括服务响应时间、请求流量、错误率、资源使用率等基本类别的监控,需覆盖链路的不同层级。
告警能力:当系统出现异常时需有效地通知相关人员。完善的告警机制通常具备对告警的分类分级,不同级别或类别的告警具备不同的相应方式、应急水平和处置人员。完善的告警平台可以实现对告警的自由配置。系统运维方也须定期地对告警进行分析和优化,对冗余的告警进行合并。
健康巡检:健康巡检是指定期对系统更全面的指标进行检查,以便提前于用户发现系统的异常之处。比较完善的自动化巡检系统可模拟用户视角进行自动化拨测,在生产环境中模拟真实用户视角检查系统功能的可用性。
应急预案能力:面对系统可能发生的故障或事件需提前制定标准作业流程,即应急预案。预案需通过演练进行验证,并评估其有效性。
快速止损能力:快速止损的能力取决于支撑后援团队的时效性。需具备应急响应人员,具备合作止损的处理平台以及信息同步平台。对于时效性要求较高的止损任务可具备自动化的故障应对能力,如自动化的限流降级、主备切换等。
风险预测能力:根据现有的稳定性相关指标变化趋势提前预测风险的能力。
故障诊断和根因定位能力:寻找故障、缺陷或隐患产生原因的能力。需具备常见的故障定位标准作业程序和完善的日志查询、服务链路追踪、知识库等辅助支撑系统。
复盘改进能力:修复已发现的稳定性缺陷的能力。包括对系统缺陷开展的修复工作,以及对人员、组织管理相关的失误进行知识库建设和有针对性的培训。
数据灾备:即对核心数据进行备份和恢复的能力。需对核心数据进行实时备份,并具备快速容灾切换的能力。需对备份恢复的能力进行周期性验证。
多活能力:系统所部署的机器或所在地需具备一定的冗余性。包括同机房多活、同城多活和异地多活等不同级别。
稳定性目标管理:结合业务的实际情况,对业务设置合理的稳定性目标,并跟进目标落实状况。
稳定性项目组织能力:为保障应急工作的顺利进行,需具备快速有效的组织能力。需具备快速响应的稳定性保障团队和横向拉通机制,具备敏捷的项目组织能力。
权限管控:为避免误操作造成的稳定性事故,生产系统的各种权限需满足最小可用原则,且需具备权限申请流程,系统的管理/操作权限需彼此隔离。
稳定性标准:需具备机构内部适用的稳定性相关标准。业务相关的故障需具备故障等级、等级定义等相关说明,稳定性缺陷造成的损失可量化。