设计与实现阶段的可靠性工作

简介: 【7月更文挑战第23天】

可靠性设计包括新功能的可靠性设计和现有功能的可靠性改进设计。对需求规划阶段确定的可靠性目标和要求进行分解,在设计阶段分模块、分功能地进行应用架构设计、系统架构设计、部署架构设计。

设计错误比代码Bug带来的危害更高。这个阶段应当考虑设计的合理性,评估引入故障风险的可能性,在对风险有充分认识的基础上对单元模块的复杂性、健壮性进行设计。从不同的层次看架构会包括很多设计,从宏观视角来看包括部署架构、应用架构、系统架构、业务架构等,这里我们重点关注的是这些架构中的可靠性的设计工作。

架构设计阶段的可靠性工作要考虑容错、避错、改错的设计,也要充分考虑可扩展性、可维护性、可伸缩性的设计,以及如何应对突发大流量的设计。在核心模块应用逻辑中还要考虑如何进行降级、限流,如何隔离局部故障,如何做到异常时还能最大限度服务用户等设计。

1、业务架构设计

业务架构设计是把业务需求拆解为软件功能模块的需求。业务架构设计包括大模块的设计,也包括用户使用业务服务的交互流程。如业务架构可拆分为用户系统、交易/支付系统、订单系统、商品系统、库存系统、活动系统、推荐系统等,商品系统也可以按品类、行业进行拆分。业务架构会决定技术团队如何进行组织分工,业务架构的拆分方式也会影响可靠性工作的开展。

2、系统架构设计

系统架构设计是指整个软件系统的总体设计,这个过程把应用逻辑看作一个架构单元,把周边支撑模块、基础设施服务、中间件组件、数据库、数据存储等也作为独立的架构单元。系统架构主要考虑组件选型以及组件之间的调用关系。这些架构单元自身也是一个复杂的分布式软件系统,也有可靠性工作的问题。在调研开源组件、开源框架时需要深入熟悉其中的设计原理才能充分用好它们,即使用了成熟的开源框架,也要考虑与公司现有技术栈、基础设施服务等的融合。

实践经验:很多公司有架构委员会,当对架构进行重大改进、建设新的中间件、引入新组件时会引入评审过程。架构师会提出设计中的可靠性风险,洞察未能关注到的点,提供更优的设计建议。

3、应用架构设计

应用架构设计是指根据业务需求设计应用的层次结构,制定应用规范、定义接口和数据交互协议等。包括应用进程与应用进程的通信机制、应用与数据进行通信的架构,选用同步通信或异步通信方式,采用RPC、RESTful、JSON、XML等进程间通信协议。也包括应用内的逻辑设计、代码结构设计,如何设计分布式的事务,如何设计缓存服务和策略,如何设计高可用的数据库等。

实践经验:基础架构和微服务框架团队,会不定期分析生产环境微服务运行过程,特别是异常后的处理过程,进行改进。如增加监控(如队列监控、内部状态)、增加配置项参数、增加可靠性相关能力(如拨测能力)等。

实践案例:在某个阶段发现有状态的服务很多,在异常时无法迁走、无法调度切换,此时SRE发起无状态化改造项目,进行微服务自身、硬编码IP、DB资源、缓存资源、外部依赖的无状态化改造。

4、部署架构设计

部署架构设计是为了在不够可靠的基础设施上建立可容灾的高可用系统,在设计时选用合适的云厂商、IDC机房、服务器、网络,如同城双活、异地多活等。有时也叫运维架构或基础设施架构。

实践经验:基础架构和SRE团队在适当的时候发起部署架构的改进项目,如遇到单交换机挂掉后影响一片服务的情况,发起交换机隔离的治理项目;又如发现物理机挂了导致整个微服务挂掉,所以在容器平台增加宿主机反亲和的功能等;再如在某个阶段发现某些核心服务有单机房故障风险,于是发起同城双活架构改造的项目。

相关文章
|
2月前
|
测试技术
软件测试自动化策略与实施:提升质量与效率的关键
【7月更文挑战第25天】软件测试自动化是提高软件质量和效率的重要手段。通过明确自动化测试目标、选择合适的测试工具、制定详细的测试计划、建立稳定的测试框架以及持续优化与迭代,企业可以构建高效、可靠的自动化测试体系。在实施过程中,注重与项目团队的沟通与协作,确保自动化测试与项目开发的紧密结合,共同推动产品质量的不断提升。
|
4月前
|
程序员
如何成为高质量程序猿与软件质量的十个指标:正确性、健壮性、可靠性、性能、易用性、清晰性、安全性、可扩展性、兼容性和可移植性
如何成为高质量程序猿与软件质量的十个指标:正确性、健壮性、可靠性、性能、易用性、清晰性、安全性、可扩展性、兼容性和可移植性
78 0
|
4月前
|
监控 安全 项目管理
项目成功秘诀:高效管理策略确保按时交付
项目成功对企业生存发展至关重要,需要明确目标和范围,运用SMART原则和设计思维确保目标与市场需求相符。通过工作分解、优先级排序管理需求,建立变更和风险管理流程。制定详细项目计划,考虑约束条件、关键节点和风险。优化团队协作,明确角色责任,建立有效沟通机制,激励团队成员。实施PDCA循环控制项目进程,关注交付和复盘,以实现高质量的项目成果。
191 1
|
4月前
|
监控 测试技术 持续交付
【软件设计师备考 专题 】软件质量管理:保证软件的可靠性和性能
【软件设计师备考 专题 】软件质量管理:保证软件的可靠性和性能
124 0
|
4月前
|
运维 监控 安全
【软件设计师备考 专题 】系统运行和维护:确保系统的稳定和高效
【软件设计师备考 专题 】系统运行和维护:确保系统的稳定和高效
180 0
|
12月前
|
消息中间件 监控 Java
系统稳定性保障设计总结和思考
系统稳定性保障设计总结和思考
471 0
|
存储 缓存 运维
系统稳定性设计原则:简单、冗余、标准化、健壮
系统稳定性设计原则:简单、冗余、标准化、健壮
632 0
系统稳定性设计原则:简单、冗余、标准化、健壮
|
测试技术
【系统架构】可靠性测试用例设计时重点考虑的特殊情况
【系统架构】可靠性测试用例设计时重点考虑的特殊情况
110 0
【系统架构】架构评估的质量属性——可靠性
【系统架构】架构评估的质量属性——可靠性
135 0
|
存储 缓存 监控
【软件测试】稳定性和可靠性测试在软件开发中的重要性
软件测试的某些方面经常会在那些刚接触流程的人中造成混淆——例如在稳定性和可靠性测试之间划清界限。 两者通常可以互换使用,并且有一个共同的目标,即确保系统可以在选定的时间范围内稳定运行。