您的位置:首页 > 运维架构 > 网站架构

(转载)软件架构技术的发展历程总结及思考(骆金松)

2011-08-14 17:16 761 查看

1 软件架构技术产生的背景

1.1 软件危机的出现

20 世纪60年代以前,计算机刚刚投入实际使用,软件设计往往只是为了一个特定的应用而在指定的计算机上设计和编制,采用密切依赖于计算机的机器代码或汇编语言,软件的规模比较小,文档资料通常也不存在,很少使用系统化的开发方法,设计软件往往等同于编制程序,基本上是个人设计、个人使用、个人操作、自给自足的私人化的软件生产方式

20 世纪60年代中期,大容量、高速度计算机的出现,使计算机的应用范围迅速扩大,软件开发急剧增长。高级语言开始出现;操作系统的发展引起了计算机应用方式的变化;大量数据处理导致第一代数据库管理系统的诞生。软件系统的规模越来越大,复杂程度越来越高,软件可靠性问题也越来越突出。原来的个人设计、个人使用的方式不再能满足要求,迫切需要改变软件生产方式,提高软件生产率,软件危机(Software
Crisis)开始爆发。

早期出现的软件危机主要表现在:

① 软件开发费用和进度失控。费用超支、进度拖延的情况屡屡发生。有时为了赶进度或压成本不得不采取一些权宜之计,这样又往往严重损害了软件产品的质量。

②软件的可靠性差。尽管耗费了大量的人力物力,而系统的正确性却越来越难以保证,出错率大大增加,由于软件错误而造成的损失十分惊人。

③生产出来的软件难以维护。很多程序缺乏相应的文档资料,程序中的错误难以定位,难以改正,有时改正了已有的错误又引入新的错误。随着软件的社会拥有量越来越大,维护占用了大量人力、物力和财力。

1.2 软件工程的兴起

1968 年北大西洋公约组织的计算机科学家在联邦德国召开国际会议,第一次讨论软件危机问题,并正式提出“软件工程(Software Engineering)”一词,从此一门新兴的工程学科——软件工程学——为研究和克服软件危机应运而生。软件工程诞生于60年代末期,作为一个新兴的工程学科,主要研究软件生产的客观规律性,建立与系统化软件生产有关的概念、原则、方法、技术和工具,指导和支持软件系统的生产活动,以期达到降低软件生产成本、改进软件产品质量、提高软件生产率水平的目标。软件工程学从硬件工程和其他人类工程中吸收了许多成功的经验,明确提出了软件生命周期的模型,发展了许多软件开发与维护阶段适用的技术和方法,并应用于软件工程实践,取得良好的效果。

1.3 结构化设计技术

作为软件工程重要的组成部分,结构化设计方法得到了极大的发展。软件模块化技术是软件架构技术中最早讨论的技术之一,模块化是指解决一个复杂问题时自顶向下逐层把软件系统划分成若干模块的过程。每个模块完成一个特定的子功能,所有的模块按某种方法组装起来,成为一个整体,完成整个系统所要求的功能。当时提出了“信息隐藏”、“提高内聚”、“减少耦合”、“提高开放性”等架构设计原则成为至今开发复杂系统所采用的基本架构技术,可以说结构化设计技术是软件架构技术的起源。

2 软件架构技术的发展

2.1 面向对象的编程

“面向对象的编程(Object-Oriented Programming)”起源于挪威人Kristen Nygard于1962年发明的Simula语言,美国人Alan Kay于1970年发明了SmaUTalk语言,并首次使用OOP术语。为了使得开发更加真实的反映现实世界,人们开发了更多面向对象的语言,包括C++、Smalltalk、Ada 95等。面向对象编程语言使得在模块化设计的基础之上,实现了面向过程的编程过渡到面向对象的编程,同时架构技术也得到了巨大的发展。基于面向对象的设计语言,人们提出了面向对象的需求分析、面向对象的设计、面向对象的编程、面向对象的测试等技术,采用面向对象的技术,为了编写出高质量的代码,人们提出了面向对象的设计模式(Design
pattern)的概念,使得人们可以采用面向对象的编程技术编写出更加优雅,支持规模更大、结构更复杂、更加容易维护和扩展的代码。

