当前位置: 首页 > news >正文

2024系统架构师---论软件可靠性设计及其应用论文

可靠性

软件可靠性是指软件系统在一定的时间内持续无故障运行的能力。

可靠性通常用平均失效等待时间(MTTF)和平均失效间隔时间(MTBF)来衡量。

影响可靠性的因素

从技术的角度来看,影响软件可靠性的主要因素如下。

1.运行剖面(环境):软件可靠性的定义是相对运行环境而言的,一样的软件在不同的运行剖面下,其可靠性的表现是不一样的。

2.软件规模:软件规模也就是软件的大小,一个只有数十行代码的软件和几千、几万行代码的软件是不能相提并论的。

3.软件内部结构:结构对软件可靠性的影响主要取决于软件结构的复杂程度,一般来说,内部结构越复杂的软件,所包含的软件缺陷数就可能越多。

4.软件的开发方法和开发环境:软件工程表明,软件的开发方法对软件的可靠性有显著影响。

5.软件的可靠性投入:软件在生命周期中可靠性的投入包括开发者在可靠性设计、可靠性管理、可靠性测试和可靠性评价等方面投入的人力、资金、资源和时间等。经验表明,在早期重视软件可靠性并采取措施开发出来的软件,可靠性有明显的提高。

可靠性设计技术

容错设计技术

常见的容错设计技术主要有恢复块设计、N 版本程序设计和冗余设计三种方法。

恢复块设计指将程序看作是由一系列的恢复块组成的,一个恢复块包括若干个功能相同、设计差异的程序块,每一时刻只有一个程序块处于运行状态。一旦该程序块出现故障,则用备份程序块加以替换,从而构成"动态冗余"。

N 版本程序的核心是通过设计出多个模块或不同版本,对于相同初始条件和相同输入的操作结果,实行多数表决,防止其中某一软件模块/版本的故障提供错误的服务,以实现软件容错。

冗余设计是指在一套完整的软件系统之外,设计一种不同路径、不同算法或不同实现方法的模块或系统作为备份,在出现故障时可以使用冗余的部分进行替换,从而维持软件系统的正常运行。

集群技术

集群技术是指将多个独立的服务器通过网络互联,形成一个统一的整体,对外提供相同的服务。在集群中,各个服务器之间可以相互监控、负载均衡和故障转移,从而确保整个系统的稳定运行。

当集群中的某个服务器发生故障时,其他服务器可以接管其工作,确保服务不中断,这种机制大大降低了单点故障的风险。

集群可以根据个服务器的负载情况,合理分配任务,避免某个服务器过载,提高整体系统的可靠性。

集群中的服务器通过心跳信号相互监控,一旦某服务器心跳消失,则可认为其发生故障。

总之,集群技术是提高系统可靠性和性能的有效手段。在实际应用中,应根据业务需求和预算,合理选择和配置集群,以达到最佳效果。

检错技术

检错技术是指在软件出现故障后能够及时发现故障并报警,提醒维护人员进行处理。

检错技术实现的代价一般低于容错技术和冗余技术。

但它有一个明显的缺点,就是不能自动解决故障,出现故障后如果不进行人工干预,将最终导致软件系统不能正常运行。

防卫式程序设计

防卫式程序设计是一种编程范式,旨在创建能够预测和防止错误的程序。这种理念强调在编写代码时采取预防措施,以确保程序在面对意外情况、不合理的输入或错误地使用时,仍能保持稳定运行,不产生不可预见的行为。

防卫式程序设计的目的是提高软件的健壮性、可靠性和安全性,减少软件缺陷和漏洞,从而降低维护成本和提高用户体验。通过采取这些措施,程序在面临异常情况时能够更加稳健地运行,减少系统错误和崩溃的风险。

论软件可靠性设计及其应用

摘要

2023 年 3 月,我所在的公司承接了某智慧加油站平台的建设工作。该项目旨在帮助加油站提升运营效率、降低运营成本和提高销售额。我在该项目中担任系统架构设计师,负责整个项目的架构设计工作。

