一、概论
N层(三层以上)架构集成了信息引擎技术和Internet技术,从软件体系结构上保证应用系统在性能上可扩展、可规模化,在功能上具有开放性、可重用、可延展,是一种能够满足未来企业级信息共享、业务操作的应用框架。
N层架构的核心是提供可规模化特性,一方面是从服务负载上可规模化,能同时为极大规模的用户同时提供服务;另一方面是服务功能上的可规模化,可形成极大规模的软件群系统,各分系统可以共享信息、服务,形成企业级的信息高速公路。
N层架构的四层是指Presentation Tier(表示层)、Web Server Tier(Web服务器层)、 Application Server Tier(应用服务器层)和 Data Tier(数据层),其关系如下图所示。
图表一、N层架构体系结构
N层架构是在三层架构的基础上形成的,是三层架构在Internet上的实现,是一种Internetable的三层架构。三层架构将应用逻辑从数据源的管理(数据库)和客户端中分离出来。一方面它使得客户端程序仅关注与数据的可视表示和用户输入信息的收集,这减小了客户端程序的复杂度,客户端程序更加小巧、灵活,降低了对客户端计算机硬件的要求。另一方面,由于应用逻辑集中在应用服务器,这更便于应用逻辑的管理和修改、调整等。
N层架构具有三层架构的全部优点,同时由于N层架构中使用浏览器作为客户端界面,这又使得应用系统在实施布署时极大地简化,可以达到零布署开销的目标。 在N层架构中,信息引擎封装在应用服务器的核心,一方面信息引擎使用了数据库后端系统提供的强大功能,另一方面信息引擎将信息服务以更为方便易用的方式通过应用服务器提供出来,并可将其通过Web Server在Internet上发布出来,使得信息服务的功能在整个Internet的范围中都是可访问的。
在N层架构中,客户端在网络通信上使用的是Web系统的HTTP协议。Web系统是针对信息的发布和检索而设计的,从根本上讲它是一种无连结、无状态的通信协议。在商业领域的业务网络应用系统中,传统的网络模型是Client/Server结构,其核心思想是在一条通信连结上进行请求/应答方式的业务数据交互。连结保持、状态转化和Transaction概念是网络业务应用系统不同于Web系统的特点。
N层架构的目的就是要在HTTP协议上解决连结保持、状态转化和Transaction完整性(事务完整性)等问题,同时兼有上述两种系统的优越性。 应用系统在设计时通常考虑功能和性能两方面的需求。大多数传统的系统在设计时就已经将系统的负载确定在一个较小变化的范围中,因此为达到一定的性能,通常是在系统建立的初期通过系统硬件设备的选择来达到一定的性能要求。而业务系统的软件设计则是在此硬件平台基础之上进行的,而现在的企业应用环境中,业务系统负载快速变化的现象已十分普遍,上述系统一旦达到系统硬件的极限,整个系统的软、硬件就将全面报废。业务系统中软件部分的重要性和成本变得越来越大,软件系统的可规模化就成为一个至关重要的因素。软件体系的可规模化特性就是指当系统硬件性能达到极限后,通过简单增加硬件设备,无须对软件进行修改就可以使整个系统的性能同量级地提升。N层架构的核心就是要提供软件系统的可规模化(scalability)。
二、系统概要
1.系统网络逻辑结构设计
N层架构应用系统的网络逻辑结构如下图所示:
图表二、N层架构网络结构
客户端使用浏览器,通过标准的HTTP协议连结到Internet。通常无须连结支持的信息浏览和查询等由Browser通过HTTP协议与Web Server交互得到。对于需要连结和状态支持的业务数据交互则通过在Browser中启动的Applet使用HTTP协议透过Web Server与Web Connector建立连结来实现。图中的LAN/iBus是建立在Intranet上的,它是与Internet是不能直接互通的,这保证了内部系统的安全性。Web Server与Internet相连,直接在Internet上提供服务,另一方面它通过Web Connector与Intranet上的iBus相连。数据库在Intranet中的连结有两中方式,一是通过ODBC或数据库系统提供的连结手段直接与应用服务器相连;一是开发DB Connector将数据库服务挂接在iBus上。
2.软件模块划分及其逻辑关系
客户端模块,客户端使用标准的Browser为用户提供GUI的用户操作界面,信息和数据使用HTML规范进行描述和布局,一些特殊的数据表现形式可以使用Applet的方式来表现。用户输入信息可以使用HTML FORM(可同时使用JavaScript来完成客户端的数据合法性检查功能)或Applet的图形界面方式来收集。客户端主要关注于输出信息的显示和用户输入信息的收集,对信息和数据的解释、处理等均在不在客户端进行。这样客户端可以达到零布署开销的目标。
DNS / Web Redirector的目的是为客户端浏览器在发起连结时为其分配一个特定的Web服务器。它对客户端和Web服务器都是透明的,它仅在浏览器发起连结时参与服务器的分配,一旦浏览器首次访问Web服务器后它就不再与浏览器和Web服务器发生关系。DNS / Web Redirector的具体工作模式在后面作详细描述。
Web Server + Web Connector是服务的提供者,客户端的所有请求都由它首先接收,服务系统的所有结果都由它送回客户端。一方面它提供标准Web Server的服务功能,另一方面它还作为一个代理服务器,将应用服务器的同能提供给客户浏览器。在业务系统中需要的连结保持、状态转换、权限控制等都由其上的Web Connector部分提供。它部队业务操作的具体数据作任何处理,它是在客户端浏览器和应用服务器之间转发业务数据包(Message Block)。任何的业务系统在通信上都可以抽象成请求数据包(Request Message Block)和应答数据包(Response Message Block)的交互。Web Connector所提供的功能就是完成这种请求/应答的数据包转发,同时将请求/应答的数据交互与特定的连结、状态、权限等业务系统所必须的功能关联起来。
Application Server则实现具体的商业逻辑,完成具体的业务功能。连结保持、状态转换和权限控制等功能主要在Web Connector中完成,Application Server则以请求/应答的方式来实现具体的商业逻辑功能。在一个具体的应用系统设计时,首先抽象出业务系统的商业逻辑,将整个业务分解成一系列的具体服务,Application Server则以在iBus上为每一个服务发布一个主题(publish subject)的方式来提供服务。在完成具体业务的过程中,Application Server将需要数据库服务器提供支持,Application Server可以在Intranet上直接访问数据库,也可以通过访问数据库系统在iBus上发布的服务来得到数据库系统的支持。通常绝大部分的商业逻辑的实现都集中在Application Server上,这使得商业逻辑的管理、控制和修改能较为容易地完成,简化整个系统的维护工作。
Database部分主要关注的是业务数据的保存、检索和备份等通常的数据库功能。这部分在整个系统中的复杂程度将因不同的应用系统有较大的变化。提供对业务数据的存储、访问是其最基本的功能,进而可以形成Data mart, Data warehouse最终将产生Data mining的需求。业务、统计、分析数据将随企业的发展和业务应用系统的运行而不断积累,这些数据是一个企业的重要财富,如何合理有效地使用这些数据将是一个长期的任务,这已是N层架构应用系统之外的论题了。
三、系统的可规模化
为了保证系统具有尽可能好得可扩展性达到可规模化的特性,在N层架构应用系统中采用两级可扩展的设计。
1.Internet上的可规模化
第一级可扩展性在Internet网上实现,如下图所示。
图表三、Internet上的可规模化机制
为了达到这一级的可扩展性,可以在Internet上布署多个Web Server,这些Web Server使用完全相同的软件系统,提供完全相同的服务功能。Web Server都直接连结到Internet上,都是在Internet范围中可访问的,它们各自拥有不同IP地址。Internet上所有的客户请求将由DNS/Web Redirector调度,分摊到这些Web Server上,这样每一个Web Server的负载就得到控制以保证服务系统的响应性能。
DNS/Web Redirector在实现这种负载调度时有两种方法,一是使用DNS技术,一是使用HTTP Redirect技术。使用DNS技术时,所有的Web Server将在Internet上注册一个共同的域名,DNS/Web Redirector上将运行DNS服务,提供对这个域名的解析服务。通过配置DNS服务器可以使得其在响应每次对这个域名的解析请求时给出不同IP地址的响应,这个IP地址就是所有这些Web Server中的一个。这样所有用户的访问请求就被分摊到不同的Web Server上了。使用HTTP Redirect技术时,在Internet上注册的域名将被解析到一台特定的主机上Web Redirector。域名解析的功能由系统之外的Internet服务提供,所部署的所有Web Server则无须拥有域名。在Web Redirector运行Web服务,并将其缺省主页指定为一个CGI(或其他的Web Server扩展技术,如ISAPI, NSAPI,Servlet)程序上,该程序仅回应一个HTTP的Redirect命令。通过给出不同的Redirect命令就可以将用户的访问请求转移到已布署的Web Server中的一个上,以达到分摊负载的目的。
在使用上述调度技术时,一种简单的调度算法就是依次将访问请求转移到不同的Web Server上,更为优化的方法是,各个Web Server实时将自己的负载情况反馈到DNS/Web Redirector上,这样可以实现智能的负载调度。
2.Intranet上的可规模化
另一级的可扩展性在Intranet上实现,如下图所示。
图表四、Intranet上的可规模化机制
这一级的可扩展性的关键在于使用iBus技术。由于Web Server + Web Connector只处理连结的维持和数据包的转发,它对连结数量的处理能力是较强的。如果具体业务中的处理是一些耗时的运算,Application Server的服务能力就成为系统性能的瓶颈。由于Web Connector与Application Server之间的数据交换是通过iBus来完成的,因此可以在iBus上布署多个具有完全相同软件系统的Application Server来分摊这些业务处理的工作以达到提高系统整体性能的目的。iBus的订阅/发布、广播发送等机制使得系统的可扩展性得到很好的保证。 当数据库是用于信息发布的只读模式,多份重复布署仍然可用于提高系统的整体性能。若是业务数据库,操作中存在对数据的修改时,数据库的多份重复布署将会导致数据一致性的问题,这时提高性能的方法是将数据根据不同的业务类型分到不同的数据库中去。这时整个系统的结构如下图所示。
图表五、双总线体系结构 四、用户端与Web Connector间的连结维持
图表六、客户端的软件层次结构 Dynamic HTML可以很好地进行公开信息的发布,通过HTML Form机制可以从浏览器中得到用户检索等简单操作的输入信息。对于无须身份认证、访问控制的内容,在Web Server上可以使用通常的CGI技术获取用户的请求、查询条件,通过Web Connector还可以使用应用服务其提供的后台服务,结果使用HTML方式描述,并可直接回送到客户端的浏览器。如果进一步使用Applet技术,还可以在客户端实现更为友好的交互式显示模式。无论是使用DHTML技术还是HTML Form加上Server方扩展(如CGI, ISAPI, NSAPI, fastCGI和servlet等)。它们适合处理的业务都是每次请求/应答基本独立,相互无关联的情况。对于一些更为复杂的应用,要求前后操作具有相关性,客户与服务器端各自保持状态的变化且状态是相关的。在这种情形之下,更好的解决方案是将客户端的所有操作保持在一个Applet中完成,由Applet直接与Web Server交互数据来完成请求/应答数据的交互。 图表七、Web Connector软件模块结构 所有来自客户端的请求(浏览器和Applet)都首先发送给Web Server(HTTP Daemon),然后由httpd启动相应的CGI/servlet扩展,CGI/servlet模块仅对上传的数据进行简单的检查和打包工作然后就传给Web Connector Daemon,CGI/servlet模块本身并不处理连接,它是以一种无连接的方式转发一个请求再回送应答。连接的维持和记录由Web Connector Daemon建立起连接记录表来完成。 正是基于上述的原因,我们选择C++和Java作为主要的开发工具。这样既能保证应用系统的企业强度,同时又兼顾到了系统在跨平台一致性和运行效率两方面的要求。 |