在中小规模的软件中,对象和对象之间的协作关系就能够满足需要。但是当软件规模扩大,复杂度上升的时候,面向对象技术强调的协作却表现出另一个极端的特点-耦合度太高导致的复杂度。这时候就需要有一种新的方法来弥补面向对象技术的弱点。大规模软件主要特点是复杂度,比较典型的例子是集成性的项目,软件系统需要将各种各样的硬件、遗留系统、外部接口整合起来,其间可能遇到不同的硬件接口,不同的操作系统,不同的语言,不同的平台,不同的数据库,不同的消息中间件,不同的网络介质,这些都使得系统变得非常的复杂。面向对象的编程在复杂度上升时,由于对象的粒度太小,难以驾驭系统的复杂性,所以急需一种更粗粒度的面向模块的组件技术。

2.2 面向组件的编程

面向组件编程(Component Oriented Programming,COP),是对面向对象的编程的补充,帮助实现更加优秀的软件结构。与面向对象的编程不同,组件的粒度可大可小,需要取决于具体的应用。在COP中有几个重要的概念:服务,服务(Service)是一组接口,供客户端程序使用。例如,验证和授权服务,任务调度服务。服务是系统中各个部件相互调用的接口;组件,组件(Component)实现了一组服务,此外,组件必须符合容器订立的规范,例如,初始化,配置、销毁。COP是对一种组织代码的思路,尤其是服务和组件这两个概念。Spring框架中,就采用了COP的思路,将系统看作一个个的组件,通过定义组件之间的协作关系(通过服务)来完成系统的构建。这样做的好处是能够隔离变化,合理的划分系统。而框架的意义就在于定义一个组织组件的方式。

Microsoft公司的Windows操作系统早期提出的动态链接库(Dynamic Link Library,DLL)技术是面向组件编程的一种思想。DLL 是一个包含可由多个程序同时使用的代码和数据的库。这有助于促进代码重用和内存的有效使用。由于Microsoft最初在设计Windows时没有估计到DLL的如此被广泛采用,由于大量使用DLL导致的收索路径问题以及版本冲突问题,出现了臭名昭著的DLL地狱(DLL Hell)问题。1993年Microsoft提出的COM(Component
Object Model)架构,是一个组件化的技术开发架构,它源自于Microsoft早期的对象链接与嵌入技术(OLE)。COM解决了DLL地狱问题,是面向组件开发思想的进一步发展。COM提供跟编程语言无关的方法制作软件模块,因此可以在其他环境中执行。COM并要求某个组件必须遵照一个共同的接口,该接口与组件的实现无关,因此可以隐藏实现的细节,并且被其他组件在不知道其内部细节的情形下正确的使用。

2.3 企业级系统框架

在1993年Microsoft引入COM之后,Sun公司于1995年推出了Java平台。Java平台由一套应用开发语言(Java)、API和Java虚拟机(JVM)构成,JVM允许用Java编写的程序运行在不同的操作系统上。事实上,Sun引入Java的初衷是使得程序员能够开发可移植的应用程序,而不关心硬件和操作系统。在1999年末,Sun提出了Java平台企业版(J2EE---Java to Enterprise Edition),该规范被应用在主要的IT提供商以构建稳健的应用系统框架,如IBM、Oracle和BEA等。J2EE是一套全然不同于传统应用开发的技术架构,包含许多组件,主要可简化且规范应用系统的开发与部署,进而提高可移植性、安全与再用价值。

J2EE核心是一组技术规范与指南,其中所包含的各类组件、服务架构及技术层次,均有共通的标准及规格,让各种依循J2EE架构的不同平台之间,存在良好的兼容性,解决过去企业后端使用的信息产品彼此之间无法兼容,导致企业内部或外部难以互通的窘境。其最终目的就是成为一个能够使企业开发者大幅缩短投放市场时间的体系结构。2003年Sun公司发布了J2EE 1.4版,除了增强更加稳固的企业级应用之外,还增加了Web Services支持。Sun把这个最为流行的版本称为Java EE。J2EE 带动了Java在企业级的发展,但随着一些轻量级组件的出现,J2EE的臃肿和开发难度高的缺点越来越引起了许多人的注意,EJB2.0也被许多人称为累赘。随着Spring,Hibernate的不断完善和发展,EJB3.0出现了,成为了未来Java
企业级开发的新的方向。

