深圳建设网站哪家好/百度明星人气榜排名
从大的方面来讲,软件系统的需求分为功能性需求和非功能性需求。功能性需求一般由业务分解而来,是直接面向用户的需求,也是直接体现用户价值的需求。非功能性需求一般多是由功能性需求的内在要求衍生而来,其价值更多的体现在对功能性需求的支撑上。通常,也将这两者称为软件系统的功能属性和质量属性。
虽然功能属性很重要,但是架构设计中,研究更多的是非功能属性,也就是质量属性。因为这些属性决定着架构是否满足要求从而可支撑用户的需求;是否足够健壮从而可长期运行;是否足够灵活从而可应对未来的变化等等。要做到这一点,就需要对质量属性进行提取,以便针对性的做出决策。下面我们从理论上先看看常见的质量属性有哪些。
1 非功能性需求的相关概念
软件开发中,很多东西都比较难以量化,特别是开发周期问题。因为软件开发是一个相对主观,且跟程序员水平关系比较大的工作,这就导致了人月神话的故事。但是,质量属性却是系统的一个相对可测量或者可测试的属性,可用来描述系统满足利益相关者需求的程度。
首先是性能。性能是指系统的响应能力,即经过多长时间对某个事件做出响应,或者在某段时间内能够处理的事件个数。通常用单位时间内执行事件任务个数来定量表示。
其次是可靠性。可靠性用来表示提供无故障连续服务的能力,表示系统在故障、错误等情况下维持系统功能特性的能力。通常用MTTF和MTBS来衡量。
再者,可用性,也就是正常运行时间比例,通常用两次故障之间的时间长度来衡量。
还有安全性,是系统抵御外部攻击,防止非授权用户访问的能力。包括身份认证、机密性、完整性、不可否认性、可控性等
可修改性,指系统能够以较高性价比进行变更的能力,包括可维护性,可移植性,可扩展性及结构重组。
功能性,是系统完成期望的工作的能力。
可变形,是指架构经过扩充或变更而成为新架构的能力。跟可修改性不同的是,这里是成为新架构。
互操作性,与其他系统或组件交互的能力。
其他还有文化与政治需求,全球化,本地化,多语言等要求。
2 实际系统中如何保障上述非功能性需求
现代软件系统经历了多种模型的演化,每一次的改进都体现了关注点分离,内聚与耦合的强化处理。无论是分层的架构,抽象的手法,还是分而治之的设计等。这些方法的运用,导致软件开发的方法也发生了相应的变化。早期,程序是一个从零到一的产物,这个过程程序员是它的上帝,对它的一切都进行管理。后来,出现操作系统,部分通用需求就沉淀到操作系统中,这样,程序员不再操心程序的加载、调度问题,而只需要关注功能的实现。再之后,随着软件功能的复杂化,在应用软件内部也产生了一些革新的方法论,包括从单体到分层,从分层到服务化,从服务化到微服务,甚至到现在的更大的统一和抽象:云计算。云计算引入了云操作系统,在其上产生了云原生应用,无服务器应用,函数即服务(FaaS)等等。
站在更高的角度来看这一切的演变,我们会发现,底层的基座一直在加固、加厚,为的就是上层应用开发的便捷。就好比一句hello world的打印,在上层来看非常简单,但是底层要做的工作一样都少不了。冰山在膨胀,只是这些变化大部分都在水面之下,很多开发者感知不到而已。
在今天,各种框架和库的推出速度不减反增,不是因为我们的功能需求增加了,而是更多的非功能需求可以更好更快的实现了。得益于底层基座的不断完善和强化,在已有工作的基础上产生更加强大的基座,是这些库和框架发芽生根的原始动力,现有的成果也提供了更加丰富的土壤,因而加速了这一过程。有时候我们会发现,某一个功能框架的应用,需要依赖数十个其他功能框架,就是这一特征典型的表现。
高可靠、高并发、高可用、高安全、高吞吐、高性能、高扩展等等特性,在以前都是需要程序员自己手把手的搭建和解决的,现在可能只需做一个选择题,考虑重点是用哪一家的框架和库,变成这类问题了。从而,实现关注点或者重心始终聚焦于业务和功能实现上,聚焦于价值最大化上。
举个简单例子,今天搭建一个个人服务器,比十年前不知道简单多少倍。之前需要一个团队干的事情,今天可能一个简单培训后的初级程序员就可以做了,而且还不需要太多时间,这就是生产工具促进生产力在程序开发世界的体现。
说这些,并不是鼓励大家不用关注软件的质量属性,相反,要想成为合格的架构师,不想成为眼高手低的纸上谈兵者,还是需要对系统的基本原理有深刻的理解。想象一下,如何成为基础底座的开发者,你就知道自己需要掌握什么了。为了对质量属性有更好的理解,下面仍然结合前述某电力系统项目,谈谈在保证软件架构质量属性方面所采取的应对策略。
性能方面:这一方面的要求对企业架构的方案选型、设计有直接的影响。首先,需要了解业务的特点,其对性能的需求,深刻把握这一点,才能在基础技术选型上开好头起好步。我们以上述某电力系统为例来说明这一点。通常信息系统类的业务功能,对系统没有特殊要求。比如,CPU满足一定性能,内存足够可能就可以了。点击一个按钮,至于是0.1秒响应还是0.2秒响应,在用户的感官上是没有太大区别的,因为这超过了人类感知的分辨率。但是,像前述某电力系统项目,其中有两个业务特点,就对系统提出了特殊的要求:一个是业务中包含了强实时性要求的采集业务,一个是业务中包含了有一定实时性要求的音视频业务。这两类业务又对硬件和软件提出了相应的要求。像实时数据的采集,这是实时性要求最高的一类业务,这类业务在硬件层面的高要求需要FPGA类硬件可编程芯片支撑才可以实现。特别是并行化要求比较严格的一些算法处理,关联数据的采集必须并行进行。采集的数据一部分本地运算处理,一部分远传。在本地运算处理端,需要实时操作系统,在远传端,需要光纤配合特殊的协议,从而保证在故障发生时,能够在极短的时间内处理,避免故障传导蔓延到更大的范围,造成不可避免的经济损失。这些需求,对硬件的选择,操作系统的选择,业务功能开发方式都提出了不同的要求。另外,音视频业务虽然没有实时数据采集这样高的实时性要求,使用Linux系统就可以满足,但是编解码过程仍然会消耗大量的CPU算力。为此,配备硬件编解码器都是业界常用的方案。综合上述需求,我们在设备端采用了多CPU加FPGA的架构方案。数据采集使用带ARM内核的FPGA芯片ZYNQ实现,音视频编解码采用NVR产品类常见的带多通道硬件编解码CPU实现。这样,关键业务需求在技术层面就得到了保证,避免开发进入后期出现性能瓶颈,影响项目的开展。当然,理论选择通过了,还需要做一个验证方案,对选型进行压力测试,保证可选即可行。
上面主要提到了硬件层面的应对方案。其实,软件方面的选择也很重要,且跟硬件相比,软件对开发周期和成本的影响更大。系统是否成熟,开发人员是否熟悉该系统,是否有成熟靠谱的框架都是至关重要的信息。好在整个项目不是从零开发,之前已经有了一套经过产品化验证的视频转发框架,可以满足多视频流业务对性能的要求。在数据采集方面,开发平台内置提供了经过验证的freeRTOS实时操作系统,且提供了SDK开发环境,这些都简化了功能开发的流程,使得开发人员可以将精力集中到业务功能上,且进一步的保证了可靠性。所以,无论是选用业界成熟的框架还是自己设计解决,非功能属性都是为业务的稳定开展服务的。
关于可靠性就更不用说了,是系统架构设计过程中重点关注的内容,往往也是用户比较关注的内容。关于这一点,前面已经有所提及。总的来讲,上述系统为了保障音视频业务的流畅性,设计了支持多网络、异构网络捆绑传输的网络库。通过该方法,多个通道的冗余特性被充分发挥了出来,提高了网络带宽,增加了网络的可靠性。其他方面,像终端设备的软硬件看门狗设计、常见的磁盘阵列、负载均衡、关键节点的备份设计等这些比较常用的手段,也是需要在架构阶段考虑到并纳入整体方案的。不过在这个过程中需要注意一点,过犹不及。不可因为某些特性的支持,导致整个架构过于复杂,出现反噬效应,反而导致不可靠。比较好的经验是平衡架构复杂性和其他功能特性,在保证基础功能特性满足的前提下,尽可能构建较为简洁且易理解的架构,在整个系统运转起来后,可进一步查漏补缺。如果需要对架构的某些方面进行修改,也不会存在大的问题。这些动作可纳入架构演化历程中,通过重构手段来完成。不要幻想架构设计好后是一成不变的。把握这一点,反而能够在开发过程中积累经验,增强信心,减少未知,最终做到从容应对。
安全性方面,在上述系统中也是非常关键的一个要素。因为是涉及电力系统的项目,安全性要求是比较高的。部分功能需要在内部网络运行,有相应的加密标准要求。系统方面,也是需要部署到Linux系统中,这方面因为前期产品是在Windows系统上开发的,还需要考虑跨平台的迁移。好在之前设计时就考虑了可移植性的问题,大部分代码都是可复用的。除此,系统中存在移动设备,这些节点需要通过无线网络接入电力系统内部,也就是需要穿透公网。为实现该需求,在系统设计时选择VPN加密通道的方法,采用专门的加密卡,在公网上构建安全私密的内部专用网络通道,保证数据的安全可靠,减少了接入风险。
除了这些项目关联的安全需求外,常见的身份认证、分级分组的权限管理、安全审计等措施也在系统设计中进行了对应的实施。
其他像可用性,可修改性,在前面的论述中也都有了相应的提及。像可修改性,系统采用了构件化的设计方式,前述的网络库就是以构件方式提供,编解码的业务口也是抽象设计为通用的接口,虽然底层的硬件接口不完全一样,但是在构件层面上,保证了接口的一致性,减少了对接成本,提高了开发效率。
通过上述措施的采用,整个系统的设计实现,基本满足了用户对相关质量属性的要求。上述有针对性的分析和设计,并采取必要的应对措施,有力的保证了整个项目的稳步推进。可以预见,如果没有对这些质量属性进行充分的挖掘和分析,系统的架构很可能成为空中花园,华而不实,且迟早会坍塌下来。
但是即便如此,系统投运后也出现了一些预料外的问题,主要是卫星会商业务的可用性。这一业务最初设想是融合电话和短信,通过短信构建控制通路,通过电话构建数据通路,以此搭建便捷实用的不受空间地点限制的正真意义上的应急会商。考虑到短信存在容易丢和超时的现实情况,为了便于业务层的开发(不用过于关注这些通道特性),在设计控制通路时采用了分层策略,底层包装出一个通道,业务层直接使用。但是实际测试中发现,使用移动网络可行的短信通道,在卫星网络下变得几乎不可用。为了构建一个可靠通道所引入的重传机制却成为占用带宽资源、影响正常传输的障碍。可见,理论上看似完美的方案,实际中可能举步维艰。后来还是放弃通道的设计概念,直接在短信上构建业务功能,在业务中根据需求、优先级特性等有差别的处理短信丢失和超时问题,才慢慢改进了业务体验。这是后续在架构设计方面需要汲取的经验教训。
以上就非功能需求对系统架构设计的影响进行了一些整理总结,希望对大家有所帮助。
相关文章:

