架构-稳定性建设逻辑问题实战总结

简介: 稳定性问题分为逻辑问题和架构问题。 逻辑问题三板斧:理念正确、流程规范、刨根问底。

总述

 


稳定性问题分为逻辑问题和架构问题。

 

逻辑问题三板斧:理念正确、流程规范、刨根问底。

 

逻辑问题

 


理念正确

 

曹操煮酒论英雄,对刘备发表了自己对英雄的看法:

胸怀大志,腹有良策,包藏宇宙之机,吞吐天地之气。

 

意思是说所谓英雄,要志气远大,计谋精良。胸怀能包含宇宙,志气能吞吐天地。对稳定性建设来说就是既要有道,又要有术,道为先。

 

稳定性理念举例

 


Everything fails!

 

如果一件事情有可能发生则在生产环境中一定会发生。

 

不要容忍破窗户。

 

过程对了结果一定不会差。

 

一个问题可能是许多事故的原因。

 

WHY

 


理念是目标和原则。错误的理念产生不了正确的行动,在稳定性方面是巨大的隐患。

 

试想如果一个人觉得一个系统是不可能出问题的,那他一定就不会制定故障处理的紧急预案,出现问题了也不能很好的控制影响范围。

 

如果觉得一个问题是小概率事件是不会发生的,就不会对问题进行修复和补救。而所谓小概率事件如果发生概率在万分之一。一般线上系统一天调用量就不只几万次,所以也就没有什么小概率事件了。

 

小的问题不修复,问题积少成多,不但修复变的困难,还会让人产生反正已经这样了的放弃心理,最终造成大问题。

 

流程规范

 


很多大公司的稳定性60%以上都是通过流程来保障的,有些流程经过自动化,开发人员习以为常,反而没有去深究其背后的技术原理。比如变更管理流程,一般大公司会有相应的系统,而这个系统实际上是将变更管理的所有要点做了自动化。

 

变更管理

 


变更管理大体上分为两部分:变更识别和变更流程。

 

变更识别:


要限制变更的影响,首先应该确保每一个生产变更都要有以下的数据记录


1>变更的准确日期和时间


2>将要发生变更的系统


3>实际的变更


4>变更期待的结果


5>变更人员的联系方式

 

变更流程:


1>提出2>批准3>计划4>实施5>验证6>报告

 

变更识别是适用于初创型小公司的一种轻量级流程,一般有一定规模的公司都会使用变更流程。而变更流程的大部分过程都可以通过持续集成实现。这个过程的目的是为了安全的变更而不是减缓变更。

 

在实际开发的时候通常会遇到一个矛盾:一方面要控制发版频率和时间,因为变更要耗费时间和精力,最重要的是每次上线都有风险。所以会有静默期、发版许可时间;另一方面要让变更尽量小,因为变更越大风险越高。

 

对于这个矛盾,我的看法是这两个是两个分开的问题。

 

发版时间只要控制在低峰期以及人员齐全的时间段,比如不要在周五,因为周六休息,问题不能及时发现。发版频率需要靠每次问题解决彻底、每次发布阶段清晰等设计开发层面解决,就是说每次发版尽量:与其扬汤止沸,不如釜底抽薪。这样一个问题或功能确保一次上线成功,不用打补丁,这样来减少频率。

 

变更尽量小,我的看法是最好一次发布只是一个变更,不要多个成员的不同内容一起上线。否则一旦出现问题不好定位。有的人看法是3个内容一起上线只有1次风险,而分三次上线会有3次风险。我认为哈,如果3次变更真的出现了3个问题是不是代码质量太差了,需要从其他方面先把质量提升上来。而分为3次,每次变更内容清晰,也便于更高的流程把控和上线验证,风险总体是要低的。

 

风险管理


1112728-20200829111320098-843718501.png


评估特定行动风险有种方法叫故障模式及影响分析法(Failure mode and effects analysis, FMEA)。

 

每个故障的现象可以根据下述三个因素来打分:故障的可能性、严重性和可检测性。可以选择使用1、3和9作为打分的范围,这是一种保守的打分方法,同时可以把高风险因素和中低风险因素区分开来。故障的可能性基本上是这个特定故障真实发生的概率。故障的严重性是指如果故障发生,对客户和业务产生的总体影响。这种影响可以用金钱损失、声誉损失或任何与业务有关的其他因素来测量。故障的可检测能力指如果故障发生你是否能够注意到。

 

对单项失效模式和效果打分后,将这些分数相乘得到总的风险评分,即可能性得分*严重性得分*检测能力得分。这个分数显示了一个特定组件在整体行为中的整体风险。

 

