几种常见的架构模式

上传人:wt****50 文档编号:37944548 上传时间:2018-04-24 格式:PDF 页数:9 大小:308.14KB
返回 下载 相关 举报
几种常见的架构模式_第1页
第1页 / 共9页
几种常见的架构模式_第2页
第2页 / 共9页
几种常见的架构模式_第3页
第3页 / 共9页
几种常见的架构模式_第4页
第4页 / 共9页
几种常见的架构模式_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《几种常见的架构模式》由会员分享,可在线阅读,更多相关《几种常见的架构模式(9页珍藏版)》请在金锄头文库上搜索。

1、几种常见架构模式 本文转自:http:/ 在实践中,人们总结出了一些常用的软件系统结构高层模式,以供应用系统设计时参考。这些模式包括:单服务两层/多层 C/S;MVC 结构;面向服务的 SOA 与多服务集合;数据交换总线等。 1. 单机应用系统(Standalone) 准确地讲,单机应用系统是最简单的软件结构,是指运行在一台物理机器上的独立应用程序。当然,该应用可以是多进程或多线程的。 在信息系统普及之前的时代,大多数软件系统其实都是单机应用系统。这并不意味着它们简单,实际情况是,这样的系统有时更加复杂。这是因为软件技术最初普及时,多数行业只是将软件技术当做辅助手段来解决自己专业领域的问题,其

2、中大多都是较深入的数学问题或图形图像处理算法的实现。 有些系统非常庞大:笔者早年曾经参与的一个大型纯软件系统开发,多达 160 万行程序!要知道,这些程序当时可都是一行行写出来的。这应该算是一个超大型的软件系统了,共有十多个子系统集成在一个图形界面上执行,并可在多行 UNIX/DOS 平台下运行,其中很多算法的复杂困难程度,可以说,如果讲给今天这些所谓的架构高手与计算机高手听,他们会感觉如听“天书”一般深奥;有些系统则算法非常复杂:我的一个同学,在他们专业领域内编制的软件程序,在当时最高级的专业工作工作站上(应该要比今天的最快的微机性能还好些),一敲回车键运行,就往往要等待一个星期的时间才能得

3、到结果。 而这些软件系统,从今天的软件架构上来讲,却很简单,是标准的单机系统。即便是今天,复杂的单机系统也有很多,它们大多都是专业领域的产品,如 CAD/CAM 领域的 CATIA、ProEngineer,Autodesk 的 AutoCAD,还有我们熟悉的 Photoshop、CoralDraw,等等(这些系统的高级版本可能提供了一些网络化的功能,但改变不了其单机系统的实质)。 所以这里笔者要说的是,软件架构复杂并不代表软件系统复杂,其实,软件架构设计较为重要的领域只有一个,那就是信息系统领域,即以数据处理(数据存储,传输,安全,查询,展示等)为核心的软件系统。其他其他行业的软件应用对该概念

4、其实并不是那么强调。 所以,读者应该明白,后面几节介绍的所谓流行软件架构,都是指在信息系统的领域内。 2. 客户机/服务器(Client/Server)结构 客户机/服务器结构是软件系统中最常见的一种。笔者认为该概念应该来源于基于 TCP/IP 协议的进程间通信 IPC编程的“发送”与“反射”程序结构,即 Client 方向 Server 方发送一个 TCP 或 UDP 包,然后 Server 方根据接收到的请求向 Client 方回送 TCP 或 UDP 数据包(这里是指建立 TCP/IP 连接以后的应用程序逻辑,不涉及如 TCP建立连接的三方握手过程),IPC 编程的客户端/服务器概念图如

5、图 6-2 所示。 诚然,上述 IPC 编程中的客户与服务,在过去只是一个再普通、传统不过的标准程序结构与编程方法,不会有人将其提高到软件架构的高度。但其实,现代流行的各种 C/S 架构,其本质却正是如此:即 TCP/IP IPC 编程中的客户机/服务器。目前为止,还没有任何一种客户机/服务器架构的软件超出了这个范围。 所以,准确地讲,现代各种客户机/服务器模式的软件架构实际上是对 IPC 编程中客户/服务程序结构更加产品化与成熟化的结果。 让我们来看看几种常见的客户机/服务器的软件结构。 两层 C/S 两层 C/S,其实完全是 IPC 客户端/服务器结构的应用系统体现。两层 C/S 其实就是

