5.2软件架构的历史背景和目的

2024-01-29 09:10

本文主要是介绍5.2软件架构的历史背景和目的,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

titledatecommentscategoriestagspermalink
软件架构的历史背景和目的
2020/3/9
true
软件架构
架构
软件
5.2

软件架构的历史

软件架构的出现有其历史必然性,计算机最开始使用的是机器指令进行编程,由于全是0和1组成的数字串,对编程人员十分的不友好,然后汇编语言就应运而生。汇编语言只是简单的用注意词替换机器指令,虽然只是简单的替换,很简陋但至少汇编的指令看起来比一长串的0和1好很多。而且可以有望文生义的功能,基本上可以看到指令,就知道是要做什么操作。但是随着软件的流行软件的规模开始变得越来越大,汇编指令写出来的程序,其弊端就显露出来了。最典型的就是IBM开发的操作系统360。这是一个失败的项目,项目负责人还因此写了一本书,叫做《人月神话》。

这个时期,软件开发难度太大造成了所谓的第1次软件危机。为了解决这次危机,就有人提出了结构化编程的概念,也就是我们常说的面向过程编程。可到了20世纪80年代的时候,由于计算机的快速发展,软件功能越来越强大,软件的复杂度也越来越高,导致面向过程的编程方法已经不再适用软件的更大规模的扩展,这时候就引出了面向对象的编程思想。

到了20世纪90年代,软件架构这个说法开始流行,而且创造了组件这个概念。我们可以看到从模块到面向对象到组件,本质上都是对达到一定规模的软件进行拆分,差别只是在于随着软件的复杂度不断增加,拆分的力度越来越粗,拆分的层次越来越高。

卡内基梅隆大学的马立肖和戴维嘉兰对软件架构做了很多研究,他们在1994年的一篇文章软件架构介绍里面写道,随着软件系统规模的增加,计算相关的算法数据结构不再构成主要的设计问题,但系统有许多部分组成时,整个系统的组织也就是所说的软件架构导致了一系列新的设计问题。

比如说系统规模庞大,内部耦合严重,开发效率极低。

系统耦合严重,牵一发动全身后续修改和扩展困难。

系统逻辑复杂,容易出问题,出问题后很难排查和修复。

所以软件架构的出现是势在必然的,是软件技术发展的内在需求。

软件架构的目的

由此我们也可以清楚地知道,软件架构的目的就是为了解决软件系统复杂度带来的一系列问题

这个结论虽然很简洁,但是却是架构设计过程中需要时刻铭记在心的第1条准则,首先遵循这条准则的新手架构师能够心中有数,而不是一头的雾水。其次,遵循这条准则也能够让老鸟架构师有的放矢,而不是贪大求全。

简单的复杂度分析案例

假如我们需要设立一个大学的学生管理系统,其基本功能包括登录注册,成绩管理,课程管理等。

当我们对这样一个系统进行架构设计的时候,

首先应该识别其复杂度的复杂到底体现在哪里,性能方面,一个学校的学生大约1~2万人,学生管理系统的访问频率并不高,平均每天单个学生的访问次数平均不到一次,因此性能这部分并不复杂,存储用Mexico完全能够胜任,缓存都可以不用那个服务器用nginx绰绰有余。

其次,在可扩展性方面,学生管理系统的功能比较稳定和扩展的空间并不大,因此可扩展性也并不复杂。

另外在高可用方面,学生管理系统及时档期两个小时,对学生管理工作影响也不大,因此可以不做负载均衡,更不用考虑异地多活这类复杂的方案了。但是如果学生的数据全部丢失,修复的过程是非常麻烦的,只能靠人工逐条修复,这个是不能接受的,因此需要考虑存储的高可靠性,这里就有点复杂了,我们需要考虑多种异常情况,比如说机器故障,机房故障,针对机器故障,我们需要设计马赛克同机,房主备方案,针对机房故障,我们需要设计跨机房同步方案。

在一个安全性方面,学生管理系统存储的信息有一定的隐私性,例如学生的家庭情况,学生的成绩等,但并不是说和金融类信息那样的,也不包含强隐私性的信息,因此安全性方面只要做到三个事情就基本可以了,即nginx提供ACL控制,用户账号密码管理,数据库访问权限。