2000年,为了应对来自Internet和J2EE的威胁,Microsoft提出了.NET战略,2001年发布了Visual Studio.NET开发平台,到现在已陆续发布了2003、2005、2008四个版本。2002年Microsoft全面的用.Net从逻辑层上置换了COM,作为新的软件开发框架(COM仍然被支持)。.Net技术的全面推进,统一了Microsoft的不同技术理念和平台。作为一个战略品牌,.Net为Web Service提供了原生的解决方案,并且成为提升不同应用和系统之间互操作性的标准。目前已经有许多企业级的应用系统采用VS.net开发,比如用友公司代号为U9的ERP系统。J2EE得到了大部分供应商的支持,包括Sun,IBM等,所以J2EE的最大灵活性和可移植性不用置疑。另一方面,.Net平台被Microsoft独家全面支持,因此有着更为一致性的行为方式和可预见性。

2.4 面向服务的架构

对象管理组织(Object Management Group,OMG)于1991提出了公共对象请求代理体系结构(Common Object Request Broker Architecture, CORBA),其核心是一套标准的语言、接口和协议,以支持异构分布应用程序间的互操作性及独立于平台和编程语言的对象重用。

SOA是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。不同种类的操作系统,应用软件,系统软件和应用基础结构相互交织,这便是IT企业的现状。一些现存的应用程序被用来处理当前的业务流程,因此从头建立一个新的基础环境是不可能的。企业应该能对业务的变化做出快速的反应,利用对现有的应用程序和应用基础结构的投资来解决新的业务需求,为客户,商业伙伴以及供应商提供新的互动渠道,并呈现一个可以支持有机业务的构架。SOA凭借其松耦合的特性,使得企业可以按照模块化的方式来添加新服务或更新现有服务,以解决新的业务需要,提供选择从而可以通过不同的渠道提供服务,并可以把企业现有的或已有的应用作为服务,从而保护了现有的IT基础建设投资。

可是由于CORBA体系的复杂度过高,一直没有得到普遍的应用。1996年,Gartner Group就提出了面向服务的架构(Service-Oriented Architecture,SOA)的预言。近年来,在ORACLE、BEA、IBM、Microsoft等软件巨头的极力推动下,Web service产品日益流行, SOA才得以慢慢风行起来。

2.5 云计算

云计算(cloud computing)是指IT基础设施的交付和使用模式,指通过网络以按需、易扩展的方式获得所需的资源(硬件、平台、软件)。提供资源的网络被称为“云”。“云”中的资源在使用者看来是可以无限扩展的,并且可以随时获取,按需使用,随时扩展,按使用付费。Amazon、Google、IBM、微软和Yahoo等大公司是云计算的先行者。云计算领域的众多成功公司还包括Salesforce、Facebook、Youtube、Myspace等。

Amazon把云计算做成一个大生意不到两年时间,Amazon上的注册开发人员就达44万人,还有为数众多的企业级用户。有第三方统计机构提供的数据显示,Amazon与云计算相关的业务收入已达1亿美元。云计算是Amazon增长最快的业务之一。Google当数最大的云计算的使用者。Google搜索引擎就建立在分布在200多个地点、超过100万台服务器的支撑之上,这些设施的数量正在迅猛增长。Google地球、地图、Gmail、Docs等也同样使用了这些基础设施。目前,Google已经允许第三方在Google的云计算中通过Google
App Engine运行大型并行应用程序。IBM在2007年11月推出了“改变游戏规则”的“蓝云”计算平台,为客户带来即买即用的云计算平台。它包括一系列的自动化、自我管理和自我修复的虚拟化云计算软件,使来自全球的应用可以访问分布式的大型服务器池。使得数据中心在类似于互联网的环境下运行计算。2008年8月, IBM宣布将投资约4亿美元用于其设在北卡罗来纳州和日本东京的云计算数据中心改造。IBM计划在2009年在10个国家投资3亿美元建13个云计算中心。Microsoft紧跟云计算步伐,于2008年10月推出了Windows
Azure操作系统。Azure是继Windows取代DOS之后,Microsoft的又一次颠覆性转型——通过在互联网架构上打造新云计算平台,让Windows真正由PC延伸到Azure上。Microsoft拥有全世界数以亿计的Windows用户桌面和浏览器,现在它将它们连接到Azure上。Azure的底层是Microsoft全球基础服务系统,由遍布全球的第四代数据中心构成。