6、人们所说的“胖客户端”模式。 在实际的系统设计中,该类结构主要是指前台客户端+后台数据库数据库管理系统,如图 6-3 所示。 在两层 C/S 结构中, 图 6-3 前台界面+后台数据库服务的模式最为典型, 前文所说的很多数据库前端开发工具 (如PowerBuilder、Delphi、VB)等都是用来专门制作这种结构的软件系统的。 有人也许要问, 上述典型的两层 C/S 模式应该没有你所说的 TCP/IP 通信呀?怎么你前面讲所有的 C/S 模式都脱离不了这个范围呢?其实,每一种数据库都提供了其专用的访问 API 或通用的 ODBC/JDBC 接口,如果这个数据库的开发支持从不同的机器上以网络方

7、式连接,则笔者相信其在客户端与数据库后台的通信大多情况下是TCP/IP 的客户机/服务器模式!如果这个数据库不支持网络连接方式(如以前基于 FoxBase 的开发,或现在基于MS Access 的开发),则我们不能称这个软件是 C/S 模式。 另外,如图 6-3 所示,两层 C/S 实际上是将前台界面与相关的业务逻辑处理服务的内容集成在一个可运行单元中了。 三层 C/S 结构与 B/S 三层 C/S 结构如图 6-4(a)所示,其前台界面送往后台的请求中,除了数据库存取操作以外,还有很多其他业务逻辑需要处理。三层 C/S 的前台界面与后台服务之间必须通过一种协议(自开发或采用标准协议)来通信(

8、包括请求、回复、远程函数调用等),通常包括以下几种: (1)基于 TCP/IP 协议,直接在底层 socket api 基础上自行开发。这样做一般只适合需求与功能简单的小型系统; (2)首先建立自定义的消息机制(封装 TCP/IP 与 socket 编程),然后前台与后台之间的通信通过该消息机制来开发。消息机制可以基于 XML,也可以基于字节流(Stream)定义。虽然是自开发,但可以基于此构建大型分布式系统; (3)基于 RPC 编程; (4)基于 CORBA/IIOP 协议; (5)基于 Java RMI; (6)基于 J2EE JMS; (7)基于 HTTP 协议。如浏览器与 Web 服

9、务器之间的交流便是如此。需要指出的是,HTTP 不是面向对象的,所以面向对象的应用数据会被首先平面化后进行传输。 目前最典型的基于三层 C/S 结构的应用模式便是我们最熟悉、较流行的 B/S(Brower/Server,浏览器/服务器)模式,如图 6-4(b)所示。 图 6-4 (b) 的 B/S 结构中, Web 浏览器是一个用于文档检索和显示的客户应用程序, 并通过超文本传输协议 HTTP(HyperText Transfer Protocol)与 Web 服务器相连。该模式下,通用的、低成本的浏览器节省了两层结构的C/S 模式客户端软件的开发和维护费用。 这些浏览器大家都很熟悉, 包括

10、MS Internet Explorer、 Mozilla FireFox、NetScape 等。 Web 服务器是指驻留于因特网上某种类型计算机的程序。当 Web 浏览器(客户端)连到服务器上并请求文件或数据时,服务器将处理该请求并将文件或数据发送到该浏览器上,附带的信息会告诉浏览器如何查看该文件(即文件类型)。服务器使用 HTTP(超文本传输协议)进行信息交流,这就是人们常把它们称为 HTTPD 服务器的原因。 我们每天都在 Web 浏览器上进行各种操作,这些操作中绝大多数其实都是在 Web 服务器上执行的,Web 浏览器只是将我们的请求以 HTTP 协议格式发送到 Web 服务器端或将返

11、回的查询结果显示而已。当然,驻留 Web浏览器与服务器的硬件设备可以是位于 Web 网络上的两台相距千里的计算机。 应该清楚, B/S 模式的浏览器与 Web 服务器之间的通信仍然是 TCP/IP, 只是将协议格式在应用层标准化了而已。实际上 B/S 是采用了通用客户端界面的三层 C/S 结构。 多层 C/S 多层 C/S 结构一般是指三层以上的结构,在实践中主要是三层与四层,四层即前台界面(如浏览器)、Web 服务器、中间件(或应用服务器)及数据库服务器,典型的客户机/服务器软件结构如图 6-5 所示。 多层客户机服务器模式主要用于较有规模的企业信息系统建设, 其中中间件一层主要完成以下几个