在成本方面由于系统很简单,基本上几台服务器就能够搞定,对一所大学来说完全不是问题,可以无需太多关注。

通过上面的分析,我们可以清楚的明白这个方案的复杂性主要体现在存储的可靠性上,就是说保证系统异常的时候,不要丢失所有的数据即可。 学生管理系统.png

学生管理系统非常简单,但麻雀虽小,五脏俱全,基本上能涵盖软件系统复杂度分析的各个方面,而且绝大部分技术人员都曾经自己设计或者接触过类似的系统,结合自己的编程经验,分析之后能切实感觉到有不小的收获。


http://www.taodudu.cc/news/show-8440612.html

相关文章:

  • 盘点电子组装行业的原材料管理漏洞
  • 动手做个无人机—材料篇
  • 丙烯酰氧乙基三甲基氯化铵(DAC)接枝聚苯乙烯伯胺微球微粒/聚苯乙烯包覆硅胶复合微球
  • 食品接触材料
  • hypermesh 复合材料_HyperWorks复合材料仿真优化技术及应用
  • Elasticsearch:使用 SIMD 指令加速向量搜索
  • 运动的解析:从机械运动到自由落体,探索物体运动的基本规律与数学描述
  • 读书笔记:彼得·德鲁克《认识管理》第16章 使工作富有成效:核查与工具
  • 读书笔记:彼得·德鲁克《认识管理》第15章 使工作富有成效:工作和过程
  • UR10e+D435+ag95夹爪 gazebo 仿真记录(一)
  • 硬件测试之—纹波测试为什么不要使用接地夹子
  • CentOS 7上的进程管理
  • 点成分享| DNA提取需要了解的三个知识点
  • 点成分享 | DNA提取需要了解的三个知识点
  • 质粒构建的过程
  • 程序员客栈:程序员的经纪人_程序员的教育:为什么它不应该与其他专业相同...
  • perl 哈希 排序_在Perl中对数组和哈希元素进行排序
  • 2007-05-24 丹超 施克堡 vs 邦比
  • PDF 开发者查尔斯·格施克去世,享年 81 岁
  • stm32烟雾报警器的程序怎么实现
  • 基于stm32的烟雾报警器设计
  • java嵌入设备_在嵌入式设备上使用Java构建传感器网络
  • 基于Dragonboard 410c的燃气烟雾检测器(三)
  • 用C#编写一个串口助手接收温湿度、烟雾浓度传感器数据(cc2530)
  • C#传感器输入数据模拟命令行接收
  • 求大神帮忙分析海曼烟雾探测器的原理图电路(1 这是海曼烟感用到的MCU - MCV14A的外围电路 2 这是烟雾探测器的LED发射电路,求大神帮忙分析下其中的RC0和RC4这两个I/O口是用作?)
  • Android移动网络如何抓取数据包
  • caffe 15 caffe在ubuntuX64_1604上安装(CPU_ONLY)
  • fedora之无限折腾—— 快捷安装+配置
  • Android应用测试指南
  • 这篇关于5.2软件架构的历史背景和目的的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



    http://www.chinasem.cn/article/656416

    相关文章

    软件架构模式:5 分钟阅读

    原文: https://orkhanscience.medium.com/software-architecture-patterns-5-mins-read-e9e3c8eb47d2 软件架构模式:5 分钟阅读 当有人潜入软件工程世界时,有一天他需要学习软件架构模式的基础知识。当我刚接触编码时,我不知道从哪里获得简要介绍现有架构模式的资源,这样它就不会太详细和混乱,而是非常抽象和易

    新一代车载(E/E)架构下的中央计算载体---HPC软件架构简介

    老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节能减排。 无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事.而不是让内心的烦躁、焦虑、毁掉你本就不多的热情和定力。 时间不知不觉中,快要来到夏末秋初。一年又过去了一大半,成

    2024 年高教社杯全国大学生数学建模竞赛题目——2024 年高教社杯全国大学生数学建模竞赛题目的求解

    2024 年高教社杯全国大学生数学建模竞赛题目 (请先阅读“ 全国大学生数学建模竞赛论文格式规范 ”) 2024 年高教社杯全国大学生数学建模竞赛题目 随着城市化进程的加快、机动车的快速普及, 以及人们活动范围的不断扩大,城市道 路交通拥堵问题日渐严重,即使在一些非中心城市,道路交通拥堵问题也成为影响地方经 济发展和百姓幸福感的一个“痛点”,是相关部门的棘手难题之一。 考虑一个拥有知名景区

    随着人们网络安全意识提高,软件架构设计与评估也成为重中之重

    目录 案例 【题目】 【问题 1】(13 分) 【问题 2】(12分) 【答案】 【问题 1】答案 【问题 2】答案 相关推荐 案例         阅读以下关于软件架构设计与评估的叙述,回答问题 1 和问题 2。 【题目】         某电子商务公司为正更好地管理用户,提升企业销售业绩,拟开发一套用户管理系统。该系统的基本功能是根据用户的消费级别、消费历史、信

    软件架构风格: C2体系风格

    通俗示例 想象一下你正在使用一套乐高积木来搭建一个复杂的模型。每块乐高积木都是一个独立的部件,而乐高积木之间的接口设计得非常标准化,使得你可以轻松地将不同的积木组合在一起。如果你想要更换掉模型中的某一块积木,你只需要把它拔下来,然后插入新的积木即可,不需要重新设计整个模型。 通俗解释 C2体系风格 C2是一种软件体系结构风格,它强调组件之间的松耦合和高内聚。在C2风格中,软件系统被设计为一

    图形API学习工程(0):工程目的环境配置

    工程目的 我想要不借助引擎,而直接使用底层图形API(如DirectX和OpenGL等)来生成图像。 我认为这将有利于图形学算法与渲染框架相关的学习,因为: 游戏引擎往往对渲染进行了豪华的封装,而不利于看到图形学算法本质。UE4虽然开放了源代码,但是想要完全掌握渲染方面的代码也需要较高成本。 另外,我想对不止一个主流API进行封装,而是多个图形API进行封装,包括: OpenGLD3D1

    公司数字化转型的目的是什么?

    不同行业公司,其数字化转型的目的也不一样。下面我列举几个行业,给大家讲讲其数字化转型的真正目的。 制造数字化转型 制造业来说,数字化转型的本质是通过新一代信息技术与制造技术的融合,实现以数据为核心的资源要素变革、以网络化为牵引的生产方式重构、以扁平化为方向的企业形态转型、以平台赋能为导向的业务模式创新;构建全感知、全联接、全场景、全智能的数字工厂,优化产品的研发生产和营销流程,对传统管

    读软件设计的要素02概念的目的

    1. 要素 1.1. 概念的定义包括名称、目的、状态、操作和操作原则 1.2. 操作原则(operational principle) 1.2.1. 操作原则用于展示如何通过操作实现目的,这是理解概念的关键 1.2.2. 展示如何通过操作的组合实现概念的目的,包含一个或多个典型的使用场景 1.2.3. 操作原则并没有增加任何信息,因为你完全可以从操作规范中推理出任何使用场景 1

    软件架构设计——微服务、伪微服务及其构造

    微服务、伪微服务及其构造 1. 什么是微服务? 微服务是一种软件架构风格,它将应用程序拆分为多个小而独立的服务模块,每个服务模块专注于某个特定的业务功能。每个微服务独立部署、独立运行,通过网络(通常是 RESTful API)与其他微服务进行通信。这种架构具有高度的灵活性、可维护性和扩展性。 业务独立性:每个微服务专注于一个业务领域,独立开发、测试、部署,减少了系统的复杂性。技术多样性:每个

    redis缓存的目的、场景、实现、一致性问题

    文章目录 1、加缓存的目的(作用):2、加缓存的场景:读多写少3、加不加缓存的标准:4、缓存的实现:5、缓存的实现方案:6、缓存的粒度问题7、缓存的一致性问题 专辑详情和声音详情属于并发量较高的数据,如果每次访问都实时到数据库获取数据,数据库的访问压力太大。而这些信息一般更新的频率比较低,短时间内不会发生改变。因此,我们可以考虑在前台系统中,增加一层缓存,把这些数据缓存起来,请求到来