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

2025系统架构师---论软件可靠性设计范文

摘要:

我就职于一家在线教育互联网公司,公司为了深耕中、小学的教学资源消费市场,决定

在 2024 年 3 月份决定升级一款教学资源搜索与下载产品,“*校通”。我有幸作为该产品系统

架构师,负责了系统架构工作。本文以该产品升级的可靠性设计为例,论述了软件可靠性设

计的过程:首先,对产品的开发特点进行分析与回顾主流的可靠性设计技术,其次

分析了可靠性设计要求,确定了采用容错设计技术、检错技术满足系统运行的可靠性。最后,

重点论述了冗余设计、防卫式程序设计、检错技术的应用过程。事实证明,正是采用合适的、

正确的可靠性设计技术,保障了产品上线后的运行稳定。该产品历经 7 个月时间于 2024 年

10 上线,上线之后系统的稳定运行与良好的用户体验得到了用户的一致好评。

正文:

        我就职的企业是一家在线教育互联网公司,公司是国内较大、较权威的 k12 领域的教学

资源提供商之一,涵盖全学科的试题、试卷、学案、教案等各类教学资源 700 多万套。公司

为了深耕中、小学的教学资源消费市场,要能够吸引更多的学校用户,计划在2024 年 3 月

份决定升级一款教学资源搜索与下载产品,“*校通”。该产品由用户中心、资源网站、资源

定制与推荐、资源评价等子系统构成,在历经了 7 个月的开发后,于 10 月上线,至今为已

有运行半年,良好的用户体验与产品的稳定运行,得到了广大学校的一致好评。公司任命本

为系统架构师,负责了该产品的系统架构工作。软件的可靠性设计,是系统架构的核心工作

之一,它的设计合理性直接决定着系统的稳定性,保障了系统运行的质量。

        在可靠性设计之前,对产品升级的开发背景进行了解:首先,产品上线后运行 4 年多的

时间,在此期间有多次的功能性完善维护,虽然整体运行稳定,但错误也会偶尔出现,系统

的可靠性程度有所下降。其次,该产品历经了多个开发团队维护,代码质量差,系统的扩展

较差,已不能满足扩展性需求开发。最后,为了能吸引更多的学校用户,需要对现有产品功

能进行较大调整,同时又新增了不少需求。在了产品升级开发背景后,召开了产品项目会议,

决定对该产品重新开发,同时提出对产品进行架构设计,由其提出了系统运行稳定要求,保

障系统的可靠性。

        在架构设计期间,可靠性的要求是较为明确的,系统的核心模块运行可靠性要有保障。

因此我们回顾主流的软件可靠性设计技术:(1)容错设计技术:是应用程序所运行的软件或

硬件中发生的错误并从错误中恢复所采用的设计技术,主要包括:恢复块设计、N 版本程序

设计、冗余设计、卫防式程序设计等,它的设计要求,要有错误自我修复的能力;(2) 检错

技术:是建立软件系统查错机制,对程序中模块进行监控,一旦超过设定的阈值或检测到错

误发出报警通知负责人处理错误,主要包括:漏洞扫描、记录日志等,它的设计要求,要有

系统监控与预警错误的能力;(3) 降低复杂度设计:通过简化软件结构,缩短程序代码,优

化软件数据流向,降低软件复杂度,从而提高软件可靠性,它的设计要求,系统的程序实现

是简单的、尽量降低复杂程度。在回顾了主流的软件可靠性设计之后,我们重点的分析了核

心功能可靠性设计要求,例如:资源搜索、资源预览、资源下载、扫码支付等这些核心功能,

要有错误的修复能力,因此决定采用容错设计技术实现这些功能运行可靠性。另外,要实现

系统的错误预警处理,能够对系统出现的异常、错误进行收集与处理,因此决定采用检错技

术实现系统监控。

        在明确了采用容错设计技术、检错技术的可靠性设计技术后,我们开展了系统的可靠性

设计工作。在设计过程中让我印象较深的冗余设计、防卫式程序设计、检错技术的技术应用,

下面将着重阐述在可靠性设计过程中这些技术具体应用过程。

        冗余设计,包括结构冗余设计、信息冗余设计等,我们在开发过程中主要使用是信息冗

余设计,是防止动态产生的数据丢失的问题。在设计记录用户操作日志时,我们使用消息队

列技术临时存储这些数据,在消息队列中的数据,按着先进先出的策略插入到日志数据库中,

这样能够防止对数据库高并发操作。而在消息队列中的数据是单点的,一旦消息队列中失效,

其中的数据也会丢失。因此,在消息队列接收数据后,在将这些数据存储到消息数据库中,

防止消息队列的失效而造成的数据丢失。在设计资源搜索功能,我们将最新、较热的资源数

据存储到 Redis(内存数据库)中,用户在搜索资源数据时,只在 Redis 中搜索数据,这样

