软件体系架构阅读笔记(十)

一、实用软件体系结构

本部分是提供实用的指南和技术,以更快地得到好的系统结构设计。我们的哲学是不应该致力于设计理想化的系统结构,而是应该仔细地评估和权衡所有技术、市场、人员、成本方面的问题,从而获取一个好的解决方案。

4种视图+全局分析

1、4种视图

1)、一个软件体系结构有4种截然不同的视图:概念视图、模块视图、执行视图、代码视图。

使用这个4种视图提供了一种设计软件系统结构的系统化方法,帮助架构师设置优先级,分析权衡,并保证没有缺漏。

2)、不同视图强调的不同工程关注点:

在概念视图中,问题和解决方案主要通过领域术语来考虑的。对于特定的软件及硬件技术,它们应当是相对独立的。概念视图的工厂关注点包括:

系统如何满足需求?

商用构件怎样组装成整体,怎样在功能层上与系统的其他部分交互?

领域特定的硬件和软件如何融入系统?

功能是如何被分割并进入产品个版本的?

系统如何与之前版本的产品合并?它如何支持未来的版本?

如何支持产品线?

如何将由需求或领域中所做的变动引起的影响最小化?

在模块视图中,概念视图中的构件和连接子被映射为子系统和模块。在这里,架构师强调的是如何用现有的软件平台以及技术实现概念的解决方案。主要的工程关注点有如下几点:

产品是如何映射到软件平台的?

使用了什么样的系统支持或系统服务?具体是在什么地方?

怎么支持测试?

如何降低模块间的依赖性?

如何将模块与子系统的复用最大化?

当商用软件、软件平台或标准发生变动时,采用何种技术在封装产品时可以将它们与产品进行隔离?

执行视图描述模块如何映射到运行时平台说提供的元素,以及这些又如何映射到硬件体系结构。执行视图定义系统的执行时实体及其属性,比如内存使用和硬件分配。对于执行视图,其工程关注点如下:

系统如何满足性能、恢复及重新配置方面的需求?

如何平衡资源的使用(例如:负载平衡)?

如何达到必需的并发、复制及分布,而不过度增加控制算法的复杂度?

如何使运行时平台的改变所引起的影响到达最小?

在代码体系结构视图中,架构师决定执行视图中的执行时实体如何映射到部署构件(例如:可执行构件),决定模块视图中的模块如何映射到源构件,以及部署构件如何从源构件生成。代码视图中重要的工程关注点如下:

如何降低产品升级的时间和费用?

如何管理产品版本及发布?

如何降低构造时间?

需要什么工具支持开发环境?

如何支持集成与测试?

2、全局分析

全局分析是在定义概念、模块、执行和代码系统结构视图之前进行的,并贯穿整个系统结构的设计过程。

全局分析从识别影响体系结构设计的因素来分成3类:组织因素、技术因素、产品因素。

组织因素分成5类:管理;员工技能、兴趣、能力、缺点;过程与开发运行环境;开发进度;开发预算。

技术因素包括:通用和专用的硬件;操作系统、用户界面、设计模式等软件技术;模版和框架等体系结构技术;图像、数据库、数据格式、算法和技术之类的标准。

产品因素是描述了产品的功能需求、用户可见的特征和产品的性能等质量方面的需求。比如:功能特征;用户界面;性能;依赖性;错误监测、报告、修复;服务和价格等。

全局分析是在每一种体系结构设计视图中都要进行的一种行为。在全局分析过程中建立的问题卡片要用在每一个视图设计的核心设计任务中。在进行核心设计任务时,做出的决策应当可以返回到全局分析,以增加和修改因素、问题和策略。

总结策略:

问题 应用策略
进度紧迫 复用内部已有的、领域特性构件
购买而不是建立
使元素容易添加和删除
技能不足 避免使用多线程
封装多进程
通用和领域特定硬件的改变 封装领域特定硬件
封装通用硬件
软件技术的改变c

使用标准

为外部构件开发产品特定的接口

资源有限 限制活动线程个数
用动态的内部线程见通信联系
易用增加和删除特性 按关联尺度分离构件和模块
特性封装到分开的构件
分离用户交互模块
易用增加和删除采集过程和算法 为图像处理使用灵活的流水线模块
为采集和图像处理引入构件
分离用户交互模块
高吞吐量 把独立的控制线程映射到进程
使用新增的CPU
实时采集性能 从没有临界时间构件中分离出有临界时间的
为模块行为开发准则
灵活的分配模块到进程
使用单速分析来预言性能
使用共享存储进行流水线阶段之间通信
实现恢复 引入操作的恢复模块
把全部数据放到恢复稳定和容易达到的地方
实现诊断 制定一个错误处理策略
减少错误处理的工作
封装诊断构件
使用标准日志服务
体系结构的完整性 保护模块间的继承
分离公共接口构件
并发的开发工作 从源构件中分离开发构件
保护执行视图
采用阶段开发
通过静态库来发布层
限制可使用的采集图像类型 采用适当的抽象开发一个脱机的探测模拟器
使用一个灵活的建立过程
多样性开发和目标平台 分离和封装依赖目标平台的代码

二、特定领域框架

1、框架:一组类或组件的集合,它们为一个特定领域提供了一组服务和功能。软件架构的一种实例,它可以使设计的组件具有良好的互操作性。

2、框架分类

根据作用域可以将框架分为系统基础结构框架、中间件集成框架、企业应用框架。

系统基础结构框架是一组可以支持系统基础结构领域的高校可移植框架,例如可以支持操作系统、用户界面、通信及语言处理等,它们通常是由内部开发和使用的,有时也用作供其他应用使用的通用应用。

中间件集成框架的作用是增强软件对基础结构的模块化处理能力、重用能力及扩展能力,从而能够在分布式环境中无缝运行。中间件集成的例子有OmniBuilder框架和对象请求代理(ORB)。

企业应用框架处理的应用领域很广,如银行、电信、制药等,它们是领域应用的基石。企业应用中著名的实例有IBM SanFrancisco、企业资源规划(ERP)。

框架类别 框架实例
企业应用框架 Amulet,IBM SanFrancisco,Asyn,LAMA,CORTAN,OMAC框架
中间件集成框架 GUI,QC Services Layer,PFC/Open,OmniBuilder,PFX,FrameData Feed Handler框架
系统基础结构框架 Protocol Layer,ACE,OPTF,DynaFind,ARES,DORB框架

3、框架比较

应用框架调查的比较参数包括操作系统、程序设计语言、领域范畴等。

1)、操作系统:Windows、UNIX、Linux

2)、语言:C++、Java

3)、领域范畴

拥有框架最多的两个领域是商务/金融和电信/网络。

框架领域范畴

领域范畴 框架列表
通用(无领域) MaccApp,G++
通用GUI GUI,Amulet,Visible Properties and Actions Framework
数据库和数据管理 FRAMEWARE,PFX(持久性框架),ROA’D,QC Services Layer框架,Advanced Software Architecture Platform
商务和金融 Asyn,SanFrancisco,BOOF,PFC/Open Frame,Omni Builder,Rule Parsing,File Parsing,CSFramelets
保险
Asyn,SanFrancisco
医疗 HBOC应用框架,Medical Business Object框架,Advanced Software Architecture Platform,Philips New York Project(开发中)
教育和娱乐 Multimedia框架
电信和网络
适应性面向对象事件过滤框架,Advanced Software Architecture Platform,CORTAN,Protocol Layer框架,ACE,SIGAL,DORB,Jadve
工业和制造业 OMAC,PrismTech BOF和CORBA服务
软件开发 CLOS Meta Object Protocol,G++,OPTF,LAMA

三、企业应用架构模式

做企业应用开发需要了解一些企业应用开发基础知识,比如分层架构、WEB表现、业务逻辑、数据库映射、并发、会话、分布策略等等。通过使用场景、解决方案、UML等手段详细介绍了设计模式(包括一些常用的设计模式GOF23)。下面这些模式是干什么的、它们解决什么问题、它们是如何解决问题的。这样,如果你碰到类似的问题,就可以从中找到相应的模式。可以为你节约成本、缩短项目周期时间、避免风险,以确保项目能够完美的完成。

1、三个基本层次:表现层、领域层、数据源层

层次 职责
表现层 提供服务,显示信息(例如在Windows或HTML页面中,处理用户请求(鼠标点击、键盘敲击等),HTTP请求,命令行调用,批处理API)
领域层 逻辑,系统中真正的核心
数据源层 与数据库,消息系统、事务管理器及其他软件包通信

关于依赖性的普遍性原则:领域层和数据源层绝对不要依赖于表现层。

一旦选择了处理节点,接下来就应该尽可能使所有代码保持在单一进程内完成(可能是在同一个节点上,也可能拷贝在集群中的多个节点上)。除非不得已,否则不要把层次放在多个进程中完成。因为那样做不但损失性能,而且增加复杂性,因为必须增加类似下面的模式,如远程外观和数据传输对象。

复杂性增压器:分布、显式多线程、范型差异、多平台开发以及极限性能要求(如每秒100个事务以上)。

2、领域逻辑

领域逻辑的组织可以分成三种主要模式:事务脚本、领域模型、表模块。

三者之间的区别:

事务脚本是一个过程来控制一系列动作逻辑的执行。

领域模型不再是由一个过程来控制用户某动作的逻辑,而是由每一个对象都承担一部分相关逻辑。这些对象可以看成是领域的不同组成部分。

表模块只有一个公共的合同类实例,而领域模型对数据库中每一个合同都有一个相应的合同类的实例。

3、映射到关系数据库

在使用领域模型的时候,它的读取应该把相关联的对象也一块读出来。例如,读取一个合同,应该把合同涉及到的产品和定购厂商的对象加载到内存中。由时候为了避免这些没有必要的连带读取,我们可以使用【延迟加载】模型。

读取数据的时候,性能问题可能回变得比较突出。这就导致了几条经验法则。

1)、尽可能一次查询多个记录,不要一次查询一个记录,然后进行多次查询。可以一次查询多条相关的记录,例如使用联合查询。或者使用多条SQL语句。

2)避免多次进入数据库的方法是使用连接(Join),这样就可以通过一次返回多个表。可以制作一个入口,让入口完成相关数据的一次性读取。

3)数据库中进行优化。DBA来优化数据库。

映射到关系数据库的时候,一般会遇到三种情况:

1) 自己选择数据库方案。

2) 不得不映射到一个现有数据库方案,这个方案不能改变。

3) 不得不映射到一个现有数据库方案,但这个方案是可以考虑改变的。

最简单的情况是自己选择数据库方案,并且不用迁就领域逻辑的复杂性。当已经存在一个数据库方案的时候,应该逐步建立领域模型并包括数据映射器,把数据保存到现有的数据库中。

4、并发

并发问题:更新丢失和不一致读。

并发问题,人们提出了各种不同的解决方案。对于企业应用来说,有两个非常重要的解决方案:一个是隔离,一个是不变性。

隔离是划分数据,使得每一片数据都可能被一个执行单元访问。比如文件锁。

不变性是识别那些不变的数据,不用总考虑这些数据的并发问题而是广泛地共享它们。

当有一些可变数据无法隔离的时候,会发生什么样的情况呢?总的来说,我们可以使用两种形式的并发控制策略:乐观并发控制和悲观并发控制。

如果把乐观锁看作是关于冲突检测的,那么悲观锁就是关于冲突避免的。

假如Martin和David同时都要编辑Customer文件。如果使用乐观锁策略,他们两个人都能得到一份文件的拷贝,并且可以自由编辑文件。假设David第一个完成了工作,那么他可以毫无困难地更新他的修改。但是,当Martin想要提交他的修改时,并发控制策略就会开始起作用。源代码控制系统会检测到在Martin的修改和David的修改之间存在着冲突,因而拒绝Martin的提交,并由Martin负责指出怎样处理这种情况。如果使用悲观锁策略,只要有人先取出文件,其他人就不能对该文件进行编辑。因此,假如是Martin先取出了文件,那么David就只能在Martin完成任务并提交之后才能对该文件进行操作。

多种技术处理死锁:一种是使用软件来检测死锁的发生。另一种是给每一个锁都加上时间限制,一旦到达时间限制,所加的所就会失效,工作就会丢失。

软件事务经常使用ACID的属性来描述。

原子性(Atomicity):在一个事务里,动作序列的每一个步骤都必须是要么全部成功,要么所有的工作都将回滚。部分完成不是一个事务概念。

一致性(Consistency):在事务开始和完成的时候,系统的资源都必须处于一致的、没有被破坏的状态。

隔离性(Isolation):一个事务,直到它被成功提交之后,它的结果才对其他所有的事务是可见的。

持久性(Durability):一个已提交事务的任何结果都必须是永久性的,即“在任何崩溃的情况的能保存下来”。

大多数企业应用是在数据库方面涉及到事务的,但还有很多情况要进行事务控制,比如说哦消息队列、打印机和ATM等。为了处理最大的吞吐率,现代的事务处理系统被设计成保证事务尽可能短,尽可能不让事务跨越多个请求;尽可能晚打开事务。

5、分布策略

按类模型进行分布的方法不可行的主要原因与计算机的基本特点有关。进程内的过程调用非常快。两个对立进程间的过程调用就慢了一个数量级。在不同机器间运行过程又要慢一两个数量级,取决于网络拓扑。
本地接口最好是细粒度接口。但细粒度不能很好地用在远程调用中。分布对象设计第一定律:不要分布使用对象,大多数情况下是使用集群系统。

6、应用集成的四种主要方式:

文件传输、共享数据库、远程过程调用、消息传递。利用文件传输和共享数据库,应用能够共享它们的数据,但不能共享功能。远程过程调用使应用能够共享功能,但是这会让应用紧耦合。消息传递使应用能够共享功能,让应用松耦合。运行消息传递,可以使用可定制的格式频繁地、立即地、可靠地、异步地传输数据包。本书主要是围绕消息传递方式来集成应用,完成企业集成模式、设计、构建及部署。书中也介绍了消息是怎样传递的,我们不需要完全理解,那个对我来说太难了。我们需要熟悉WebSphere MQ、MSMQ、JMS等消息服务产品,然后利用它们能开发企业集成系统,特别是金融业、保险业企业集成系统。

应用之间的集成解决方案必须应对以下几个基本挑战:

1.网络是不可靠的。

2.网络速度慢。

3.任何两个应用都是不同的。集成解决方案需要在使用不同编程语言、不同操作平台和不同数据格式的系统之间传送信息。

4.改变是难免的。应用会随着时间改变。

开发人员使用以下四种主要方法克服上述挑战:

1、 )文件传输——一个应用写文件,之后另一个应用读这个文件。为此,应用之间需要协商文件名、文件的位置、文件格式、文件读写的时间以及谁负责删除这个文件。

2、 )共享数据库——多个应用共享相同的数据库,这个数据库位于独立的物理数据库中。由于不存在重复保存的数据资料,因此不必将数据从一个应用传给另一个应用。

3、 )远程过程调用——一个应用开放其部分功能,使得其他应用能够远程访问这些过程。它们之间的通信是实时、同步的。

4、 )消息传递—— 一个应用向公共消息通道中发布一个消息,其他应用可以在之后某个时间从通道中获得这个消息。应用之间必须协商建立通道以及消息的格式。这种通信是异步的。

每种方法均有其独特的优点和不足。实际上,应用之间可通过多种方法集成,使得每个集成点都能充分利用最合适的方法。

消息传递开发商的产品大致划分为以下四类:

1、 )操作系统。消息传递已经成为开发商把必要的软件基础设施集成到操作系统或数据库平台中的共同需要。例如,Windows 2000和Windows XP操作系统包含了Microsoft消息排队(MSMQ)服务软件,通过COM组件和System.Messaging名字空间访问,属于.NET平台的组成部分。Oracle提供了Oracle AQ.

2、 )应用服务器。例如JMS、IBM WebSphere、BEA WebLogic

3、 )EAI套件。例如IBM WebSphere MQ、Microsoft BizTalk、TIBCO、WebMethods、SeeBeyond、Vitria、CorssWolds。

4、 )Web服务工具集。例如WS-Reliability、WS-ReiableMessaging、ebMs

四、UML、XML、.net/java平台

企业应用系统目前业界流行和通用的就是.Net平台和Java平台(J2EE);关于两者的区别参考:http://www.cnblogs.com/heilix/archive/2009/01/17/1377555.html

五、几种常见架构

-软件架构通用的服务模式

-类工厂服务

-缓存服务(内存服务)

-配置服务

-异常处理服务

-日志服务

-加密服务

-验证服务和授权服务

-消息队列

-部署服务

-事务处理服务

-帮助服务

-数据验证服务

1、 MVC

M表示模型

V表示视图

C表示控制器

2、C/S

客户端向服务器发送数据请求

服务器返回数据

客户端处理数据的展示

服务器需要处理通讯、并发等等

服务器

一个线程用来监听来自客户端的连接

用一个独立的线程来处理一个客户端的连接

线程池、线程重用

并发控制

负载均衡

进程间通讯

TCP/UDP进程间通讯

命名管道

共享内存

命名事件

命令行参数传递(用于父子进程)

3、B/S

Web服务器

应用服务器

数据库服务器

Web服务器

标准的Web服务器

简化了应用服务器的开发

Web服务器架构

JAVA (JSP)

.NET (ASP)

LAMP

Linux+Apache+Mysql+Perl/PHP/Python,一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台。

HTTP

基于TCP

客户端发送HTTP Request

服务器处理后,发送HTTP Response

每次连接只处理一个请求

HTTP协议定义了Request和Response的内容格式(基于文本)

HTTP是应用协议

定义了GET、PUT、POST、REMOVE等操作

操作的对象是资源,由URI定义

无状态

HTTP作为传输协议来使用

基于HTTP的Request和Response

应用协议在Request和Response中定义

形式一

http://...../update.php?version=1.0

http://..../functioncall.php?method=xxx&arg=aaa&....

可以使用GET和POST

在Response中使用xml作为返回

形式二

使用POST

在Request中使用XML指定方法名和参数

在Response中使用XML作为返回

XML-RPC

形式三

SOAP, WebService

4、SOA

SOA 是一种 IT 体系结构样式,支持将您的业务作为链接服务或可重复业务任务进行集成,可在需要时通过网络访问这些服务和任务。这个网络可能完全包含在您的公司总部内,也可能分散于各地且采用不同的技术,通过对来自纽约、伦敦和香港的服务进行组合,可让最终用户感觉似乎这些服务就安装在本地桌面上一样。需要时,这些服务可以将自己组装为按需应用程序——即相互连接的服务提供者和使用者集合,彼此结合以完成特定业务任务,使您的业务能够适应不断变化的情况和需求.

5、SaaS

软件即服务,它是一种基于互联网提供软件服务的应用模式。随着互联网技术的发展和应用软件的成熟,SaaS作为一种创新的软件应用模式逐渐兴起。

SaaS提供商为企业搭建信息化所需要的所有网络基础设施及软件、硬件运作平台,并负责所有前期的实施、后期的维护等一系列服务,企业无需购买软硬件、建设机房、招聘IT人员,即可通过互联网使用信息系统。就像打开自来水龙头就能用水一样,企业根据实际需要,向SaaS提供商租赁软件服务。

对于广大中小型企业来说,SaaS是采用先进技术实施信息化的最好途径。但SaaS绝不仅仅适用于中小型企业,所有规模的企业都可以从SaaS中获利。

目前,SaaS已成为软件产业的一个重要力量。只要SaaS的品质和可信度能继续得到证实,它的魅力就不会消退。

6、Open API

Open API实现技术

SOAP

XML-RPC

REST

猜你喜欢

转载自www.cnblogs.com/lwq666/p/11050252.html