本文结合我在该项目中的实践,详细论述了软件可靠性设计技术的具体应用。我们主要采用了防卫式程序设计、集群技术和检错技术三种可靠性设计技术。我们采用防卫式程序设计预见潜在错误并提前采取措施,采用集群技术避免单点故障,采用检错技术及时发现故障并报警。通过以上三种技术,我们有效地提升了系统的可靠性。

整个项目历时 10 个月开发完成,并于 2023 年 12 月正式交付并稳定运行至今,各项功能和性能指标均达到了客户要求,得到了客户和各级领导的一致好评。

正文

项目背景

随着国内成品油零售行业竞争日益激烈,某油企为增强市场竞争力,决定建设一个智慧加油站平台,通过引入信息技术来优化运营管理,进一步提升加油站的管理水平和服务质量。我所在的单位成功中标该项目,并于 2023 年 3 月正式启动该项目的建设工作。我被任命为系统架构设计师,负责该项目的系统架构设计工作。

该项目的主要建设内容包括智慧支付、智慧营销、智慧运营等功能子系统。其中智慧支付子系统提供了对多种支付方式的支持,比如现金支付、油卡支付、微信支付、支付宝支付、云闪付支付、车牌付、人脸付、ETC 支付等,以确保顾客下单支付的便利性和安全性;智慧营销子系统支持开展多种形式的营销活动,比如消费返券、趣味抽奖、积分任务、限时秒杀、充值优惠等,以提高顾客复购率;智慧运营子系统涵盖了站务管理、运营数据统计分析等功能,以提高加油站运营效率。

该项目选用 Java 作为主要开发语言,采用基于 Spring Cloud Alibaba 的微服务架构进行构建。我们选择 MySQL 作为数据库,Doris 作为实时数仓,Redis 作为分布式缓存,RocketMQ 作为消息中间件,Flink 作为实时流式计算引擎,并最终在 Kubernetes 集群中部署运行。

可靠性设计的重要性

由于加油站是一个高度运转的环境,任何故障都可能影响加油站的正常运营,因此保障系统的可靠性显得至关重要。软件可靠性是指软件在一定的时间内持续无故障运行的能力,通常使用通常用平均失效等待时间(MTTF)和平均失效间隔时间(MTBF)来衡量。

主流的可靠性设计技术主要有防卫式程序设计、集群技术和检错技术。防卫式程序设计强调在编写代码时采取预防措施,以确保程序在面对意外情况、不合理的输入或错误的使用时,仍能保持稳定运行,避免产生不可预见的行为。集群技术是一种将多台服务器连接在一起,共同工作以实现特定目标的技术。这些节点通过高速网络连接,对外表现为一个单一的系统,共同承担计算任务、数据存储和应用程序的运行。检错技术是指在软件系统出现故障后能够及时发现并告警,提醒相关人员进行处理。检错技术的代价一般低于容错技术和冗余技术。检错技术有一个明显的缺点,那就是发现故障后不能自动修复故障,需要人工进行干预。

在该项目中,为了提高系统的可靠性,我们主要采用了防卫式程序设计、集群技术和检错技术三种可靠性设计技术。下面我将详细介绍这三种可靠性技术在该项目中的具体应用。

防卫式程序设计

