下面的内容既有我的理解,也有翻译的内容,翻译的书名为:

<<Expert C# 2008 Business Objects >>http://www.douban.com/subject/3442908/

n层架构,包括两方面的架构。一方面是n-tier 的物理架构,一方面是n-tier的逻辑架构。笼统的说呢,物理架构就是计算机和其他辅助硬件的架构,要分层,目的是获得高性能Performance、高扩展性Scalability、高安全性Security、和高容错性Fault tolerance;逻辑架构指的是代码设计方面的架构,代码的分层,主要的目的都是方便我们开发人员的,主要好处:

l  使代码更有逻辑性

l  更加容易维护

l  更好的代码复用

l  更好的团队开发体验

l  更清晰的代码职责

在N-tier物理架构带给我们的好处中,高性能和高扩展性、高安全性、高容错性是成反比的,需要我们在设计的时候来衡量。其实,是层数越少,性能越高,减少了网络通信量,但是其他性能就会下降,其他性能如果高了,就意味着需要加加入更多的层,至少是增加验证,增加错误的处理,这些都会带来性能的损耗。

这就需要我们针对具体的客户环境进行设计,例如银行类系统,那么他的安全性好容错性当然要比高性能更重要,用安全来换取一些性能的损耗是值得的;但是某些要求实时性高,用户体验更重要的场合,安全的地位相对要低一些,要保证处理的及时性,保证网站或者系统的运行性能。

逻辑的n-tier架构,这里我引用CSLA.NET的设计,5-layer login architecture。

五层的作用分别是

Layer

Roles

Interface

向用户呈现信息和收集用户的输入

Interface Control

扮演用户和逻辑层之间的角色,将用户的输入交给逻辑层,然后将返回结果给用户

Business Login

提供所有的业务逻辑规则,验证,操作,处理和应用程序的安全保证

Data Access

扮演业务逻辑层和数据管理层的中间角色,包装和包含所有的数据访问技术、数据库和数据结构

Data Storage and Management

物理的创建、获取、更新和删除存储在持久存储中的数据

逻辑的五层可以分布在单一物理环境或者是多层物理环境,逻辑的一层可以分布在多个物理的一层,多个逻辑的层也可以分布在一个物理层中。

在两层的物理环境中,通常是将数据存储和管理层分离出来,也就是用单独的服务器安装MS SQL或者是Oracle这类数据库管理系统,使得数据库管理系统充分发挥它的作用。

两层物理架构中,MS SQL Server最多可以处理350人左右的并发请求。两层物理架构极大的提高了性能,但是他们不如三层物理架构的可扩展性好。一个好的原则是,如果你的并发用户超过50甚至到了100,你最好将数据访问层也分离出来,组成三层物理架构。

将数据访问层分离出来的另外一个原因是安全。因为数据访问层包含和数据库的直接交互,数据访问层所在的机器被数据库服务器所信任,与其将这种信任放在一个客户端机器上,不如将它独立在一个应用服务器中。这样用户的计算机就不会直接被数据库服务器信任,这样就增加了数据库服务器的安全。

 

也可以将业务逻辑层分布在一个应用服务器上,这样将给那些非交互性的处理,例如:批量更新、密集的业务数据计算,带来好处。大部分的应用都允许用户进行交互,因此都有一个明确的需要,将业务逻辑层分布在一个应用服务器上,来提升交互性。

前面讲过了,可以将一个逻辑的层分布在多个物理的层中,你可以将数据库访问层分布在一个应用服务器中,将业务逻辑层分布在客户端应用层和应用服务器层中。在.NET中,如果所有用户链接数据库都使用相同的用户ID和密码,你可以使用连接池来管理所有的用户。这样可以使用更少的数据库连接代替每个客户直接连接数据库服务器的做法。实际中这些需要依赖于应用的细节,但是这就意味着,两三个数据库连接可以支持150到200的并发量。

当然了,这么做,所有的请求都需要经过外部网络,这就增加了潜在问题(例如性能的下降)。这种性能的花销,换来了大的可扩展性,因为这种物理配置比2-tier可以处理更多的并发请求。