在我国,云计算发展也非常迅猛。2008年5月10日,IBM在中国无锡太湖新城科教产业园建立的中国第一个云计算中心投入运营。2008年6月24日,IBM在北京IBM中国创新中心成立了第二家中国的云计算中心——IBM大中华区云计算中心;2008年11月28日,广东电子工业研究院与东莞松山湖科技产业园管委会签约,广东电子工业研究院将在东莞松山湖投资2亿元建立云计算平台;2008年12月30日,阿里巴巴集团旗下子公司阿里软件与江苏省南京市政府正式签订了2009年战略合作框架协议,计划于2009年初在南京建立国内首个“电子商务云计算中心”,首期投资额将达上亿元人民币;世纪互联推出了CloudEx产品线,包括完整的互联网主机服务"CloudEx
Computing Service", 基于在线存储虚拟化的"CloudEx Storage Service",供个人及企业进行互联网云端备份的数据保全服务等等系列互联网云计算服务;中国移动研究院做云计算的探索起步较早,已经完成了云计算中心试验。中移动董事长兼CEO王建宙认为云计算和互联网的移动化是未来发展方向。

我国企业创造的“云安全”概念,在国际云计算领域独树一帜。云安全通过网状的大量客户端对网络中软件行为的异常监测,获取互联网中木马、恶意程序的最新信息,推送到服务端进行自动分析和处理,再把病毒和木马的解决方案分发到每一个客户端。云安全的发展像一阵风,瑞星、趋势、卡巴斯基、MCAFEE、SYMANTEC、江民科技、PANDA、金山、360安全卫士、卡卡上网安全助手等都推出了云安全解决方案。瑞星基于云安全策略开发的2009新品,每天拦截数百万次木马攻击,其中1月8日更是达到了765万余次。势科技云安全已经在全球建立了5大数据中心,几万部在线服务器。据悉,云安全可以支持平均每天55亿条点击查询,每天收集分析2.5亿个样本,资料库第一次命中率就可以达到99%。借助云安全,趋势科技现在每天阻断的病毒感染最高达1000万次。

3 软件架构技术的发展前景

3.1 第三代移动通信技术进入移动商务应用

2000年5月,国际电信联盟正式公布第三代移动通信标准,我国提交的TD-SCDMA正式成为国际标准,与欧洲WCDMA、美国CDMA2000成为3G时代最主流的三大技术之一。2009年初中国3G牌照正式发放,中国移动通信迈入全新的3G(3rd-generation)时代。3G的亮点在于移动数据和增值业务,将使通信产业链发生深刻的变化。随着3G网络的运营,运营商将系统化地推广3G差异型及特色业务的发展,符合市场发展及消费需求的业务会进入快速发展期。根据中国互联网络信息中心(CNNIC)统计,截至2009年3月底,全国目前有6.7亿移动用户,而网民数量为3.16亿。手机新闻、手机博客、手机收发邮件等一系列移动互联网的新发展得到普及,既拥有手机又有上网习惯的用户,这两个人群的交集将成为移动互联市场的用户基础。如此大规模的潜在用户群无疑是未来移动互联市场发展的广阔空间。赛迪顾问预测,2011年3G手机销售量将达到1.16亿部,3G业务规模将超过1400亿元人民币。

3G行业应用的发展总趋势为信息技术与通信技术的融合。个人信息化已经有很大发展,随着电子政务、电子商务的持续发展,部门级、企业级信息化走上轨道,并最终实现个人与行业信息化的对接,从而打造一个全流程的信息化,最终构成行业的核心竞争力,为个人也提供更好的服务。3G突破移动带宽的限制后,用户的使用习惯将使得行业解决方案从固定网络向移动网络逐步迁移,同时固网与移动网络也将在行业领域中融合,创建更良好的技术创新环境。广泛的行业应用将使得政府、企业以及个人紧密地连接到一起,提升政府与企业的效益,方便个人的生活。

3G行业应用面临的全新、复杂的技术应用环境。第一,3G网络环境更为复杂,业务种类的繁多使得网元种类更为繁多,如IPTV、LBS等多种业务使得相应的网元结构出现;第二,增值业务平台应用更为综合、智能、开放,大大简化业务开发的难度,加快应用推向市场的速度,不必为应用实现中的每个细节分别寻找合作伙伴;第三,业务种类繁多推动终端的功能应用也将趋于多元化,定制化和智能化成为趋势;第四,终端与其他技术如GPS、信用卡、二维条码和RFID等之间的融合,也是3G时期业务种类繁多、业务趋于融合的硬件技术表现。