我们采用防卫式程序设计来预见错误并提前采取措施来减少这些错误的影响。在智慧营销子系统中,加油站通常会和合作商家联手开展个性化的营销活动,以此提高用户的忠诚度和复购率,一种常见的合作形式是用户在智慧加油站平台中参与营销活动后所获得的奖励需要通过合作商家提供的开放的 API 接口进行兑换。然而,合作商家的系统可能存在不稳定的情况,比如频繁请求响应慢或请求超时等问题。为了避免该系统被这些外部系统拖垮,在智慧营销子系统开发之初,我们就设计了熔断的处理策略。当检测到合作商家的 API 接口在一段时间内频繁出现响应慢或者请求超时等问题,系统会立即停止对合作商家 API 接口的调用,防止问题的进一步扩散。这样可以确保其他子系统的功能不受影响,依然能够正常运行。在熔断期间,系统会持续监测合作商家的系统状态,并定期发起试探性的请求,如果试探请求正常了,则恢复对其接口的正常调用,以恢复奖励兑换等功能。通过熔断措施,我们有效控制了外部系统故障的影响范围,避免了局部的故障逐渐演变为严重的系统事故。

集群技术

我们采用集群技术来避免单点故障。为了简化集群的管理,我们最终将系统部署运行在 Kubernetes 集群上。Kubernetes 可以管理多个工作节点,每个工作节点上可以部署多个服务,此外,还提供自动故障转移和服务自愈的能力。我们将整个系统划分为多个可以独立开发、独立部署的小服务,每个服务开发完成后,我们将其打包成为 Docker 镜像,并编写该服务的 Deployment 描述文件,在这个文件中配置所需的 CPU 资源、内存资源以及期望的服务副本数量等信息。然后通过 kubectl apply 命令将该服务部署到 Kubernetes 中,多个服务实例会被均匀地部署到多个工作节点上。Kubernetes 会定期检查这些服务实例的状态,确保它们按照预设的数量正常运行。如果某个工作节点宕机了,该工作节点上的服务实例会在其他工作节点上重新部署,从而实现了自动故障转移。如果某个服务实例意外停止或崩溃,Kubernetes 将自动创建新的服务实例来确保服务实例数量与预设的数量相符,从而实现了服务自愈。这一过程无需人工干预,有效地保障了系统的稳定性和可靠性。

检错技术

我们采用检错技术确保能够及时发现故障并报警,提醒相关人员进行处理。我们采用了 Prometheus 和 Grafana 搭建了一套实时自动化的监控告警系统,用于监控各个工作节点、服务以及组件的运行状态和关键指标,比如内存使用率、CPU 使用率、磁盘使用率、网络带宽占用、响应时间 TP99、请求错误率等。当检测到异常时,该监控告警系统就会自动触发告警,提醒相关人员处理。提醒的方式主要包括短信和企业微信。通过这种方式,我们可以对系统的健康状况有一个全面的了解,并且可以在问题发生时迅速做出反应。

例如,在一次消费送积分的营销活动中,监控告警系统检测到积分服务的响应时间突然增加,并触发了告警。我们收到告警信息后,通过查看 Grafana 的可视化实时监控图表发现某个工作节点的磁盘使用率达到了 100%,然后我们对该工作节点进行了进一步的排查,发现了问题源头在于该工作节点的磁盘被大量日志文件占满了,这导致积分服务无法正常提供服务。于是我们迅速采取了行动,清理了不必要的日志文件,并优化了日志的存储策略,解决了磁盘空间不足的问题,恢复了积分服务的正常运行。

总结与感悟

通过以上可靠性设计技术的运用,我们有效提高了系统的可靠性,从而确保了业务的连续性。最终,经过 10 个月的研发,该项目于 2023 年 12 月完成并交付上线,至今运行稳定,各项功能和性能指标均达到客户要求,得到了客户和各级领导的一致好评。虽然项目取得了成功,但我们也看到了一些不足之处,其中需求频繁变更导致项目团队经常加班是比较突出的问题。针对这个问题,我们采取了以下两个措施:一是规范需求变更流程,提升变更成本,以避免过度的需求变更;二是通过灵活的配置和架构设计,低成本响应需求变更。

通过该项目的开发,我在系统分析与设计方面积累了不少宝贵的经验,为我后续的工作提供了很大的帮助。这也激励着我不断学习,不断丰富自己的知识体系,为将来能够应对更复杂的工作做好准备。

相关文章:

2024系统架构师---论软件可靠性设计及其应用论文