FMEA过程的下一步是确定可以执行或落实到位的缓解步骤,已降级特定因素的风险。例如,如果一个功能组件的可检测能力有非常高的风险分数,这意味着如果事件发生,那将很难发出通知。因此该团队可能会决定提前准备一些查询,在产品或服务发布后,每小时检查一次数据库,检测是否有故障发生的迹象,如丢失数据或数据错误。此环节措施对该组件的风险因素有降级的作用,同时应该说明风险可以降级到什么程度。


1112728-20200829111451978-1918474903.png


流程规范术实例

 


1>设计阶段


统一设计模板、其中我编写了稳定性三十六计的checklist,可以作为稳定性设计的参考规范,详见:《稳定性「三十六计」实战和背后的逻辑》

 

2>开发阶段


2.1>可行性验证阶段写好测试用例,测试驱动开发


2.2>与第三方交互,交互前后都要打日志。交互后的日志要把第三方返回的结果打印出来。一旦第三方出现问题。我们拿着第三方返回的结果来跟第三方沟通。避免责怪他人讹的出现。

 

3>上线规范


提测分支至少2名同学进行code review。Reviewer一般为之前负责过此模块开发的同学和架构师。

 

刨根问底

 


还是那句话:与其扬汤止沸,不如釜底抽薪。实施刨根问底最常用的手段是复盘。说复盘先从问题的发生说起。

 

一旦出现了问题或者故障,第一反应是什么?找原因?错!第一件要做的事情是「恢复现场」,先解决问题,控制和降低影响。比如生产环境突然load飙升、线程池被打满了。这时候应该马上启动紧急预案,重启服务或者机器,然后紧急扩容。如果问题发生前有过变更,则立即回滚。在发生问题的时候最好有个指挥者负责分派任务和协调人员。

 

现场恢复后再着手调查原因,可以多个人从不同层面来分析问题。比如这次问题主要是一个变更引起的。那么变更的开发人员是问题分析的主力,一般也是问题的责任人和复盘的发起者。但是其他人可以同时通过代码review、监控等数据分析角度帮助一起定位。

 

原因基本定位之后,如果大家都还没离开。一个比较好的方式是以非常轻松的聊天的方式,让了解问题的人都自然的聚在一起,开一个头脑风暴的茶话会,将问题事前、事中、事后可以优化的都提出来,作为事件正式复盘前的素材。

 

复盘的流程


1>事件概述 2>事件影响 3>时间线 4>5why根本原因分析 5>经验教训 6>TODO

 

总结

 


稳定性问题中逻辑问题和架构问题的产生原因和侧重点都不同。架构问题如果不快速治理,很容易造成级联故障、雪崩等问题,从而引发稳定性危机。而架构大体满足需求时,逻辑问题是日常工作中更经常面对的问题。

 

减少逻辑问题一要靠人二要靠流程。所谓靠人,就是人的能力和素质越强,问题越少。其中素质就包含理念价值观和刨根问题的精神和能力。对于流程,很多大公司都有很好的工具或系统来进行流程规范。但是作为开发人员,一定要避免「离开了平台,自己什么都不是」。流程规范的系统实现都很简单,关键点是实现了什么,平时的时候建议多加思索,将平台能力转化为自身能力。

 

最后,这句话很重要:「与其扬汤止沸,不如釜底抽薪。」