系统架构主题之八:非功能性需求对系统架构及设计的影响
从大的方面来讲,软件系统的需求分为功能性需求和非功能性需求。功能性需求一般由业务分解而来,是直接面向用户的需求,也是直接体现用户价值的需求。非功能性需求一般多是由功能性需求的内在要求衍生而来,其价值更多的体现在对功能…...

盛元广通化工实验室管理系统
随着时代的进步和网络技术的普及应用,管理化工实验室的日常工作和实验过程,企业科研单位对信息化、智能化和安全性日趋要求严格,根据化工实验室的实际需求出发,从完整的开发框架、调度引擎和丰富的组件、页面样例等快速响应应用需…...

代码没注释?一个方法几百行?
干程序员的都有接收别人的代码的经历,大部分时候,我们都会偷偷骂一句“这人是傻逼吧,这代码写的这么烂!” “一个方法写几百行,还没有注释,鬼知道写的什么东西!” 现在,你不需要为…...

Angular-04:指令
① 内置指令1.1 *ngIf 结构指令1.2 [hidden] 属性指令1.3. *ngFor 结构指令1.4 *ngSwitch 结构指令 ② 自定义指令用法 指令是angular操作dom的途径,分为属性指令和结构指令。属性指令:修改元素的外观或行为。使用 [ ] 包裹。结构指令:增加、…...

