【系统架构师】-论文-论软件可靠性分析与设计

1、摘要:

        我就职于一家在线教育互联网公司,公司为了深耕中、小学的教学资源消费市场,决定在 2017 年3月份决定升级一款教学资源搜索与下载产品,“*校通”。我有幸作为该产品系统架构师,负责了系统架构工作。本文以该产品升级的可靠性设计为例,论述了软件可靠性设计的过程:首先,对产品的开发特点进行分析与回顾主流的可靠性设计技术,其次
分析了可靠性设计要求,确定了采用容错设计技术、检错技术满足系统运行的可靠性。最后,重点论述了几余设计、防卫式程序设计、检错技术的应用过程。事实证明,正是采用合适的、正确的可靠性设计技术保障了产品上线后的运行稳定。该产品历经7 个月时间于 2017 年 10 上线,上线之后系统的稳定运行与良好的用户体验得到了用户的一致好评。

2、正文:

         我就职的企业是一家在线教育互联网公司,公司是国内较大、较权威的 k12 领域的教学资源提供商之涵盖全学科的试题、试卷、学案、教案等各类教学资源 700 多万套。公司为了深耕中、小学的教学资,源消费市场,要能够吸引更多的学校用户,计划在 2017 年3月份决定升级一款教学资源搜索与下载产品“*校通”。该产品由用户中心、资源网站、资源定制与推荐、资源评价等子系统构成,在历经了7个月的开发后,于10月上线,至今为已有运行半年,良好的用户体验与产品的稳定运行,得到了广大学校的一致好评。公司任命本为系统架构师,负责了该产品的系统架构工作。软件的可靠性设计,是系统架构的核心工作之一,它的设计合理性直接决定着系统的稳定性,保障了系统运行的质量。
        在可靠性设计之前,对产品升级的开发背景进行了解:首先,产品上线后运行 4年多的时间,在此期间有多次的功能性完善维护,虽然整体运行稳定,但错误也会偶尔出现,系统的可靠性程度有所下降。其次,该产品历经了多个开发团队维护,代码质量差,系统的扩展较差,已不能满足扩展性需求开发。最后为了能吸引更多的学校用户,需要对现有产品功能进行较大调整,同时又新增了不少需求。在了产品升级开发背景后,召开了产品项目会议,决定对该产品重新开发,同时提出对产品进行架构设计,由其提出了系统运行稳定要求,保障系统的可靠性。
        在架构设计期间,可靠性的要求是较为明确的,系统的核心模块运行可靠性要有保障。因此我们回顾主流的软件可靠性设计技术:(1)容错设计技术:是应用程序所运行的软件或硬件中发生的错误并从错误中恢复所采用的设计技术,主要包括:恢复块设计、N版本程序设计、几余设计、卫防式程序设计等,它的设计要求,要有错误自我修复的能力;(2) 检错技术:是建立软件系统查错机制,对程序中模块进行监控,一旦超过设定的闹值或检测到错误发出报警通知负责人处理错误,主要包括:漏洞扫描、记录日志等,它的设计要求,要有系统监控与预警错误的能力;(3)降低复杂度设计:通过简化软件结构,缩短程序代码,优化软件数据流向,降低软件复杂度,从而提高软件可靠性,它的设计要求,系统的程序实现是简单的、尽量降低复杂程度。在回顾了主流的软件可靠性设计之后,我们重点的分析了核心功能可靠性设计要求,例如:资源搜索、资源预览、资源下载、扫码支付等这些核心功能,要有错误的修复能力,因此决定采用容错设计技术实现这些功能运行可靠性。另外,要实现系统的错误预警处理,能够对系统出现的异常、错误进行收集与处理,因此决定采用检错技术实现系统监控。
        在明确了采用容错设计技术、检错技术的可靠性设计技术后,我们开展了系统的可靠性设计工作。在设计过程中让我印象较深的几余设计、防卫式程序设计、检错技术的技术应用,下面将着重阐述在可靠性设计过程中这些技术具体应用过程冗余设计,包括结构冗余设计、信息几余设计等,我们在开发过程中主要使用是信息几余设计,是防止动态产生的数据丢失的问题。在设计记录用户操作日志时,我们使用消息队列技术临时存储这些数据,在消息队列中的数据,按着先进先出的策略插入到日志数据库中,这样能够防止对数据库高并发操作。而在消息队列中的数据是单点的,一旦消息队列中失效,其中的数据也会丢失。因此,在消息队列接收数据后,在将这些数据存储到消息数据库中,防止消息队列的失效而造成的数据丢失。在设计资源搜索功能我们将最新、较热的资源数据存储到 Redis (内存数据库)中,用户在搜索资源数据时,只在 Redis 中搜索数据,这样能够提升搜索的效率。而一旦内存溢出,将会导致 Redis 中的数据失效。因此,在数据存储到 Redis的后,在将这些数据存储到搜索数据库,防止 Redis 的失效而带来的数据丢失。在几余设计的过程中,让我体会较深的要对动态产生数据要进行冗余存储,防止数据丢失。
        防卫式程序设计,主要用于系统在运行过程可能出现的错误,做出防卫式的程序设计,将出现的错误自动修复。资源下载功能是产品核心功能之一,会员在下载资源时,需要扫描资源金额的二维码,完成支付后才能下载资源。在实现该功能时,需要对接公司的支付中心,在扫描二维码时,需要调用支付中心的接口,将消费信息发送至支付中心,由支付中心完成支付过程,根据支付是否成功的结果决定资源能否下载。为了让用户能够不会因支付失败而导致资源无法下载,我们对该功能进行防卫式程序设计,在调用支付中心的接口时,将消费信息记录在应用端的消费数据库中,一旦支付中心出错,会从消费数据库中读取数据,轮询的向支付中心发送消费信息,同时向支付中心的运维管理员发送短信通知处理问题。正是通过这样的可靠性设计,防止了因支付中心错误而导致的资源下载失败。在防卫式程序的过程中,让我体会较深的是要在设计过程要有风险意识,对会出现的问题做好防卫式程序设计。
        检错技术,主要对系统进行监控,一旦超设定闯值或检测到错误发出报警通知负责人处理。了为了能够及时的发现错误,我们为系统设计了一套的监控子系统,能够监控功能异常的处理情况、错误日志。为了实现这些监控服务,首先,在程序中加入了异常处理,对功能异常进行捕获与处理,同时异常进行记录,例如,资源下载、扫码充值、资源预览等核心功能加入了try/cath 代码块;其次,我们封装了错误日志监控组件,这些组件调用集成到各主要程序模块中,收集系统运行过程的出现的错误,例如,null 值、对象不存在、返回值无效等错误。正是通过构建了监控子系统,让我们能够了解系统运行情况,一旦监控到异常、错误时,系统会发短信通知负责人处理问题。在检错技术的应用过程中,让我体会较深的是设计要在系统监控那些功能点,但不是全面监控,而是重点监控。
        在历经了7个月的开发,“*校通”的升级产品于在 2017 年10 月上线。上线之后我们通过调查问卷热力图分析与市场的销售的反馈,得了用户的一致好评。正是对系统进行可靠性设计,为产品升级后的新系统提供了运行保障。通过此次产品的升级开发,让我对可靠性设计,有了更深刻的认识,懂得了要对系统中产生核心业务数据做好信息几余设计、在设计过程要有风险意识并做好防卫式程序设计、构建监控系统来检找系统运行的错误。正是此次开发工作,让我对可靠性设计,有更多知识储备并积累了可贵的经验对我今后的工作有很大帮助。   

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/860263.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

玩转Linux dd命令:备份与恢复指南

欢迎来到我的博客,代码的世界里,每一行都是一个故事 🎏:你只管努力,剩下的交给时间 🏠 :小破站 玩转Linux dd命令:备份与恢复指南 前言简介基本语法常用选项 示例3. 高级用法 性能优…

python-九九乘法表(对齐式1)

[题目描述] 输出九九乘法表,输出格式见样例。输入格式: 无输出格式: 输出乘法表,对齐方式见样例输出。样例输入 无样例输出 来源/分类(难度系数:一星) 完整代码展示: #对齐式1 a[] …

夏季生鲜防损规范

一、引言 在夏季,高温与高湿度的环境条件对生鲜商品的品质和保存构成了严峻挑战,生鲜商品由于其天然的易腐特性,在夏季极易发生变质和损耗,那么超市夏季生鲜防损规范主要包含哪几个方面呢? 二、生鲜商品分类及特点 …

使用 MediaSession API 控制 Web 媒体播放

在现代的 web 应用程序中,多媒体播放已经成为了很常见的功能。为了提供更好的用户体验,我们可以使用 MediaSession API 来控制网页中的媒体播放。 什么是 MediaSession API? MediaSession API 允许网页控制媒体会话,例如音频和视…

C/C++混合编译说明

C调用C的函数: C的头文件中声明,被C调用的函数,是以C的方式编译 C的头文件: #ifdef __cplusplus extern "C" { #endif void func_c(void); #ifdef __cplusplus } #endif C调用C的函数: C的源文件中声明&#xff…

Windows操作防火墙命令

