西安文理学院 软件体系结构大作业
院系:软件学院
专业班级:10级软件工程1班 姓名:张兴华
学号:141xxxxxxxx
1
对软件架构的认识研究报告
前言:软件架构对于每一个人的理解都是不同的,通过分类可以在包容细节差异的小基础上明确共性,达到“概念总体上的清晰”。 可以从两个角度讨论其定义:组成或决策。大家都知道,世界是由元素及其之间的关系构成的。那么软件架构,就是组成软件的一些元素(如模块、组件等)构成的一个软件骨架。而从决策角度来看,软件架构就是确定软件由哪些部分组成的软件骨架。道理差不多,只不过是视角不同而已。在本学期学习的过程中,通过老师的教学,我对软件架构有了深刻的认识。
一、软件架构的定义
1、软件架构的概念
软件架构(software architecture)是一个系统的草图,是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。软件架构描述的对象是直接构成系统的抽象组件。在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或者对象。
软件构架是一个容易理解的概念,多数工程师(尤其是经验不多的工程师)会从直觉上来认识它,但要给出精确的定义很困难。特别是,很难明确地区分设计和构架:构架属于设计的一方面,它集中于某些具体的特征。
在“软件构架简介”一书中,David GArlan 和 Mary Shaw 认为软件构架是有关如下问题的设计层次:“在计算的算法和数据结构之外,设计并确定系统整体结构成为了新的问题。结构问题包括总体组织结构和全局控制结构;通信、同步和数据访问的协议;设计元素的功能分配;物理分布;设计元素的组成;定标与性能;备选设计的选择。”
2、与软件体系结构概念的细微区别
目前,没有文献表明软件体系结构与软件架构的差别。如果你强调方法论,应使用软件体系结构。强调软件开发实践,应使用软件架构。构架不仅是结构,IEEE Working Group on Architecture 把其定义为“系统在其环境中的最高层概念”。构架还包括“符合”系统完整性、经济约束条件、审美需求和样式。它并不仅注重对内部的考虑,而且还在系统的用户环境和开发环境中对系统进行整体考虑,即同时注重对外部的考虑。在 Rational Unified ProcESs 中,软件系统的构架(在某一给定点)是指系统重要构件的组织或结构,这些重要构件通过接口与不断减小的构件与接口所组成的构件进行交互。
软件系统的架构是一个软件系统从整体到部分的最高层次的划分。其有两个要素:元件划分和设计决定。详细地说,就是要包括架构元件(Architecture Component)、联结器(Connector)、任务流(TASk-flow)。所谓架构元素,也就是组成系统的核心"砖瓦",而联结器则描述这些元件之间通讯的路径、通讯的机制、通讯的预期结果,任务流则描述系统如何使用这些元件和联结器完成某一项需求。
二、架构的目标
正如同软件本身有其要达到的目标一样,架构设计要达到的目标是什么呢?一般而言,软件架构设计要达到如下的目标:
1、可靠性(Reliable)。软件系统对于用户的商业经营和管理来说极为重要,因此软2
件系统必须非常可靠。
2、安全行(Secure)。软件系统所承担的交易的商业价值极高,系统的安全性非常重要。
3、可扩展性(SCAlable)。软件必须能够在用户的使用率、用户的数目增加很快的情况下,保持合理的性能。只有这样,才能适应用户的市场扩展得可能性。
4、可定制化(CuSTomizable)。同样的一套软件,可以根据客户群的不同和市场需求的变化进行调整。
5、可扩展性(Extensible)。在新技术出现的时候,一个软件系统应当允许导入新技术,从而对现有系统进行功能和性能的扩展
6、可维护性(MAIntainable)。软件系统的维护包括两方面,一是排除现有的错误,二是将新的软件需求反映到现有系统中去。一个易于维护的系统可以有效地降低技术支持的花费
7、客户体验(Customer Experience)。软件系统必须易于使用。
8、市场时机(Time to Market)。软件用户要面临同业竞争,软件提供商也要面临同业竞争。以最快的速度争夺市场先机非常重要。
三、将软件架构概念分派别
1.组成派: 软件系统的架构将系统描述为计算组件及组件之间的交互。 计算组件是泛指的,可以进一步细分为处理组件,数据组件,连接组件可以是子系统,框架,模块,类等不同粒度的软件单元 特征: (1.关注架构实践中的客体--软件,以软件本身为描述对象; (2.分析了软件的组成,即软件由承担不同计算任务的组件组成,这些组件通过相互交互完成更高层次的计算。
2.决策派: 软件架构包含了关于以下问题的重要决策,对关键问题进行决策: ×软件系统的组织 ×选择组成系统的结构元素和他们之间的接口,以及当这些元素相互协作时所体现的行为; ×如何组成这些元素,使他们逐渐合成为更大的子系统 *用于指导这个系统组织的架构风格,这些元素以及他们的接口,协作和组合。 软件架构并不仅仅注重软件本身的结构和行为,还组中其他特性,使用,功能性,性能,弹性,重用,可理解性,经济和技术的限制的权衡。
特征:
(1)关注架构实践中的主体--人,以人为决策为描述的对象;
(2)归纳了架构决策的类型,指出架构决策不仅包括关于软件系统的组织,元素,子系统和架构风格等几类决策,还包括非功能性决策。
总结:两个架构概念流派虽然角度不同、但却相辅相成。我们既应从“架构=组件+交互”的观点中获益,又应运用“架构=重要决策集”的实践经验,这一点对于软件业界的实践者(而不仅仅是理论研究者)尤其重要。
四、架构的种类
根据我们关注的角度不同,可以将架构分成三种:
1、逻辑架构:软件系统中元件之间的关系,比如用户界面,数据库,外部系统接口,3
商业逻辑元件,等等。
2、物理架构:软件元件是怎样放到硬件上的。
3、系统架构:系统的非功能性特征,如可扩展性、可靠性、强壮性、灵活性、性能等
五、软件架构风格
软件架构风格概述:
软件体系结构风格(有时候也叫架构模式)是描述某一特定应用领域中系统组织方式的惯用模式。体系结构风格定义一个系统家族,即一个体系结构定义一个词汇表和一组约束。词汇表中包含一些构件和连接件类型,而这组约束指出系统是如何将这些构件和连接件组合起来的。体系结构风格反映了领域中众多系统所共有的结构和语义特性,并指导如何将各个模块和子系统有效地组织成一个完整的系统。对软件体系结构风格的研究和实践促进对设计的重用,一些经过实践证实的解决方案也可以可靠地用于解决新的问题。例如,如果某人把系统描述为“客户/服务器”模式,则不必给出设计细节,我们立刻会明白系统是如何组织和工作的。
Garlan和Shaw将通用软件体系结构风格总结为以下几类:
软件架构风格:
1、数据流风格:批处理序列;管道过滤器。
2、调用返回风格:主程序子程序;面向对象风格;层次结构。
3、独立构件风格:进程通讯;事件系统。
4、虚拟机风格:解释器;基于规则的系统。
5、仓库风格:数据库系统;超文本系统;黑板系统。
几种主要的和经典的体系结构风格:
(1)C2风格。C2风格是最常用的一种软件体系结构风格,该体系结构风格可以概括为:通过连接件绑定在一起的按照一组规则运作的并行构件网络。
(2)数据抽象和面向对象风格。目前软件界已普遍转向使用面向对象系统,抽象数据类型概念对软件系统有着重要作用。这种风格的构件是对象,或者说是抽象数据类型的实例。对象是一种被称作管理者的构件,因为它负责保持资源的完整性。对象是通过函数和过程的调用来交互的。
(3)基于事件的隐式调用风格。基于事件的隐式调用风格的思想是构件不直接调用一个过程,而是触发或广播一个或多个事件。系统中的其他构件中的过程在一个或多个事件中注册,当一个事件被触发,系统自动调用在这个事件中注册的所有过程,这样,一个事件的触发就导致了另一模块中的过程的调用。
(4)管道/过滤器风格。在管道/过滤器风格的软件体系结构中,每个构件都有一组输入和输出,构件读输入的数据流,经过内部处理,然后产生输出数据流。这个过程通常通过对输入流的变换及增量计算来完成,所以在输入被完全消费之前,输出便产生了。因此,这里的构件被称为过滤器,这种风格的连接件就象是数据流传输的管道,将一个过滤器的输出传到另一过滤器的输入。
4
(5)批处理风格。批处理风格的每一步处理都是独立的,并且每一步是顺序执行的,只有当前一步处理完后,后一步处理才能开始,数据传送在步与步之间作为一个整体。批处理的典型应用是经典数据处理和程序开发。
(6)仓库风格。在仓库风格中,有两种不同的构件:中央数据结构说明当前状态,独立构件在中央数据存贮上执行,仓库与外构件间的相互作用在系统中会有大的变化。
六、软件体系结构的应用现状
1、形成研究热点,仍处于非形式化水平
自20世纪90年代后期以来,软件体系结构的研究成为一个热点。广大软件工作者已经认识到软件体系结构研究的重大意义和它对软件系统设计开发的重要性,开展了很多研究和实践工作。
从软件体系结构研究的现状来看,当前的研究和对软件体系结构的描述,在很大程度上来说还停留在非形式化的基础上。软件构架师仍然缺乏必要的工具,这种工具应该是显式描述的、有独立性的形式化工具。
在目前通用的软件开发方法中,其描述通常是用非形式化的图和文本,不能描述系统期望的存在于构件之间的接口,不能描述不同的组成系统的组合关系的意义。难以被开发人员理解,更不能用来分析其一致性和完整性等特性。
当一个软件系统中的构件之间几乎以一种非形式化的方法描述时,系统的重用性也会受到影响,在设计一个系统结构过程中的努力很难移植到另一个系统中去。对系统构件和连接关系的结构化假设没有得到显式的、形式化的描述时,把这样的系统构件移植到另一个系统中去将是有风险的,甚至是不可能的。
2、软件体系结构的形式化方法研究
软件体系结构研究如果仅仅停留在非形式化的框图阶段,已经难以适应进一步发展的需要。为支持基于体系结构的开发,需要有形式化建模符号、体系结构说明的分析与开发工具。从软件体系结构研究的现状来看,在这一领域近来已经有不少进展,其中比较有代表性的是美国卡耐基梅隆大学(Carnegie Mellon University)的Robert J.A11en于l997年提出的Wright系统。Wright是-种结构描述语言,该语言基于一种形式化的、抽象的系统模型,为描述和分析软件体系结构和结构化方法提供了一种实用的工具。Wright主要侧重于描述系统的软件构件和连接的结构、配置和方法。它使用显式的、独立的连接模型来作为交互的方式,这使得该系统可以用逻辑谓词符号系统,而不依赖特定的系统实例来描述系统的抽象行为。该系统还可以通过一组静态检查来判断系统结构规格说明的一致性和完整性。从这些特性的分析来说,Wright系统的确适用于对大型系统的描述和分析。
3、软件体系结构的建模研究
研究软件体系结构的首要问题是如何表示软件体系结构,即如何对软件体系结构建模。根据建模的侧重点的不同,可以将软件体系结构的模型分为5种:结构模型、框架模型、动态模型、过程模型和功能模型。在这5个模型中,最常用的是结构模型和动态模型。
(1)结构模型
5
这是一个最直观、最普遍的建模方法。这种方法以体系结构的构件、连接件和其他概念来刻画结构,并力图通过结构来反映系统的重要语义内容,包括系统的配置、约束、隐含的假设条件、风格、性质。研究结构模型的核心是体系结构描述语言。
(2)框架模型
框架模型与结构模型类似,但它不太侧重描述结构的细节而更侧重于整体的结构。框架模型主要以一些特殊的问题为目标建立只针对和适应该问题的结构。
(3)动态模型
动态模型是对结构或框架模型的补充,研究系统的"大颗粒"的行为性质。例如,描述系统的重新配置或演化。动态可能指系统总体结构的配置、建立或拆除通信通道或计算的过程。这类系统常是激励型的。
(4)过程模型
过程模型研究构造系统的步骤和过程。因而结构是遵循某些过程脚本的结果。
(5)功能模型
该模型认为体系结构是由一组功能构件按层次组成,下层向上层提供服务。它可以看作是一种特殊的框架模型。
这5种模型各有所长,也许将5种模型有机地统一在一起,形成一个完整的模型来刻画软件体系结构更合适。
4、发展基于体系结构的软件开发模型
软件开发模型是跨越整个软件生存周期的系统开发、运行、维护所实施的全部工作和任务的结构框架,给出了软件开发活动各阶段之间的关系。目前,常见的软件开发模型大致可分为三种类型:
(1)以软件需求完全确定为前提的瀑布模型。
(2)在软件开发初始阶段只能提供基本需求时采用的渐进式开发模型,如螺旋模型等。
(3)以形式化开发方法为基础的变换模型。
所有开发方法都是要解决需求与实现之间的差距。但是,这三种类型的软件开发模型都存在这样或那样的缺陷,不能很好地支持基于软件体系结构的开发过程。因此,研究人员在发展基于体系结构的软件开发模型方面做了一定的工作。
5、软件产品线体系结构的研究
软件体系结构的开发是大型软件系统开发的关键环节。体系结构在软件生产线的开发中具有至关重要的作用,在这种开发生产中,基于同一个软件体系结构,可以创建具有不同功能的多个系统。在软件产品族之间共享体系结构和一组可重用的构件,可以增加软件工程和降低开发和维护成本。
一个产品线代表着一组具有公共的系统需求集的软件系统,它们都是根据基本的用户需求对标准的产品线构架进行定制,将可重用构件与系统独有的部分集成而得到的。采用6
软件生产线式模式进行软件生产,将产生巨型编程企业。但目前生产的软件产品族大部分是处于同一领域的。
七、对软件架构的一些思考
(一)、安全可靠,我觉得可以从几个层面上去把握
1.1、网络布局的层面 ,一些安全机制薄弱的应该置于内网 ,边界位置的严格验证,防火墙等。
1.2、通信层面,对安全要求较高的数据传输要使用证书加密。
1.3、应用层面,严格对数据来源过滤和检查,对不可信数据拦截
1.4、数据库层面,敏感数据的储存方式需要高强度加密(比如SHA512+适当的Salt)。(不要让类似CSDN密码泄露事件发生在我设计的架构上)
1.5、OS层面,自动化的系统补丁安装,杀毒防御程序之类自动更新。
1.6、维护层面,维护人员的责任制
(二)、高可收缩性
架构图上画一个集群,不一定部署一个真的集群,集群多大?最小一台,最大可以扩展到IP端能容纳的数据量 , 如果多级负载加上集群就可以实现海量的集群就可以叫着“云”!
首先DNS 负载均衡 ,网站A记录可以指向多个Data Center , 最小可以只有一个。ningx集群 、 web集群 、 分布式缓存集群 和 数据库集群都可以很方便的进行收缩。
(三)、易维护
主要是架构本身具备的容灾能力,然后有自动监控的平台,紧急情况通过Email或者短信通知维护人员进行相应的处理。
偌大一个web集群,维护成本是很高的。降低维护成本就需要同组件去完成,web集群或者图片集群之间的内容同步 , 数据库和缓存的集群一般都已经有成熟解决办法,不是很费事。
7
第二篇:认识知识架构
大学我们应该做些什么?
--认识知识架构
大学我们应该做些什么?第一个想到的是:我们是来学习的,这个完全没有错误,大学就是应该来学习知识的。很多人会认为那就应该好好的上课,好好的做作业,这个我就不是完全的认同。
大学我们应该学习什么知识?
首先对于我们大学的知识架构进行分解:
1、巩固我们12年学到的基础知识和基本常识。(30%)
现在如果我问几个问题,可能没有多少人可以答的出来。尼罗河有多长?亚马逊平原垮了多少个国家?法国大革命什么时候发生?化学元素第80号是那个元素?牛顿3大定律是什么?中国的古诗与词赋还可以背多少首?由大一到大四,我们慢慢的把我们12年学的东西慢慢的忘记,到了大四的时候,不但大学没有学到什么东西,12年学到的知识也基本忘记了,这是多么的可悲,所以上大学首先要学的知识就是巩固我们12年学的知识,可以通过看书,通过网络,可以通过做家教,好好的温习我们12年的知识。
2、课堂上老师给与我们的知识。(10%)
大学我们会上课,但是上课与以前不一样,第一作业非常的少,第二老师基本不会怎么管你。第三学习的知识比较老。现在有些专业的书籍还是用82年出版的。在这个信息时代的世界,知识的更新是非常高速的,电脑硬件1年换一代,手机,以及很多很多方面的科学研究都是非常高速的更新着,但是由于部分大学的老师没有跟上时代的步伐,由于学校的某些体系也没有跟上时代的步伐,所以我们成为牺牲品,例如我们学习C语言,而现在的软件大部分都是用JAVA,.NET编成等等,由于大学的很多不完善,扩招导致师资力量跟不上,很多学校的老师不合格,所以对课堂不负责,对于学生不负责,对于教授的东西也只是从书本上搬过来,没有让学生更好的理解。另外在学校我们不是每天都全部的课,一个学年大约就只有500左右个课时,比起高中的上课密度还不够上3个月时间的课时多。总结上面所说的,大学老师,大学课堂给与你的只有10%,加上你逃课,睡觉,大学课堂上你所掌握的知识大约只有6-7%。对于你的成功微乎其微的作用。
3、优势方面自学知识。(20%)
优势方面的自学,大学是一个严重需要自学能力的场所。除了在课堂上学习外,如果你想比别人优秀,如果你想在一个领域可以有突破性,想在一个方面独树一帜,想了解这个领域的最前沿的知识与研究,你就必须自学。自学有两个方面,一个方面是自己看书,另外一个方面就是选择一些选修课,或者参加一些校内外培训,考取证书等。我是学环境科学的,但是我大学期间读了超过50本关于公关和管理的书籍,并且选修了不少这个方面的课程,在环境科学也许我不是最好的,但是在公关方面的知识,在大学里,我算是比较了解的,也有深入的研究。为了获得公关知识的最前沿知识,我会上网了解每年的10大公关危机,了解大部分的公关案例,分析自己身边的公关案例并且参与其中,如03年的非典给香雪制药带来了巨大的公关收益,神5升天与蒙牛事件营销的巨大成功,以及05年超级女生事件等等。在自学一定要配套自己的优势,如果你对专业很有兴趣,你就应该深入研究你的专业知识,以及定购专业方面的年报,学习最前沿的资讯。如果你不喜欢你的专业,自学的时候就必须付出更多,学习更多你想学的东西,我到现在这么忙,还保持一个好习惯,每个月至少看两
本书,而且自己买,在书上做笔记。(可恨的,很多人借书不还)。但是如果对自己的专业非常有兴趣,我是对自己的专业没有太大的兴趣,未来也不打算从事相关的工作,如果各位以后想从事专业相关的工作,自学主要就是针对专业方面的知识来学习,订专业的年报,上专业相关的网站。
自学到一定程度可以去考取很多各个方面的证书,人力资源的,培训策划的,会计的等等,都可以去考。这个是证明你在这个方面能力的最佳证明。
4、博学多闻(20%)
在大学里面,我们需要广泛的摄取知识,课堂上的知识,书本上的知识远远的不够,天文,地理,经济,人文,政治我们都需要知道的。建议大家看看中国古代史的书记,看看《世界上下五千年》,《十万个为什么》等等书籍,订阅报纸,我在大学里面看了2年以上的参考消息,了解世界动态,了解经济科技,回顾历史等等。如果你觉得看书沉闷的话,可以看《探索》,《美国国家地理杂志》,甚至一些资讯台的教育片,都可以丰富大家的知识,我们都是文盲,因为这个世界上我们要知道的东西实在太多了,我们只能尽自己最大的能力去学习。在这个方面,如果你还觉得沉闷,我们可以通过玩游戏来增加知识,我记得我玩过几个游戏,虽然比较旧,但是真的学到了很多,例如大航海时代2,让我记住了世界200多个城市,航空霸业让我再次记住了200多个城市。大航海时代二还让我记住了欧洲十六,十七世纪的人文,地理以及历史。现在我再玩罗马之全面战争,这个游戏也让我了解到了欧洲非洲的古代史,以及大量的名言和历史战役,故事等等。除此之外,我还广泛的阅读了中国古代的很多文学著作的解析版本,《中庸》,《论语》,《道德经》,《孙子兵法》,《东周列国志》,《史记》等等,除了在公关方面,也在中国古代文化方面有一定的了解。
5、其他知识(也可以说常识) 20%
告诫各位,不要把无知当可爱。女孩子,应该懂得厨房。就是女孩子应该懂得做一些家庭小菜的知识,我不奢求现在的女生可以像妈妈一样做出很多让我们满意的菜肴,我只是希望她们不要在一个人住的时候饿死。女孩子,是不是应该懂得一些化妆的知识,化妆是女生的基本常识。女孩子,是不是应该懂得一些生理健康的知识,懂得一些性知识,都是很必要的。对于男生,是不是应该懂得世界杯,冠军杯,足球联赛。是不是应该懂得NBA,是不是应该懂得WAR3与CS,都应该了解这个方面的知识,如果你不了解这些,在男生中除了女人,就没有共同话题。另外还有一些生存的基本常识,生活的基本常识,急救的基本常识,举例几个笑话:一男一女来听格兰仕人力资源总监的讲座,男的问道:格兰仕是不是做鸡精的,女的说不是,是做燕窝的。格兰仕是出名的生产和销售空调以及电器的企业,他们老总听了会想哭。现在大学生的基本常识的无知程度,真的可以说是文盲。
大学的知识=30%基础知识+10%课堂知识+20%自学知识+20%博学知识+20%其他知识=100%这些就是大学的知识架构。
大学应该如何学习?
首先介绍2个老师给大家:一个叫GOOGLE,另一个叫BAIDU。任何的问题,网络上可以解决60%。很简单,如果你不了解我郭丹锐,你上网输入我的名字一查就有好多的我信息,科技信息网络发达的今天,知识大部分在网络上可以找到。
其次,翻版造就中国一类人才,由于翻版的猖獗(大学生穷),我们可以学习到很多高端的培训或者课程,例如余世维的企业培训,一天6800元,网络下载来看2元。山东省的名家
论坛,多么精彩,下载来看,又是10元内解决,还有什么《探索》,《国家地理杂志》等等都可以下载来看,还有电子书,还有企业培训课件,还有MP3等等,多个方面的渠道可以获得大量的珍贵知识,只要你肯学,知识多的是。(翻版这个方面,等我有钱一定买正版,而且还要收藏)
再次、介绍一个学习的场所,图书馆。大学的图书馆,虽然不是非常的好,藏书也不是非常的丰富,但是也是我们学习知识的好地方,尤其是家庭环境不够好的同学,可以节省一大部分买书的钱,图书馆借书是没有问题的。所以一定要泡图书馆,但是千万不要指望可以在图书馆遇到爱情,几率太少了,一般PLMM都不去图书馆。
最后、介绍一种最快学习的方法,就是向成功的人学习,他们会把他们辛辛苦苦积累的学习经验与精华分享给我们,向别人是学习效率最高的一种模式。请珍惜每一次可以和成功人一起交流的机会,相信你可以从他们身上学到很多的东西。
学习知识一个方面为了增加自己的能力与对社会的了解。另一方面渊博的知识可以给我们带来了良好的人际关系,因为你有和别人交谈更加多的主题。
作为一个爱学习的大学生,不应该只局限于书本和课堂,而是全方位的定位自己,然后深入的学习,自学,博学,实践中学习。
关于逃课和说谎!有这么一个故事,一个妈妈告诉儿子,儿子你不可以说谎!结果到了儿子18岁要上大学的时候,妈妈却非常的担心,儿子18岁了,还不会说谎,怎么办啊?真的好好考虑一下,如果你的儿子18岁了还不会说谎,你不是应该担心吗?
同样的道理,如果一个有自己价值观的人在现在的大学体制下还不会选择性的逃课,那么和一个不会说谎的人一样,无法适应这个社会。中国人精明之处在于,知道如何奸诈不随便使用奸诈就是忠臣,不知道奸诈的只能是傻子,不可能成为有用之人。女生也一样,懂得抚媚而不滥用抚媚是淑女,不懂得抚媚得就是村姑,滥用抚媚的是妓女。
祝愿各位大学毕业不要做文盲。