N-tier architecture N层架构 (转)
下面的内容既有我的理解,也有翻译的内容,翻译的书名为:
<<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/
【转载】http://www.cnblogs.com/virusswb/archive/2009/12/15/1624962.html
【说明】转载请标明出处,谢谢
N-tier architecture N层架构 (转)的更多相关文章
- [Architecture Design] 跨平台架构设计
[Architecture Design] 跨平台架构设计 跨越平台 Productivity Future Vision 2011 在开始谈跨平台架构设计之前,请大家先看看上面这段影片,影片内容是微 ...
- MVC5 网站开发之五 展示层架构
展示层由Ninesky.Web项目实现,负责网站内容的显示,项目包含Member和Control两个区域. 目录 奔跑吧,代码小哥! MVC5网站开发之一 总体概述 MVC5 网站开发之二 创建项 ...
- ABP理论学习之N层架构
返回总目录 自从写这个系列博客之后,发现很多园友还是希望有个直接运行的demo,其实在github上就有官方的demo,我直接把这demo的链接放到这里吧,另外,我分析,这些找不到demo的同学,很可 ...
- 回头再看N层架构(图解)
不知不觉来博客园已经快两半了,时间过的真快. 这次的目标是再回顾一下传统的N层架构并且分析一下在DDD中的N层架构. 一.先来看一看传统的N层架构 N-层架构的出现,主要是由于观注点的分离而产生,这三 ...
- [译]ABP框架使用AngularJs,ASP.NET MVC,Web API和EntityFramework构建N层架构的SPA应用程序
本文转自:http://www.skcode.cn/archives/281 本文演示ABP框架如何使用AngularJs,ASP.NET MVC,Web API 和EntityFramework构建 ...
- ABP-N层架构
ABP理论学习之N层架构 返回总目录 自从写这个系列博客之后,发现很多园友还是希望有个直接运行的demo,其实在github上就有官方的demo,我直接把这demo的链接放到这里吧,另外,我分析, ...
- 1.2 N层架构
N层架构 介绍 ABP架构 其他(通用) 领域层 应用层 基础设施层 网络和展现层 其他 总结 介绍 应用程序代码库的分层架构是被广泛认可的可以减少程序复杂度.提高代码复用率的技术.为了实现分层架构, ...
- MVC中的七层架构
工厂模式的七层架构 1.创建Model,实现业务实体. 2.创建IDAL,实现接口. 3.创建DAL,实现接口里的方法. 4.创建DBUtility,数据库操作类5.创建DALFactory,抽象工程 ...
- ABP官方文档翻译 1.2 N层架构
N层架构 介绍 ABP架构 其他(通用) 领域层 应用层 基础设施层 网络和展现层 其他 总结 介绍 应用程序代码库的分层架构是被广泛认可的可以减少程序复杂度.提高代码复用率的技术.为了实现分层架构, ...
随机推荐
- Hadoop3.1.1架构体系——设计原理阐述与Client源码图文详解 : 总览
一.设计原理 1.Hadoop架构: 流水线(PipeLine) 2.Hadoop架构: HDFS中数据块的状态及其切换过程,GS与BGS 3.Hadoop架构: 关于Recovery (Lease ...
- python正则分组
python的正则表达式本身每一个字符串都是独立的 看下面的例子就理解分组的含义了~ ab*表示的是查找a和(0个或多个b),就是*是单独针对b的,所以返回a (ab)*则表示ab是一个组是一个整体, ...
- Mysql查看连接数(连接总数、活跃数、最大并发数)
show variables like '%max_connection%'; set global max_connections=1000;
- 关于AutoCompleteTextView的用法:根据输入的自动匹配关键词
- 洛谷 P2058 海港(模拟)
题目链接:https://www.luogu.com.cn/problem/P2058 这是一道用手写队列模拟的一道题,没有什么细节,只是注意因为数不会很大,所以直接用数作为数组下标即可,不用用map ...
- Python环境搭建后,多种方式的使用进行程序的执行。
Python环境搭建后,可以使用多种方式进行程序的执行. 第一种: 进入CMD命令提示符 输入python 进入python环境(可以使用Ctrl+C退出) 输入print("hello&q ...
- async+队列queue.Queue()
import queue import time import random import threading import asyncio import logging logging.basicC ...
- pysftp-tools
import pysftp import paramiko import os import unittest import json import warnings warnings.filterw ...
- Java日期时间API系列21-----Jdk8中java.time包中的新的日期时间API类,xk-time时间转换,计算,格式化,解析的工具
通过工作之余,对Java8中java.time包源码的不断学习,使用和总结,开发了xk-time,初步完成,欢迎试用和提出建议! xk-time xk-time is a datetime conve ...
- CF1067C Knights 构造
题目链接:https://codeforc.es/contest/1067/problem/C 题意:有一个无限大的棋盘,棋盘上初始放置了\(n\)个国际象棋马.如果某一个格子没有放马且能够被\(4\ ...