除了个人应用之外,移动商务的应用需求越来越迫切,让企业通过移动互联网实现企业与用户之间的信息互动,并由此开展深层次、全方位应用是今天企业的最大需求。许多过去的传统电子商务公司和互联网公司在移动领域都开始进行了精心的布局。百度最近收购电讯网,阿里巴巴入资UCWEB,这些动作实际上预示着传统电子商务公司在移动互联网上已经开始布局了。伴随工业和信息化部的成立,“3G中国”的启动成为下一步“以信息化带动工业化”的重要举措。

3.2 面向服务架构是发展的大趋势

IBM 将面向服务的体系结构视为它的按需(On demand)业务前景的互操作性和灵活性的关键。面向服务的体系结构(SOA)支持跨企业和业务合作伙伴之间的端到端集成。这就提供了一种灵活的业务流程模型,使得客户可以迅速地响应新的顾客需求、新的业务机会以及竞争的威胁。Gartner在2006年就预测,从2006年到2011年,全球的SOA、Web服务和Web 2.0软件市场将由410亿美元增长到1,420亿美元。到2011年,全球基础设施市场中将有63%的企业支持SOA、Web服务,且花费在软件上的资金将有60%是用于SOA、Web服务上。

SOA描绘了一个美妙的未来,也是拥有一定的现实基础,SOA与现今流行的Web服务紧密联系在一起。Web服务是一项已成熟的技术,其规范包括WSDL、SOAP、UDDI。Web服务由WSDL描述,通过UDDI发现,并通过SOAP去访问。Web服务提供了成熟的技术,而SOA则提供了应用这种技术的框架,是一个非常好的思路,因此得到了软件业界普遍的认可。近几年,SOA市场得到了迅猛的发展。对于大多数中国企业来说,SOA已经是耳熟能详,多数中国企业已经意识到部署SOA的作用和价值,并且对SOA的发展前景抱有信心。在发展SOA的过程中,中国和国外信息化发达国家(美国等)有着不同的发展机遇和条件。大多数美国企业已经具备完善的应用系统,SOA的实施需要对已有系统中的功能进行提取和包装,形成标准的服务,而非用高成本的标准方法全新构造服务。而在中国企业,IT建设正由生产系统转向营销服务系统,因此大量的服务需要全新构造才是中国SOA的主要任务。

中国的SOA软件是面向企业用户的消费,因此软件是否是适合企业的,十分重要。以企业为中心,进行长期有效的运营,是SOA提供商的经营特点,同时,中国的企业数量极多,但是软件建设水平还相当有限,因而市场具有非常大的潜力。预计未来几年中国将成为世界上最大的软件市场之一,SOA销售额迅速攀升,2020年将成为世界最大的软件消费市场。面对巨大的市场蛋糕,国际著名的软件公司已作好抢占中国SOA市场准备,纷纷加大研发力度,加速其在华布局。中国本土软件企业也十分希望能够在市场上占领一席之地。

3.3 云计算在个人及中小企业市场大力发展

2008年,虽然各大企业都面临金融危机的困扰,但这丝毫没有减弱云计算这一领域的发展速度。云计算肯定是软件发展的一个趋势,目前国家IT巨头,例如Google、微软、IBM、亚马逊都把云计算作为争夺未来制高点的重要战略。云计算的前景在中国市场具有巨大的发展潜力,越来越多的IT供应商将中国作为云计算业务发展的热点区域。根据新CIO时代的调查,高达58%的CIO表示云计算是未来的发展趋势,只是目前仍然不成熟,29%的CIO表示云计算将彻底改变IT技术的现状,8%表示云计算虽然好但不适合企业。CIO普遍对云计算发展前景的乐观态度,看好它的发展趋势。