可靠性 软件可靠性是指软件系统在一定的时间内持续无故障运行的能力。 可靠性通常用平均失效等待时间(MTTF)和平均失效间隔时间(MTBF)来衡量。 影响可靠性的因素 从技术的角度来看,影响软件可靠性的主要因素如下。…...

SpringBoot在线教育系统:云部署策略

6系统测试 6.1概念和意义 测试的定义:程序测试是为了发现错误而执行程序的过程。测试(Testing)的任务与目的可以描述为: 目的:发现程序的错误; 任务:通过在计算机上执行程序,暴露程序中潜在的错误。 另一个…...

Zabbix 6.0 部署

目录 一、序章 二、zabbix概念 2.1 zabbix 是什么? 2.2 zabbix 监控原理: 2.3 Zabbix 6.0 新特性: 2.3.1 Zabbix server高可用防止硬件故障或计划维护期的停机 2.3.2 Zabbix 6.0 LTS新增Kubernetes监控功能,可以在Kubernet…...

用Python遍历输出烟感名称和状态

为了使用Python遍历输出烟感名称和状态,您需要首先从SNMP代理(如网络设备或硬件设备)获取这些值。为此,您可以使用第三方库如pysnmp,它允许您轻松地与SNMP代理通信。 首先,您需要安装pysnmp库,…...

Redis的持久化以及性能管理

目录 一、Redis持久化概述 1.什么是Redis持久化 2.持久化方式 3.RDB持久化 3.1概念 3.2触发条件 3.3执行流程 3.4启动时加载 4. AOF持久化 4.1概念 4.2启动AOF 4.3执行流程 4.4启动时加载 5.RDB和AOF的优缺点 二、Redis性能管理 1.查看Redis内存使用 2…...

Docker部署Meta-Llama-3.1-70B-Instruct API openai格式,vLLM速度对比

下载模型 modelscope环境,国内下载更快: conda create -n modelscope python=3.10 conda activate modelscopepip install modelscope命令行下载: https://modelscope.cn/models/LLM-Research/Meta-Llama-3.1-70B-Instruct modelscope download --model LLM-Research/Met…...

USB协议学习

文章目录 USB发展背景发展变化速度等级通讯接口 四种传输主设备 & 从设备主设备从设备 连接与检测高速设备与主机连接USB总线常见的几种状态 枚举过程特点 控制传输学习资料 USB发展背景 发展变化 USB1.1:规范了USB低全速传输; USB2.0:…...

TDengine 数据订阅 vs. InfluxDB 数据订阅:谁更胜一筹?

在时序数据的应用场景中,数据的实时消费和处理能力成为衡量数据库性能和可用性的重要指标。TDengine 和 InfluxDB 作为时序数据库(Time Series Database)中的佼佼者,在数据订阅方面各有特点。但从架构设计、灵活性和系统负载上看&…...

用户批评 SAP 的人工智能战略

在2024年德语SAP用户组织(DSAG)年会上,SAP用户对公司云优先的AI创新策略表示不满。SAP决定将AI功能仅限于云客户,使使用本地部署(on-premises)系统的用户感到被忽视。这种“云优先”策略引发了SAP用户间的广…...

Jest进阶知识:React组件的单元测试

在现代前端开发中,组件是构建应用程序的基本单元。一个组件不仅拥有完整的功能,还能极大地提高代码的复用性。因此,在进行单元测试时,对重要组件进行测试是必不可少的。 Testing Library Testing Library 是一个专门用于测试 We…...

MATLAB——矩阵操作

内容源于b站清风数学建模 数学建模清风老师《MATLAB教程新手入门篇》https://www.bilibili.com/video/BV1dN4y1Q7Kt/ 目录 1.MATLAB中的向量 1.1向量创建方法 1.2向量元素的引用 1.3向量元素修改和删除 2.MATLAB矩阵操作 2.1矩阵创建方法 2.2矩阵元素的引用 2.3矩阵…...