将业务逻辑层部署在客户端和服务器端,这种应用可以完全的发挥两端计算机的长处。一些验证和业务处理可以放在客户端计算机上,这样提供了丰富的、很好的客户交互体验,同时非交互性的处理也能在应用服务器上高效的运行。

如果设计的好,这样的架构可以支持上前用户的并发请求,同时提供足够的性能保证。

性能最优的web client

在WPF和WinForm应用中,通过较少物理层的数量来获得好的系统性能。但是,这类交换在web方案中就不一样了:在增加性能和可扩展性的同时,对于安全的花销,下面也将证明。

为了在web应用中获取最佳的性能,将大部分代码运行在一个单一机器的环境中是可取的。

接口层一定是物理分离的,因为他运行在浏览中,但是接口控制层、业务逻辑层、数据访问层可以运行在相同的物理机器上,同时处理。有时候,你会把物理存储也放在一起,但是这只适用于很小的应用。

上面的这幅图中展示的是最优的性能,同时可以获取好的可扩展性,因为web服务器可以使web服务器场的一部分,所有的web服务器运行相同的代码。

这种类型的安装提供了很好的数据库连接池,因为每台web服务器可以处理上百的请求,所有的数据库连接都在池中。

除非来自服务器场的连接占了主要地位,否则不需要分离出应用服务器,因为额外的应用服务器增加了物理的层,带来了可扩展性的同时也降低的性能。在这样的环境中考虑容错性是必要的,因为大量的应用服务器会出现点的失败。

高安全的web client

 

在前面我们已经讨论过,我们的许多项目规定web服务器不能直接访问数据库。Web服务器一定要运行在DMZ(军事隔离区)中,夹在外部防火墙和内部防火墙中。Web服务器一定会通过内部防火墙的一个服务和内部的数据库或者是其他系统进行交互。上图的虚线代码防火墙。

在winform的解决方案中,这种业务逻辑层部署在web服务器和应用服务器两层的方式带来很多的好处。

分离数据访问层,将它运行在一个分布的应用服务器中,增加了应用的安全。但是,这样做带来了性能损耗,这在前面已经讨论过了。这种配置大概会导致性能下降50%。从另外一个角度看,这种配置的可扩展性很好。比如说第一个web配置,你可以通过实现一个服务器场类提高可扩展性,每一个服务器都运行相同的接口控制层和业务逻辑代码。

【Blog】http://virusswb.cnblogs.com/

【MSN】jorden008@hotmail.com

【转载】http://www.cnblogs.com/virusswb/archive/2009/12/15/1624962.html

【说明】转载请标明出处,谢谢