能够提升搜索的效率。而一旦内存溢出,将会导致 Redis 中的数据失效。因此,在数据存储

到 Redis 的后,在将这些数据存储到搜索数据库,防止 Redis 的失效而带来的数据丢失。在

冗余设计的过程中,让我体会较深的要对动态产生数据要进行冗余存储,防止数据丢失。

        防卫式程序设计,主要用于系统在运行过程可能出现的错误,做出防卫式的程序设计,

将出现的错误自动修复。资源下载功能是产品核心功能之一,会员在下载资源时,需要扫描

资源金额的二维码,完成支付后才能下载资源。在实现该功能时,需要对接公司的支付中心,

在扫描二维码时,需要调用支付中心的接口,将消费信息发送至支付中心,由支付中心完成

支付过程,根据支付是否成功的结果决定资源能否下载。为了让用户能够不会因支付失败而

导致资源无法下载,我们对该功能进行防卫式程序设计,在调用支付中心的接口时,将消费

信息记录在应用端的消费数据库中,一旦支付中心出错,会从消费数据库中读取数据,轮询

的向支付中心发送消费信息,同时向支付中心的运维管理员发送短信通知处理问题。正是通

过这样的可靠性设计,防止了因支付中心错误而导致的资源下载失败。在防卫式程序的过程

中,让我体会较深的是要在设计过程要有风险意识,对会出现的问题做好防卫式程序设计。

检错技术,主要对系统进行监控,一旦超设定阈值或检测到错误发出报警通知负责人处

理。了为了能够及时的发现错误,我们为系统设计了一套的监控子系统,能够监控功能异常

的处理情况、错误日志。为了实现这些监控服务,首先,在程序中加入了异常处理,对功能

异常进行捕获与处理,同时异常进行记录,例如,资源下载、扫码充值、资源预览等核心功

能加入了 try/catch 代码块;其次,我们封装了错误日志监控组件,这些组件调用集成到各

主要程序模块中,收集系统运行过程的出现的错误,例如,null 值、对象不存在、返回值

无效等错误。正是通过构建了监控子系统,让我们能够了解系统运行情况,一旦监控到异常、

错误时,系统会发短信通知负责人处理问题。在检错技术的应用过程中,让我体会较深的是

设计要在系统监控那些功能点,但不是全面监控,而是重点监控。

        在历经了 7 个月的开发,“*校通”的升级产品于在 2024 年 10 月上线。上线之后我们通

过调查问卷、热力图分析与市场的销售的反馈,得了用户的一致好评。正是对系统进行可靠

性设计,为产品升级后的新系统提供了运行保障。通过此次产品的升级开发,让我对可靠性

设计,有了更深刻的认识,懂得了要对系统中产生核心业务数据做好信息冗余设计、在设计

过程要有风险意识并做好防卫式程序设计、构建监控系统来检找系统运行的错误。正是此次

开发工作,让我对可靠性设计,有更多知识储备并积累了可贵的经验,对我今后的工作有很

大帮助。

http://www.xdnf.cn/news/293725.html

相关文章:

  • c++代码_加密_解密
  • 【了解】数字孪生网络(Digital Twin Network,DTN)
  • Sliding Window Attention(Longformer)
  • R7打卡——糖尿病预测模型优化探索
  • 【STM32单片机】#13 RTC实时时钟
  • cpp学习笔记1--class
  • CloudCompare 中 ccDrawableObject
  • 在Java中,什么是checked exception(即compile-time exception、编译时异常)?
  • 基于DGI框架的最佳实践
  • 数字化工厂中央控制室驾驶舱系统 - Windows 部署笔记
  • 计算机体系结构 第九章
  • 不小心把当前的环境变量路径覆盖掉怎么办
  • Gemini 解释蓝图节点的提示词
  • Lesson 15 Good news
  • 功率放大器设计
  • 大模型基础(五):transformers库(下):快速分词器、自动配置类、快速微调
  • pytorch checkpointing
  • 交换机工作原理(MAC地址表、VLAN)
  • P4168 [Violet] 蒲公英 Solution
  • 生物化学笔记:神经生物学概论10 运动节律的控制 运动时脑内活动 运动系统疾病及其治疗(帕金森、亨廷顿)
  • 【OSPF协议深度解析】从原理到企业级网络部署
  • 第15章:双星入侵与时间的迷雾
  • AIGC工具平台-图片转换线稿
  • 「OC」源码学习——对象的底层探索
  • 混搭文化数字社会学家解读,创新理解AI社会学网络社会学与数字人类学最新研究进展社会结构社会分层数字文化数字经济
  • 网络编程套接字(一)
  • PriorityQueue
  • 使用 Semantic Kernel 快速对接国产大模型实战指南(DeepSeek/Qwen/GLM)
  • Web前端开发:Grid 布局(网格布局)
  • ts学习(1)