智能数据驱动的风险管理:正大金融科技的创新实践

在不断变化的金融环境中,风险管理成为投资成功的关键因素。正大公司以数据驱动的智能风控体系为核心,通过深度学习、数据分析等技术创新,帮助投资者在复杂的市场条件下实现稳健操作和风险控制。本文将探讨正大如何利用科技手段提升风险管理效…...

贝尔不等式的验证

在量子计算机上运行一个实验,以演示使用Estimator原型违反CHSH不等式。 import numpy as npfrom qiskit import QuantumCircuit from qiskit.circuit import Parameter from qiskit.quantum_info import SparsePauliOpfrom qiskit_ibm_runtime import QiskitRuntim…...

GR2——在大规模视频数据集上预训练且机器人数据上微调,随后预测动作轨迹和视频(含GR1详解)

前言 上个月的24年10.9日,我在朋友圈看到字节发了个机器人大模型GR2,立马去看了下其论文(当然了,本质是个技术报告) 那天之后,我就一直想解读这个GR2来着 然,意外来了,如此文《OmniH2O——通用灵巧且可全…...

伦敦金价格是交易所公布的吗?

今年以来,伦敦金价格波动可谓是波澜壮阔,盘中屡次刷新历史新高,目前已经冲上了2700的历史大关。面对高歌猛进的伦敦金价格,投资者除了进行交易之外,还有一点相关方面的知识是想了解的。例如,伦敦金价格是交…...

Oracle SQL Loader概念及用法

Oracle SQLLoader是Oracle数据库提供的一个高效的数据加载工具,它能够将外部数据(如CSV、DAT、Text等文件格式)快速加载到Oracle数据库中。以下是对Oracle SQLLoader的详细介绍: 一、主要功能 数据迁移:SQL*Loader常…...

ReactPress 是什么?

ReactPress Github项目地址:https://github.com/fecommunity/reactpress 欢迎Star。 ReactPress 是什么? ReactPress 是使用React开发的开源发布平台,用户可以在支持React和MySQL数据库的服务器上架设属于自己的博客、网站。也可以把 ReactP…...

MR30分布式IO模块与高效PLC协同

在现代工业自动化领域中,数据采集与控制系统扮演着至关重要的角色。其中,可编程逻辑控制器(PLC)和分布式IO模块(Distributed I/O Modules)是这一领域的两大核心组件。本文将详细介绍MR30分布式IO模块与PLC如…...

成都睿明智科技有限公司共赴抖音电商蓝海

在这个短视频风起云涌的时代,抖音作为现象级的社交媒体平台,不仅改变了人们的娱乐方式,更悄然间重塑了电商行业的格局。在这片充满机遇与挑战的蓝海中,成都睿明智科技有限公司凭借其敏锐的市场洞察力和专业的服务能力,…...

Android15音频进阶之音频策略加载及使用(九十一)

简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【原创干货持续更新中……】🚀 优质视频课程:AAOS车载系统+…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM&#xff09…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: ​onCreate()​​ ​调用时机​:Activity 首次创建时调用。​…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用

一、方案背景​ 在现代生产与生活场景中,如工厂高危作业区、医院手术室、公共场景等,人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式,存在效率低、覆盖面不足、判断主观性强等问题,难以满足对人员打手机行为精…...

MinIO Docker 部署:仅开放一个端口

MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...

Xela矩阵三轴触觉传感器的工作原理解析与应用场景

Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知,帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量,能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度,还为机器人、医疗设备和制造业的智…...

Linux基础开发工具——vim工具

文章目录 vim工具什么是vimvim的多模式和使用vim的基础模式vim的三种基础模式三种模式的初步了解 常用模式的详细讲解插入模式命令模式模式转化光标的移动文本的编辑 底行模式替换模式视图模式总结 使用vim的小技巧vim的配置(了解) vim工具 本文章仍然是继续讲解Linux系统下的…...