12、方面的工作: (1)提高系统可伸缩性,增加并发性能。在大量并发访问发生的情况下,Web 服务器可处理的并发请求数可以在中间件一层得到更进一步的扩展,从而提高系统整体并发连接数; (2)中间件/应用层一层专门完成请求转发或一些与应用逻辑相关的处理,具有这一作用的中间件一般可以作为请求代理,也可作为应用服务器。中间件的这种作用在 J2EE 的多层结构中比较常用,如 BEA WebLogic、IBM WebSphere 等提供的 EJB 容器,就是专门用以处理复杂企业逻辑的中间件技术组成部分。 (3)增加数据安全性。在网络结构设计中,Web 服务器一般都处于非军事区,即直接可以被前端用户访问到,如果

13、是一些在公网上提供服务的应用,则 Web 服务器一般都可以被所有能访问与联网的用户直接访问。因此,如果在软件结构设计上从 Web 服务器就可以直接访问企业数据库是不安全的。因此,中间件的存在,可以隔离Web 服务器对企业数据库的访问请求:Web 服务器将请求先发给中间件,然后由中间件完成数据库访问处理后返回。 MVC MVC 的概念在目前信息系统设计非常流行,严格来讲,MVC(Model-View-Controller)实际上是上述多层 C/S结构的一种常用的标准化模式,或者可以说是从另一个角度去抽象这种多层 C/S 结构。 在 J2EE 架构中, View 表示层指浏览器层, 用于图形化展示

14、请求结果; Controller 控制器指 Web 服务器层, Model模型层指应用逻辑实现及数据持久化的部分。目前流行的 J2EE 开发框架,如 JSF、Struts、Spring、Hibernate等及它们之间的组合, 如 Struts+Spring+Hibernate(SSH)、JSP+Spring+Hibernate 等都是面向 MVC 架构的;另外,PHP、Perl、MFC 等语言都有 MVC 的实现模式。 在以前传统 JSP 程序中网页与数据访问是混合在一起的,在 MVC 中强制要求表示层(视图)与数据层(模型)代码分开,而控制器(如 Servlet)则可以用来连接不同的模型和视

15、图去完成用户的需求。 从分层体系的角度来讲,MVC 的层次结构如图 6-6 所示,控制器与视图通常处于 Web 服务器一层,而根据“模型“有没有将业务逻辑处理分离成单独服务处理,MVC 可以分为三层或四层体系。 对分层标准的探讨 以上所讲各种 C/S 结构,包括两层、三层、四层甚至多层的概念,在 IT 界目前非常流行,绝大多数的信息处理系统与门户网站, 都会将自己应用的结构宣传为多少多少层 C/S 架构。 但究竟应该是属于多少层, 两层还是三层?目前的实际状况是比较混乱的。 例如上面所说 B/S 结构,有人说是三层,也有不少人说是两层,各有道理;又比如 MVC,有人说是四层,又有人说是三层,同

16、时在很多宣传中它确实被归结到 J2EE 宣传的四层架构中;另外,还有许多应用系统在某一层采用主从模式的集群服务器结构,有时也会使分层的概念混淆。 本书在这里给出一个分层问题的判断标准,即应该将应用系统的分层与服务分级区别开来。即某个应用架构到底分多少层,应该由其纵向深度上有多少个不同种类的(服务器集群显然排除在外)、两两相互通信的独立运行单元组成来决定; 而服务分级应该由其纵向深度上以其由多少个不同类型的服务实例以两两双向通信的模式组成?也就是说,一共由多少对简单客户机/服务器组成。 于是,B/S 应该是三层架构,但是由两级不同类型的服务组成:Web 服务与数据库服务;而四层架构则通常应该是由三级服务组成的。还有,在有些 J2EE 框架(如 JSF+Spring+Hibernate),除了 Web 服务器与浏览器的通信以外,再没有其他的分布式应用了(没有用到 EJB,RMI 或 JMS),而有些人将 HibernateDAO 等的数据持久化层

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 建筑资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号