[SpringCloud] Eureka 与 Ribbon 简介
目录 一、服务拆分 1、案例一:多端口微服务 2、案例二:服务远程调用 二、Eureka 1、Eureka 原理分析 2、Eureka 服务搭建(注册 eureka 服务) 3、Eureka 服务注册(注册其他服务) 4、Eureka 服务发现…...

【Python 零基础入门】常用内置函数 再探
【Python 零基础入门】内容补充 1 常用内置函数 Python 简介为什么要学习内置函数集合操作len(): 计算长度sorted(): 排序all(): 检查所有元素any(): 检查任一元素filter(): 过滤元素map(): 应用函数zip(): 组合元素 文件操作和输入输出open(): 打开文件read(): 读取文件write(…...

10.30二叉树一些性质,找公共祖先(一般与搜索树),操作的复杂度,选择题细节
课上 一些结论,性质 n0,n1,n2指的是子结点的数量,n0没有子节点,叶子结点 n2*n2n11,若n1为奇数,则n为偶数,不然,则为奇数 满二叉树 没有度为1的结点,即每个结点要么没有孩子结点,要么…...

亮氨酸脯氨酸肽——一种新型的医药中间体研究肽
亮氨酸脯氨酸医药中间体肽是一种合成(人造)激素,类似于大脑中产生的天然激素。它用于治疗许多医疗问题,包括: 子宫平滑肌瘤(子宫肌瘤)出血引起的贫血,或晚期或晚期前列腺癌症&#…...

Ubuntu 22.04 开机闪logo后卡在/dev/sda3: clean
环境 Vmware 17.0.0,CPU 2,内存4G,硬盘50G Ubuntu 22.04 问题描述 开机 --> 显示两行代码 --> 显示ubuntu logo --> 左上显示两个代码卡住不动 原因分析 1、网上大多说显卡驱动,最近没安装相关软件,也没…...

avue-crud 自定义列
基本设置: option: {columnBtn: false,refreshBtn: false,addBtn: false,delBtn: false,editBtn: false,viewBtn: false,searchShowBtn: false,height: auto,maxHeight: auto,calcHeight: 70,searchLabelWidth: 58,tip: false,searchShow: false,searchMenuSpan: 6…...

达索系统SOLIDWORKS 2024 装配体新增功能
如今市场环境紧迫,许多企业在这样的情形之下,都需要尽快将产品推向市场,赢得头筹。所以产品设计需要快速进行装配验证,以确保产品功能和性能的准确性和可靠性,同时原型或样机的制造和装配需要尽快完成,以满…...

电脑入门:电脑专业英语500词,供新手参考
1. file n. 文件;v. 保存文件 2. command n. 命令,指令 3. use v. 使用,用途 4. program n. 程序 5. line n. (数据,程序)行,线路 6. if conj. 如果 7. display vt. 显示,显示器 8. set v. 设置,n. 集合 9. key n. 键,关键字,关键码 10. list n. 列表,显示,…...

采购管理工具-采购软件-Leangoo免费看板工具
我们可以按照公司的实际情况定制采购流程。 1、在Leangoo免费看板工具中创建一个项目,项目类型建议选择“轻量级协作”,项目模版建议选择“人事与行政” 系统会自动为您创建四个看板,如下图: 图1 2、在项目内创建一个 “办公室采…...

【23真题】大神凭这套拿452分!看看你能拿多少?
今天分享的是23年福州大学866的信号与系统试题及解析。23年福州大学新一代电子信息的最高分是452分!但是我看不到单科分数。按照75,75,150,150。也就是只有450,说明这个同学,专业课和数学几乎拿满ÿ…...

大数据之LibrA数据库系统告警处理(ALM-12002 HA资源异常)
告警解释 HA软件周期性检测Manager的WebService浮动IP地址和数据库。当HA软件检测到浮动IP地址或数据库异常时,产生该告警。 当HA检测到浮动IP地址或数据库正常后,告警恢复。 告警属性 告警参数 对系统的影响 如果Manager的WebService浮动IP地址异常…...

CSS基础入门04
目录 1.内边距 1.1基础写法 1.2复合写法 2.外边距 2.1基础写法 2.2复合写法 2.3块级元素水平居中 3.去除浏览器默认样式 4.弹性布局 4.1初体验 5.flex 布局基本概念 6.常用属性 6.1justify-content 6.2align-items 1.内边距 padding 设置内容和边框之间的距离. …...

LeetCode2741.特别的排列 状压
暴力枚举的话是n! 考虑状压DP,其实就是用二进制表示状态 再进行暴力 同时加一个记忆化就好了 这里有常用技巧: 全集(1<<n)-1 增加某个元素 x | (1<<i) 删除某个元素 x & ~(1<<i) const i…...

【Linux】Centos 8 服务器部署:阿里云域名注册、域名解析、个人网站 ICP 备案详细教程
目录 一、背景信息 二、操作步骤 (1)查询域名 (2)加入域名清单 (3)确认订单信息 (4)支付 (5)等待域名实名认证通过 三、域名注册成功 四、查看域名…...

Sass、Less和Stylus之间有什么主要的区别?
Sass、Less和Stylus是三种常见的CSS预处理器,它们在功能和语法上有一些区别。以下是它们之间的主要区别: 1:语法差异: Sass使用缩进的语法,使用类似于Python的缩进来表示嵌套规则和块级作用域。Less和Stylus使用类似…...

第八章 软件测试自动化
一、学习目的与要求 通过本章的学习,了解自动化测试应考虑的各种因素及如何衡量自动化测试成本,掌握自动化测试和手工测试的优缺点,能正确选择软件测试策略,了解测试工 具的分类和使用目的,熟悉常用的测试工具…...

科大讯飞勾勒生成式AI输入法“模样”,开启下一代输入法革命
回顾国内第三方输入法赛道近十余年的发展,移动互联网的市场红利催生了科大讯飞、百度、搜狗等颇具规模和实力的头部厂商。与此同时,历经多年、多方角逐,第三方输入法市场进入存量阶段,升级技术、优化用户体验来挖掘存量࿰…...

OV-VG: A Benchmark for Open-Vocabulary Visual Grounding
OV-VG: A Benchmark for Open-Vocabulary Visual Grounding 一、Abstract 写在前面 又是一周周末,光调代码去了,都没时间看论文了,汗。 这是一篇关于开放词汇定位的文章,也是近两年的新坑,但是资源也是需要不少。 …...

win10 javaweb 项目8080端口被占用
文章目录 前言出现场景:解决思路: 前言 提示:生活该走向何处?也许你还不知道答案,但是你一定是答案的一部分。 出现场景: 解决思路: 找到运行的进程直接干掉 打开命令窗口(win r…...

C语言每日一题(22)合并两个有序数组
力扣网 88. 合并两个有序数组 题目描述 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 注意…...

C++学习day--24 推箱子游戏图像化开发
环境要求: 1、VS2015以上 2、成功安装并配置图形库 项目注意事项:代码复制好以后,把下面的字符集改为多字节字符集 第 1 节 项目需求 实现一款推箱子游戏,效果如下图所示 , 具体规则: 1. 箱子只能推动而不能拉动…...

YOLOv8中的After Fuse指的是什么?
Fuse是指模型的一些模块进行融合。常见的就是conv和bn层进行融合,在训练的时候模型是存在conv和bn的,但在推理的过程中,模型在初始化的时候会进行模型fuse,把其中的conv和bn进行融合,通过一些数学转换把bn层融合到conv里面,还有一些例如DBB,RepVGG等等模块支持融合的这些在fuse…...

R-FCN: Object Detection via Region-based Fully Convolutional Networks(2016.6)
文章目录 AbstractIntroduction当前最先进目标检测存在的问题针对上述问题,我们提出... Our approachOverviewBackbone architecturePosition-sensitive score maps & Position-sensitive RoI pooling Related WorkExperimentsConclusion 原文链接 源代码 Abstr…...

Linux服务器部署Spring Boot项目的一些shell命令脚本
1.启动jar包的命令(根据jar包数量创建,并指定相对应的jar包) nohup java -server -Xms64m -Xmx128m -jar 项目jar包的名称.jar --spring.profiles.activeprod > 记录jar包的日志.log 2>&1 &可以写在start.sh文件里(…...

Youtube DNN:Deep Neural Networks for YouTube Recommendations
1.介绍 本文主要解决的三个挑战: 大规模的推荐场景,能够支持分布式训练和提供有效率的服务。不断更新的新物料。稀疏的用户行为,包含大量的噪声。 2.推荐系统 文章包含推荐系统的两阶段模型:召回和排序。 召回网络根据用户的历…...

Python 入门基础知识点有哪些?
Python是一种高级的、解释性的、面向对象的、动态类型语言,它在机器学习、数据分析、Web开发、科学计算等领域都有广泛的应用。下面是Python入门基础知识点的详细介绍。 1、变量和数据类型 在Python中,可以使用变量来存储数据。Python的数据类型包括整…...