云计算在个人应用领域已经得到了十分广泛的应用,今后会有越来越多的软件成为互联网上的服务,用户需要在个人计算机上安装的软件则越来越少。今后操作系统与浏览器的界线会越来越模糊,操作系统会变得越来越弱,而浏览器会变得越来越强,浏览器将成为很多程序的启动入口。当你启动电脑,它可能会更像是一部电视机。首先你不必像现在这样等待一分的时间,让它管理内存和启动一大批程序。相反,它的界面会立即显示出来,并且这个界面就是一个浏览器。当然也有可能是操作系统,但这将是一个非常简单的操作系统,负责解析你的浏览器,帮你解决一些硬件问题,比如连上网络、接上硬盘、打开无线功能、点亮键盘灯,做完这些事情后,其他的事情就交给浏览器了。

云计算在商用领域应该首先应用于中小型企业。那种动辄数百万美元的IT设备所带来的生产力对中小企业而言是沉重的负担,而如今,云计算为它们送来了大企业级的技术,并且先期成本极低,升级也很方便。随着云计算相关技术的成熟,越来越多的大型系统运行在云计算平台上,几十年后,也许大多数企业级的系统都是运行在云计算平台之上的。这一新兴趋势的重要性毋庸置疑,不过,它还仅仅是一系列变革的起步阶段而已。云计算不但抹平了企业规模所导致的优劣差距,而且极有可能让优劣之势易主。简单地说,当今世上最强大最具革新意义的技术已不再为大型企业所独有。云计算让每个普通人都能以极低的成本接触到顶尖的IT技术。


4 蕴含的哲理

4.1 软件架构技术的发展的推动力是满足日益增长的复杂性

简单性一向是现代自然科学、特别是物理学的一条指导原则。许多科学家相信自然界的基本规律是简单的。爱因斯坦曾是这种观点的突出代表者。虽然复杂现象比比皆是,人们还是努力要把它们还原成更简单的组分或过程。事实上不少复杂的事物或现象,其背后确实存在简单的规律或过程。应当学会比较和刻画来自简单机理的复杂性,否则很难期望会正确分析那些机理不明的复杂事物或现象。

某些软件系统并不复杂,它们通常是由一个人提出、构建、维护和使用的,这个人通常是编程新手或独立工作的专业开发人员。然而企业级的应用的复杂性却越来越高。这些系统表现出非常丰富的行为,由真实世界的事件驱动或发出驱动事件。这些应用维护着数百万条信息记录的完整性,同时允许并发的更新和查询。这些系统包含了众多离散且相互作用的对象,发出命令并控制真实世界的实体。这样的软件系统通常具有很长的生命周期,随着时间的推移,许多用户渐渐依赖于这些软件系统的正常工作。

企业级软件的特征是,单个开发者要理解其设计的所有方面非常困难,几乎是不可能的。武断地说,这些系统的复杂性超出了人类智能的范围。不幸的是,我们所说的这种复杂性似乎是所有大型软件系统的基本特征。从根本上来说,我们可以掌握这种复杂性,但不能消除这种复杂性。我们认为这种固有的复杂性有4个原因:问题域的复杂性、管理开发过程的困难性、通过软件可能实现的灵活性以及刻画离散系统行为的问题。

复杂性常常以层次结构的形式存在。复杂的系统由一些相关的子系统组成,这些子系统又有自己的系统,如此下去,直到达到某种最低层次的基本组件。许多复杂系统都有几乎可分解的层次结构,正是这一事实让我们能够理解、描述甚至“看到”这样的系统和它们的组成部分。通过对复杂系统的划分,可以降低系统的复杂性。比较简单的软件可以不用划分层次,而复杂的软件可能分为多个层次,每个子系统或模块可能又划分为多个层次。比如应用软件往往划分为表示层、业务外观层、业务逻辑层、数据访问层等层次,而连接各个层次的TCP/IP网络通信协议软件可以划分为7层结构。

对于一个观察者来说很基础的东西,对另一个观察者可能具有很高的抽象层次。复杂性是相对的,某个系统可能很简单,但是组成系统的组成单元也许很复杂,这取决于观察者的角度。例如编写一个简单的文件读写的程序,其实现非常简单,但是运行时却涉及到操作系统的文件管理系统、存储管理系统、进程管理系统等多个操作系统非常复杂的子系统,操作系统的每个子系统都是复杂系统。

组成系统的构件内的联系通常比构件间的联系更强,将构件的实现与构件的接口分离开来。构件内部作用和构件间作用的差异让我们在系统的不同部分之间实现“分离关注”,让我们能够以相对隔离的方式来研究每个部分。面向过程的设计、面向对象的设计、面向组件的设计、面向服务的架构分别在过程、类、组件、服务的层次上提供了分离的界面。通过界面的相互作用将这些构件组成在一起形成更加复杂的系统。