相关文章
|
12天前
|
存储 JavaScript 开发工具
基于HarmonyOS 5.0(NEXT)与SpringCloud架构的跨平台应用开发与服务集成研究【实战】
本次的.HarmonyOS Next ,ArkTS语言,HarmonyOS的元服务和DevEco Studio 开发工具,为开发者提供了构建现代化、轻量化、高性能应用的便捷方式。这些技术和工具将帮助开发者更好地适应未来的智能设备和服务提供方式。
36 8
基于HarmonyOS 5.0(NEXT)与SpringCloud架构的跨平台应用开发与服务集成研究【实战】
|
2天前
|
消息中间件 监控 小程序
电竞陪玩系统架构优化设计,陪玩app如何提升系统稳定性,陪玩小程序平台的测试与监控
电竞陪玩系统架构涵盖前端(React/Vue)、后端(Spring Boot/php)、数据库(MySQL/MongoDB)、实时通信(WebSocket)及其他组件(Redis、RabbitMQ、Nginx)。通过模块化设计、微服务架构和云计算技术优化,提升系统性能与可靠性。同时,加强全面测试、实时监控及故障管理,确保系统稳定运行。
|
7天前
|
SQL 弹性计算 运维
云卓越架构:稳定性支柱整体解决方案综述
阿里云卓越架构聚焦于五大支柱,其中稳定性是关键。常见的云上稳定性风险包括架构单点、容灾设计不足和容量规划不合理等。为提升稳定性,需从架构设计时考虑容灾与容错、实施变更时遵循“三板斧”原则(灰度发布、可观测性和可回滚性),并确保快速响应和恢复能力。此外,通过客观度量、主观评估和巡检等方式识别风险,并进行专项治理。识货APP作为成功案例,通过优化容器化改造、统一发布体系、告警系统和扩缩容机制,实现了99.8%的高可用率,大幅提升了业务稳定性。
|
7天前
|
容灾 网络协议 数据库
云卓越架构:云上网络稳定性建设和应用稳定性治理最佳实践
本文介绍了云上网络稳定性体系建设的关键内容,包括面向失败的架构设计、可观测性与应急恢复、客户案例及阿里巴巴的核心电商架构演进。首先强调了网络稳定性的挑战及其应对策略,如责任共担模型和冗余设计。接着详细探讨了多可用区部署、弹性架构规划及跨地域容灾设计的最佳实践,特别是阿里云的产品和技术如何助力实现高可用性和快速故障恢复。最后通过具体案例展示了秒级故障转移的效果,以及同城多活架构下的实际应用。这些措施共同确保了业务在面对网络故障时的持续稳定运行。
|
7天前
|
人工智能 运维 监控
云卓越架构:企业稳定性架构体系和AI业务场景探秘
本次分享由阿里云智能集团公共云技术服务部上海零售技术服务高级经理路志华主讲,主题为“云卓越架构:企业稳定性架构体系和AI业务场景探秘”。内容涵盖四个部分:1) 稳定性架构设计,强调高可用、可扩展性、安全性和可维护性;2) 稳定性保障体系和应急体系的建立,确保快速响应和恢复;3) 重大活动时的稳定重宝策略,如大促或新业务上线;4) AI在企业中的应用场景,包括智能编码、知识库问答、创意广告生成等。通过这些内容,帮助企业在云计算环境中构建更加稳定和高效的架构,并探索AI技术带来的创新机会。
|
22天前
|
弹性计算 Java 数据库
Web应用上云经典架构实战
本课程详细介绍了Web应用上云的经典架构实战,涵盖前期准备、配置ALB、创建服务器组和监听、验证ECS公网能力、环境配置(JDK、Maven、Node、Git)、下载并运行若依框架、操作第二台ECS以及验证高可用性。通过具体步骤和命令,帮助学员快速掌握云上部署的全流程。
|
21天前
|
监控 Java 数据中心
微服务架构系统稳定性的神器-Hystrix
Hystrix是由Netflix开源的库,主要用于微服务架构中的熔断器模式,防止服务调用失败引发级联故障。它通过监控服务调用的成功和失败率,在失败率达到阈值时触发熔断,阻止后续调用,保护系统稳定。Hystrix具备熔断器、资源隔离、降级机制和实时监控等功能,提升系统的容错性和稳定性。然而,Hystrix也存在性能开销、配置复杂等局限,并已于2018年进入维护模式。
27 0
|
2月前
|
消息中间件 Java Kafka
实时数仓Kappa架构:从入门到实战
【11月更文挑战第24天】随着大数据技术的不断发展,企业对实时数据处理和分析的需求日益增长。实时数仓(Real-Time Data Warehouse, RTDW)应运而生,其中Kappa架构作为一种简化的数据处理架构,通过统一的流处理框架,解决了传统Lambda架构中批处理和实时处理的复杂性。本文将深入探讨Kappa架构的历史背景、业务场景、功能点、优缺点、解决的问题以及底层原理,并详细介绍如何使用Java语言快速搭建一套实时数仓。
240 4
|
2月前
|
运维 NoSQL Java
后端架构演进:微服务架构的优缺点与实战案例分析
【10月更文挑战第28天】本文探讨了微服务架构与单体架构的优缺点,并通过实战案例分析了微服务架构在实际应用中的表现。微服务架构具有高内聚、低耦合、独立部署等优势,但也面临分布式系统的复杂性和较高的运维成本。通过某电商平台的实际案例,展示了微服务架构在提升系统性能和团队协作效率方面的显著效果,同时也指出了其带来的挑战。
98 4
|
3月前
|
存储 前端开发 API
DDD领域驱动设计实战-分层架构
DDD分层架构通过明确各层职责及交互规则,有效降低了层间依赖。其基本原则是每层仅与下方层耦合,分为严格和松散两种形式。架构演进包括传统四层架构与改良版四层架构,后者采用依赖反转设计原则优化基础设施层位置。各层职责分明:用户接口层处理显示与请求;应用层负责服务编排与组合;领域层实现业务逻辑;基础层提供技术基础服务。通过合理设计聚合与依赖关系,DDD支持微服务架构灵活演进,提升系统适应性和可维护性。