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 月上线。上线之后我们通
过调查问卷、热力图分析与市场的销售的反馈,得了用户的一致好评。正是对系统进行可靠
性设计,为产品升级后的新系统提供了运行保障。通过此次产品的升级开发,让我对可靠性
设计,有了更深刻的认识,懂得了要对系统中产生核心业务数据做好信息冗余设计、在设计
过程要有风险意识并做好防卫式程序设计、构建监控系统来检找系统运行的错误。正是此次
开发工作,让我对可靠性设计,有更多知识储备并积累了可贵的经验,对我今后的工作有很
大帮助。