Windows操作防火墙命令 启用防火墙: netsh advfirewall set allprofiles state on禁用防火墙: netsh advfirewall set allprofiles state off添加新的入站规则允许端口80(HTTP): netsh advfirewall firewall add r…

Python生成器嵌套太多?使用yield from秒变简洁!

目录 1、yield from基础概念 🌐 1.1 yield关键字回顾 1.2 yield from引入动机 2、yield from深入解析 🧭 2.1 语法与用法 2.2 传递生成器控制权 2.3 与迭代器的高效整合 2.4 与传统yield对比优势 3、实战应用示例 📈 3.1 链接多个生成器 3.2 简化递归生成器实…

Git之checkout/reset --hard/clean -f区别(四十二)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

Elasticsearch:倒数排序融合 - Reciprocal rank fusion - 8.14

警告:此功能处于技术预览阶段,可能会在未来版本中更改或删除。语法可能会在正式发布之前发生变化。Elastic 将努力修复任何问题,但技术预览中的功能不受官方正式发布功能的支持 SLA 约束。 倒数排序融合 (reciprocal rank fusion - RRF) 是一…

【数学】Leetcode 50. Pow(x, n)【中等】

Pow(x, n) 实现 pow(x, n) ,即计算 x 的整数 n 次幂函数(即,xn )。 示例 1: 输入:x 2.00000, n 10 输出:1024.00000 示例 2: 输入:x 2.10000, n 3 输出&#xf…

wireshark抓包方法及常用过滤命令

wireshark是一个抓包小能手,排查网络问题的时候常常离不开,网上的使用教程也有很多,但多数是抓的有线数据包,本文主要介绍使用wireshark抓空口包的方法和常用命令。 -----再牛逼的梦想,也抵不住傻逼般的坚持&#xff…

OpenAI: 禁止在不支持的地区使用其 API

OpenAI 给开发者发邮件表示,禁止其 API 用于不被允许的地区,否则 7 月 9 日将面临封杀。 本次封杀似乎不区分 IP ,而是直接按照地理位置。

电商数据自动化批量采集:商品数据|订单数据|店铺数据|图片搜索|关键字搜索

电商竞争白热化的今天,一个电商卖家往往会在多个平台铺设店铺来获取更多的客户。有没有什么高效的电商数据采集方式呢? 针对主流电商平台数据采集、ERP、OA等业务系统数据采集、行业数据采集,可以用以下5种电商数据采集方式: API…

【Linux】Ubuntu 部署 Zabbix 7.0

实验环境:Ubuntu-22.04 官方下载地址: 下载Zabbix 7.0 LTS for Ubuntu 22.04 (Jammy), MySQL, Apache 1、下载 Zabbix 官方安装包以及环境配置 下载 zabbix 安装包 wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabb…

Perl如何进行错误处理和创建子程序详解

在Perl中创建子程序(类似于其他编程语言中定义函数)的基本语法如下: 使用sub关键字:这是定义子程序的关键字。 子程序名称:可以是任何有效的Perl标识符。 参数列表:子程序可以有零个或多个参数&#xff0…

Spring-Boot整合Redis【随记】

基于spring boot整合. 1 引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency> 2 编写redis的配置文件 application.yml进行编写. 属性: url por…

Django网站开发技术的应用(理论篇)

概述 Django提供了许多功能。比如在安全方面上Django提供了csrf防护机制以防止跨域脚本攻击、使用身份验证机制以防止未授权的登录等等。在数据库方面上Django提供了orm&#xff08;面向对象的数据库访问技术&#xff09;方便了对数据库的操作。此外Django还提供自定义模板、缓…

掌握Three.js:学习路线,成为3D可视化开发的高手!

学习Three.js可以按照以下路线进行&#xff1a; 基础知识&#xff1a; 首先要了解基本的Web开发知识&#xff0c;包括HTML、CSS和JavaScript。如果对这些知识已经比较熟悉&#xff0c;可以直接进入下一步。 Three.js文档&#xff1a; 阅读Three.js官方文档是学习的第一步。官…

(更新)2004-2022年 全国各省环境污染治理投资额数据

环境污染治理投资额是衡量一个国家或地区在环境保护和污染治理方面投入力度的重要经济指标。它体现了政府和企业在改善环境质量、推动绿色发展方面的共同努力&#xff0c;同时也是环境规制政策执行强度的一个反映。 数据简介 环境污染治理投资额涵盖了以下几个方面&#xff1…

APP软件系统的开发流程

APP软件系统的开发是一个复杂的过程&#xff0c;需要多方面的知识和技能。建议选择专业的开发团队进行开发&#xff0c;以确保APP的质量和成功。APP软件系统的开发流程通常包括以下几个阶段。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合…