复杂的系统趋向于随时间而演变。如果存在稳定的中间形式,从简单系统到复杂系统的演变将更快。复杂系统毫无例外都是从能工作的简单系统演变而来的。随着系统的演变,曾经被认为是复杂的对象就变成了基础对象,在这些对象的基础上构建更复杂的系统。而且,永远也不能够第一次就正确打造出这些基础对象,必须在上下文环境中使用它们,然后随着时间的推移不断地改进它们,因为我们对系统的真实行为了解得越来越多。这一点已经被无法的复杂软件开发实践所证明,早期的软件开发模型为瀑布模型,基本只用用于简单的系统,后来出现了原型模型、迭代模型,主要就是因为复杂的系统难以一次设计完成,需要经过一次甚至多次迭代,逐步完善他们。

发现共同抽象和派生极大地促进了我们对复杂系统的理解。抽象是提取不同事物的共性,忽略不同事物的特性。派生是在共性基础上附加个性特征。面向对象编程语言中类(Class)就提供了共同抽象的能力,通过继承(Inherit)可以在基础类上对对进行扩展。通过类的实例化就可以构建各种各样的对象,并模拟真实世界中的事物。在同样的类结构中,对象实例化和组织的方式可以采取许多不同的方式。

没有一种特定的架构可以真正被认为是"正确的"。这也是使得系统架构具有挑战性的原因-在可能的许多种降低系统复杂性的架构、技术、以及系统用户的需求中寻找平衡。随着系统复杂性的上升,软件架构技术相应发展。硬件升级所带来的性能提升为新的软件架构技术的发展提供了基础,日益增长满足客户需求的复杂性推动了软件架构技术的持续发展。

4.2 软件架构技术的发展充分体现了应用综合集成方法论

1990年初,钱学森等首次把处理开放的复杂巨系统的方法定名为从定性到定量的综合集成法。综合集成是从整体上考虑并解决问题的方法论。钱学森指出,这个方法不同于近代科学一直沿用的培根式的还原论方法,是现代科学条件下认识方法论上的一次飞跃。综合集成法作为一项技术又称为综合集成技术,它是思维科学的应用技术,既要用到思维科学成果,又会促进思维科学的发展。钱学森认为对简单系统可从事系统相互之间的作用出发,直接综合成全系统的运动功能,还可以借助于大型或巨型计算机。综合集成法作为一门工程可称为综合集成工程,应用综合集成法对开放的复杂巨系统进行探索研究,开辟了一个新科学领域,它在理论和实践上都具有重大的战略意义。

在面向对象的设计方法中,每个方法采用面向过程的设计方法。在面向组件的设计方法中,每个组件内部的类由面向对象设计方法设计。面向服务的设计架构中服务的提供采用组件实现。 SOA可以看作是B/S模型、XML/Web Service技术之后的自然延伸。云计算将大规模的计算能力、面向服务的架构、并行处理技术、网络技术、无线通信技术、商业模式复合在一起。鉴于SOA的目标是实现松散耦合、平台无关以及灵活性,从而能从容面对条件的变化。所以,云计算架构在本质上就是面向服务的,说以SOA与云计算和SaaS有天然的联系。历史上曾经出现过主机/终端架构、服务器/客户机架构、浏览器/服务器架构、云计算架构等架构,服务器/客户机架构主要是为了充分利用客户机的计算能力,实现分布式计算,而现在非常热门的云计算却要充分利用云平台的计算能力,看似回归了60年代主机终端模式。

由于软件技术的对象所研究的对象多半是离散的对象以及他们之间复杂的相互作用,“从定性到定量”是比较困难的,但是企业级应用的架构技术的发展符合“应用综合集成方法论”。新的软件架构技术的出现,大多数是对前期架构技术的发展、集成与综合。不同的架构技术各有所长,不是简单的替代关系,各有所适用的范围,对于复杂的企业级应用,或许多种架构技术的综合才是最合理的架构。由于客户需求的复杂性和多样性,往往需要提供个性化解决方案才可以满足客户复杂的需求,为了快速、高质量、低成本提供灵活的解决方案往往超过了单个供应商的开发能力,这就需要采用多个供应商的产品进行综合集成。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: