1、实用软件体系结构php
本部分是提供实用的指南和技术,以更快地获得好的系统结构设计。咱们的哲学是不该该致力于设计理想化的系统结构,而是应该仔细地评估和权衡全部技术、市场、人员、成本方面的问题,从而获取一个好的解决方案。html
4种视图+全局分析java
一、4种视图算法
1)、一个软件体系结构有4种大相径庭的视图:概念视图、模块视图、执行视图、代码视图。sql
使用这个4种视图提供了一种设计软件系统结构的系统化方法,帮助架构师设置优先级,分析权衡,并保证没有缺漏。数据库
2)、不一样视图强调的不一样工程关注点:编程
在概念视图中,问题和解决方案主要经过领域术语来考虑的。对于特定的软件及硬件技术,它们应当是相对独立的。概念视图的工厂关注点包括:设计模式
系统如何知足需求?缓存
商用构件怎样组装成总体,怎样在功能层上与系统的其余部分交互?服务器
领域特定的硬件和软件如何融入系统?
功能是如何被分割并进入产品个版本的?
系统如何与以前版本的产品合并?它如何支持将来的版本?
如何支持产品线?
如何将由需求或领域中所作的变更引发的影响最小化?
在模块视图中,概念视图中的构件和链接子被映射为子系统和模块。在这里,架构师强调的是如何用现有的软件平台以及技术实现概念的解决方案。主要的工程关注点有以下几点:
产品是如何映射到软件平台的?
使用了什么样的系统支持或系统服务?具体是在什么地方?
怎么支持测试?
如何下降模块间的依赖性?
如何将模块与子系统的复用最大化?
当商用软件、软件平台或标准发生变更时,采用何种技术在封装产品时能够将它们与产品进行隔离?
执行视图描述模块如何映射到运行时平台说提供的元素,以及这些又如何映射到硬件体系结构。执行视图定义系统的执行时实体及其属性,好比内存使用和硬件分配。对于执行视图,其工程关注点以下:
系统如何知足性能、恢复及从新配置方面的需求?
如何平衡资源的使用(例如:负载平衡)?
如何达到必需的并发、复制及分布,而不过分增长控制算法的复杂度?
如何使运行时平台的改变所引发的影响到达最小?
在代码体系结构视图中,架构师决定执行视图中的执行时实体如何映射到部署构件(例如:可执行构件),决定模块视图中的模块如何映射到源构件,以及部署构件如何从源构件生成。代码视图中重要的工程关注点以下:
如何下降产品升级的时间和费用?
如何管理产品版本及发布?
如何下降构造时间?
须要什么工具支持开发环境?
如何支持集成与测试?
二、全局分析
全局分析是在定义概念、模块、执行和代码系统结构视图以前进行的,并贯穿整个系统结构的设计过程。
全局分析从识别影响体系结构设计的因素来分红3类:组织因素、技术因素、产品因素。
组织因素分红5类:管理;员工技能、兴趣、能力、缺点;过程与开发运行环境;开发进度;开发预算。
技术因素包括:通用和专用的硬件;操做系统、用户界面、设计模式等软件技术;模版和框架等体系结构技术;图像、数据库、数据格式、算法和技术之类的标准。
产品因素是描述了产品的功能需求、用户可见的特征和产品的性能等质量方面的需求。好比:功能特征;用户界面;性能;依赖性;错误监测、报告、修复;服务和价格等。
全局分析是在每一种体系结构设计视图中都要进行的一种行为。在全局分析过程当中创建的问题卡片要用在每个视图设计的核心设计任务中。在进行核心设计任务时,作出的决策应当能够返回到全局分析,以增长和修改因素、问题和策略。
总结策略:
问题 | 应用策略 |
进度紧迫 | 复用内部已有的、领域特性构件 购买而不是创建 使元素容易添加和删除 |
技能不足 | 避免使用多线程 封装多进程 |
通用和领域特定硬件的改变 | 封装领域特定硬件 封装通用硬件 |
软件技术的改变c | 使用标准 为外部构件开发产品特定的接口 |
资源有限 | 限制活动线程个数 用动态的内部线程见通讯联系 |
易用增长和删除特性 | 按关联尺度分离构件和模块 特性封装到分开的构件 分离用户交互模块 |
易用增长和删除采集过程和算法 | 为图像处理使用灵活的流水线模块 为采集和图像处理引入构件 分离用户交互模块 |
高吞吐量 | 把独立的控制线程映射到进程 使用新增的CPU |
实时采集性能 | 从没有临界时间构件中分离出有临界时间的 为模块行为开发准则 灵活的分配模块到进程 使用单速分析来预言性能 使用共享存储进行流水线阶段之间通讯 |
实现恢复 | 引入操做的恢复模块 把所有数据放到恢复稳定和容易达到的地方 |
实现诊断 | 制定一个错误处理策略 减小错误处理的工做 封装诊断构件 使用标准日志服务 |
体系结构的完整性 | 保护模块间的继承 分离公共接口构件 |
并发的开发工做 | 从源构件中分离开发构件 保护执行视图 采用阶段开发 经过静态库来发布层 |
限制可以使用的采集图像类型 | 采用适当的抽象开发一个脱机的探测模拟器 使用一个灵活的创建过程 |
多样性开发和目标平台 | 分离和封装依赖目标平台的代码 |
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框架 |
三、框架比较
应用框架调查的比较参数包括操做系统、程序设计语言、领域范畴等。
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 |
3、企业应用架构模式
作企业应用开发须要了解一些企业应用开发基础知识,好比分层架构、WEB表现、业务逻辑、数据库映射、并发、会话、分布策略等等。经过使用场景、解决方案、UML等手段详细介绍了设计模式(包括一些经常使用的设计模式GOF23)。下面这些模式是干什么的、它们解决什么问题、它们是如何解决问题的。这样,若是你碰到相似的问题,就能够从中找到相应的模式。能够为你节约成本、缩短项目周期时间、避免风险,以确保项目可以完美的完成。
一、三个基本层次:表现层、领域层、数据源层
层次 | 职责 |
表现层 | 提供服务,显示信息(例如在Windows或HTML页面中,处理用户请求(鼠标点击、键盘敲击等),HTTP请求,命令行调用,批处理API) |
领域层 | 逻辑,系统中真正的核心 |
数据源层 | 与数据库,消息系统、事务管理器及其余软件包通讯 |
关于依赖性的广泛性原则:领域层和数据源层绝对不要依赖于表现层。
一旦选择了处理节点,接下来就应该尽量使全部代码保持在单一进程内完成(多是在同一个节点上,也可能拷贝在集群中的多个节点上)。除非不得已,不然不要把层次放在多个进程中完成。由于那样作不但损失性能,并且增长复杂性,由于必须增长相似下面的模式,如远程外观和数据传输对象。
复杂性增压器:分布、显式多线程、范型差别、多平台开发以及极限性能要求(如每秒100个事务以上)。
二、领域逻辑
领域逻辑的组织能够分红三种主要模式:事务脚本、领域模型、表模块。
三者之间的区别:
事务脚本是一个过程来控制一系列动做逻辑的执行。
领域模型再也不是由一个过程来控制用户某动做的逻辑,而是由每个对象都承担一部分相关逻辑。这些对象能够当作是领域的不一样组成部分。
表模块只有一个公共的合同类实例,而领域模型对数据库中每个合同都有一个相应的合同类的实例。
三、映射到关系数据库
在使用领域模型的时候,它的读取应该把相关联的对象也一块读出来。例如,读取一个合同,应该把合同涉及到的产品和定购厂商的对象加载到内存中。由时候为了不这些没有必要的连带读取,咱们可使用【延迟加载】模型。
读取数据的时候,性能问题可能回变得比较突出。这就致使了几条经验法则。
1)、尽量一次查询多个记录,不要一次查询一个记录,而后进行屡次查询。能够一次查询多条相关的记录,例如使用联合查询。或者使用多条SQL语句。
2)避免屡次进入数据库的方法是使用链接(Join),这样就能够经过一次返回多个表。能够制做一个入口,让入口完成相关数据的一次性读取。
3)数据库中进行优化。DBA来优化数据库。
映射到关系数据库的时候,通常会遇到三种状况:
1) 本身选择数据库方案。
2) 不得不映射到一个现有数据库方案,这个方案不能改变。
3) 不得不映射到一个现有数据库方案,但这个方案是能够考虑改变的。
最简单的状况是本身选择数据库方案,而且不用迁就领域逻辑的复杂性。当已经存在一个数据库方案的时候,应该逐步创建领域模型并包括数据映射器,把数据保存到现有的数据库中。
四、并发
并发问题:更新丢失和不一致读。
并发问题,人们提出了各类不一样的解决方案。对于企业应用来讲,有两个很是重要的解决方案:一个是隔离,一个是不变性。
隔离是划分数据,使得每一片数据均可能被一个执行单元访问。好比文件锁。
不变性是识别那些不变的数据,不用总考虑这些数据的并发问题而是普遍地共享它们。
当有一些可变数据没法隔离的时候,会发生什么样的状况呢?总的来讲,咱们可使用两种形式的并发控制策略:乐观并发控制和悲观并发控制。
若是把乐观锁看做是关于冲突检测的,那么悲观锁就是关于冲突避免的。
假如Martin和David同时都要编辑Customer文件。若是使用乐观锁策略,他们两我的都能获得一份文件的拷贝,而且能够自由编辑文件。假设David第一个完成了工做,那么他能够毫无困难地更新他的修改。可是,当Martin想要提交他的修改时,并发控制策略就会开始起做用。源代码控制系统会检测到在Martin的修改和David的修改之间存在着冲突,于是拒绝Martin的提交,并由Martin负责指出怎样处理这种状况。若是使用悲观锁策略,只要有人先取出文件,其余人就不能对该文件进行编辑。所以,假如是Martin先取出了文件,那么David就只能在Martin完成任务并提交以后才能对该文件进行操做。
多种技术处理死锁:一种是使用软件来检测死锁的发生。另外一种是给每个锁都加上时间限制,一旦到达时间限制,所加的所就会失效,工做就会丢失。
软件事务常用ACID的属性来描述。
原子性(Atomicity):在一个事务里,动做序列的每个步骤都必须是要么所有成功,要么全部的工做都将回滚。部分完成不是一个事务概念。
一致性(Consistency):在事务开始和完成的时候,系统的资源都必须处于一致的、没有被破坏的状态。
隔离性(Isolation):一个事务,直到它被成功提交以后,它的结果才对其余全部的事务是可见的。
持久性(Durability):一个已提交事务的任何结果都必须是永久性的,即“在任何崩溃的状况的能保存下来”。
大多数企业应用是在数据库方面涉及到事务的,但还有不少状况要进行事务控制,好比说哦消息队列、打印机和ATM等。为了处理最大的吞吐率,现代的事务处理系统被设计成保证事务尽量短,尽量不让事务跨越多个请求;尽量晚打开事务。
五、分布策略
按类模型进行分布的方法不可行的主要缘由与计算机的基本特色有关。进程内的过程调用很是快。两个对立进程间的过程调用就慢了一个数量级。在不一样机器间运行过程又要慢一两个数量级,取决于网络拓扑。
本地接口最好是细粒度接口。但细粒度不能很好地用在远程调用中。分布对象设计第必定律:不要分布使用对象,大多数状况下是使用集群系统。
六、应用集成的四种主要方式:
文件传输、共享数据库、远程过程调用、消息传递。利用文件传输和共享数据库,应用可以共享它们的数据,但不能共享功能。远程过程调用使应用可以共享功能,可是这会让应用紧耦合。消息传递使应用可以共享功能,让应用松耦合。运行消息传递,可使用可定制的格式频繁地、当即地、可靠地、异步地传输数据包。本书主要是围绕消息传递方式来集成应用,完成企业集成模式、设计、构建及部署。书中也介绍了消息是怎样传递的,咱们不须要彻底理解,那个对我来讲太难了。咱们须要熟悉WebSphere MQ、MSMQ、JMS等消息服务产品,而后利用它们能开发企业集成系统,特别是金融业、保险业企业集成系统。
应用之间的集成解决方案必须应对如下几个基本挑战:
1.网络是不可靠的。
2.网络速度慢。
3.任何两个应用都是不一样的。集成解决方案须要在使用不一样编程语言、不一样操做平台和不一样数据格式的系统之间传送信息。
4.改变是不免的。应用会随着时间改变。
开发人员使用如下四种主要方法克服上述挑战:
一、 )文件传输——一个应用写文件,以后另外一个应用读这个文件。为此,应用之间须要协商文件名、文件的位置、文件格式、文件读写的时间以及谁负责删除这个文件。
二、 )共享数据库——多个应用共享相同的数据库,这个数据库位于独立的物理数据库中。因为不存在重复保存的数据资料,所以没必要将数据从一个应用传给另外一个应用。
三、 )远程过程调用——一个应用开放其部分功能,使得其余应用可以远程访问这些过程。它们之间的通讯是实时、同步的。
四、 )消息传递—— 一个应用向公共消息通道中发布一个消息,其余应用能够在以后某个时间从通道中得到这个消息。应用之间必须协商创建通道以及消息的格式。这种通讯是异步的。
每种方法均有其独特的优势和不足。实际上,应用之间可经过多种方法集成,使得每一个集成点都能充分利用最合适的方法。
消息传递开发商的产品大体划分为如下四类:
一、 )操做系统。消息传递已经成为开发商把必要的软件基础设施集成到操做系统或数据库平台中的共同须要。例如,Windows 2000和Windows XP操做系统包含了Microsoft消息排队(MSMQ)服务软件,经过COM组件和System.Messaging名字空间访问,属于.NET平台的组成部分。Oracle提供了Oracle AQ.
二、 )应用服务器。例如JMS、IBM WebSphere、BEA WebLogic
三、 )EAI套件。例如IBM WebSphere MQ、Microsoft BizTalk、TIBCO、WebMethods、SeeBeyond、Vitria、CorssWolds。
四、 )Web服务工具集。例如WS-Reliability、WS-ReiableMessaging、ebMs
4、UML、XML、.net/java平台
企业应用系统目前业界流行和通用的就是.Net平台和Java平台(J2EE);关于二者的区别参考:http://www.cnblogs.com/heilix/archive/2009/01/17/1377555.html
5、几种常见架构
-软件架构通用的服务模式
-类工厂服务
-缓存服务(内存服务)
-配置服务
-异常处理服务
-日志服务
-加密服务
-验证服务和受权服务
-消息队列
-部署服务
-事务处理服务
-帮助服务
-数据验证服务
一、 MVC
M表示模型
V表示视图
C表示控制器
二、C/S
客户端向服务器发送数据请求
服务器返回数据
客户端处理数据的展现
服务器须要处理通信、并发等等
服务器
一个线程用来监听来自客户端的链接
用一个独立的线程来处理一个客户端的链接
线程池、线程重用
并发控制
负载均衡
进程间通信
TCP/UDP进程间通信
命名管道
共享内存
命名事件
命令行参数传递(用于父子进程)
三、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
四、SOA
SOA 是一种 IT 体系结构样式,支持将您的业务做为连接服务或可重复业务任务进行集成,可在须要时经过网络访问这些服务和任务。这个网络可能彻底包含在您的公司总部内,也可能分散于各地且采用不一样的技术,经过对来自纽约、伦敦和香港的服务进行组合,可以让最终用户感受彷佛这些服务就安装在本地桌面上同样。须要时,这些服务能够将本身组装为按需应用程序——即相互链接的服务提供者和使用者集合,彼此结合以完成特定业务任务,使您的业务可以适应不断变化的状况和需求.
五、SaaS
软件即服务,它是一种基于互联网提供软件服务的应用模式。随着互联网技术的发展和应用软件的成熟,SaaS做为一种创新的软件应用模式逐渐兴起。
SaaS提供商为企业搭建信息化所须要的全部网络基础设施及软件、硬件运做平台,并负责全部前期的实施、后期的维护等一系列服务,企业无需购买软硬件、建设机房、招聘IT人员,便可经过互联网使用信息系统。就像打开自来水龙头就能用水同样,企业根据实际须要,向SaaS提供商租赁软件服务。
对于广大中小型企业来讲,SaaS是采用先进技术实施信息化的最好途径。但SaaS毫不仅仅适用于中小型企业,全部规模的企业均可以从SaaS中获利。
目前,SaaS已成为软件产业的一个重要力量。只要SaaS的品质和可信度能继续获得证明,它的魅力就不会消退。
六、Open API
Open API实现技术
SOAP
XML-RPC
REST