N-tier architecture N层架构 (转)的更多相关文章

  1. [Architecture Design] 跨平台架构设计

    [Architecture Design] 跨平台架构设计 跨越平台 Productivity Future Vision 2011 在开始谈跨平台架构设计之前,请大家先看看上面这段影片,影片内容是微 ...

  2. MVC5 网站开发之五 展示层架构

    展示层由Ninesky.Web项目实现,负责网站内容的显示,项目包含Member和Control两个区域.   目录 奔跑吧,代码小哥! MVC5网站开发之一 总体概述 MVC5 网站开发之二 创建项 ...

  3. ABP理论学习之N层架构

    返回总目录 自从写这个系列博客之后,发现很多园友还是希望有个直接运行的demo,其实在github上就有官方的demo,我直接把这demo的链接放到这里吧,另外,我分析,这些找不到demo的同学,很可 ...

  4. 回头再看N层架构(图解)

    不知不觉来博客园已经快两半了,时间过的真快. 这次的目标是再回顾一下传统的N层架构并且分析一下在DDD中的N层架构. 一.先来看一看传统的N层架构 N-层架构的出现,主要是由于观注点的分离而产生,这三 ...

  5. [译]ABP框架使用AngularJs,ASP.NET MVC,Web API和EntityFramework构建N层架构的SPA应用程序

    本文转自:http://www.skcode.cn/archives/281 本文演示ABP框架如何使用AngularJs,ASP.NET MVC,Web API 和EntityFramework构建 ...

  6. ABP-N层架构

    ABP理论学习之N层架构   返回总目录 自从写这个系列博客之后,发现很多园友还是希望有个直接运行的demo,其实在github上就有官方的demo,我直接把这demo的链接放到这里吧,另外,我分析, ...

  7. 1.2 N层架构

    N层架构 介绍 ABP架构 其他(通用) 领域层 应用层 基础设施层 网络和展现层 其他 总结 介绍 应用程序代码库的分层架构是被广泛认可的可以减少程序复杂度.提高代码复用率的技术.为了实现分层架构, ...

  8. MVC中的七层架构

    工厂模式的七层架构 1.创建Model,实现业务实体. 2.创建IDAL,实现接口. 3.创建DAL,实现接口里的方法. 4.创建DBUtility,数据库操作类5.创建DALFactory,抽象工程 ...

  9. ABP官方文档翻译 1.2 N层架构

    N层架构 介绍 ABP架构 其他(通用) 领域层 应用层 基础设施层 网络和展现层 其他 总结 介绍 应用程序代码库的分层架构是被广泛认可的可以减少程序复杂度.提高代码复用率的技术.为了实现分层架构, ...

随机推荐

  1. Seekbar扩大点击区域

    //扩大点击区域private void enlargeSeekBar() { mContentView.setOnTouchListener(new OnTouchListener() {//mCo ...

  2. c++指针,引用,日期,输入输出和数据结构

    1,指针 指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址.就像其他变量或常量一样,您必须在使用指针存储其他变量地址之前,对其进行声明.指针变量声明的一般形式为: int *ip; /* ...

  3. 【红黑树】的详细实现(C++)

    红黑树的介绍 红黑树(Red-Black Tree,简称R-B Tree),它一种特殊的二叉查找树.红黑树是特殊的二叉查找树,意味着它满足二叉查找树的特征:任意一个节点所包含的键值,大于等于左孩子的键 ...

  4. [lua]紫猫lua教程-命令宝典-L1-01-01. Lua环境与IDE

    网上大把的lua教程  不过紫猫老师的教程向来都是讲的非常仔细 所以最近天气已经36+了 魔兽世界还需要冲飞行声望  懒得写单子根本没有单子,正好认认真真的看下紫猫老师的lua教程 紫猫老师的lua教 ...

  5. 如何将博客内容输出到pdf

    可以按照三类网页插件:Clearly,Instapaper 和 Readability,实际安装发现,第一个装不上,只有最后一个好用.在firefox或者chrom浏览器装好后,右键switch to ...

  6. centos 7 配置samba

    yum -y install samba samba-common samba-client vi /etc/samba/smb.conf  #修改samba服务器的主配置文件 [global] wo ...

  7. 《gPRC使用protobuf构建微服务》阅读笔记

    首先我需要去了解一些概念,根据百度百科了解到: l  微服务架构:微服务架构是一项在云中部署应用和服务的新技术.微服务可以在“自己的程序”中运行,并通过“轻量级设备与HTTP型API进行沟通”. l  ...

  8. 题解 SP19148【INS14G - Kill them All】

    SP19148[INS14G - Kill them All] 前置知识:组合数 乘法逆元 感觉其他博客讲的不是很清楚,也没有说组合数公式是怎么来的,我这样数论极菜的萌新看了好久才想明白qwq.. 还 ...

  9. 分段函数&数学函数

    本题要求计算下列分段函数f(x)的值(x为从键盘输入的一个任意实数): 输入格式: 直接输入一个实数x 输出格式: 在一行中按“f(x)=result”的格式输出,其中x与result都保留三位小数. ...

  10. mybatis - MybatisAutoConfiguration

    一. MybatisProperties 在使用 mybatis 时, 还需要对mapper进行配置: mybatis: mapper-locations: classpath:mapper/**Ma ...