关于大型asp.net应用系统的架构-架构的选择

简介: 前言   最近几年在.net方面的工作经历,让我长久以来(有几年了)想写关于大型asp.net应用系统架构文章的念头。之前和同事们聊天的时候说的都是一些思维片段,其中的想法不尽完善,聊完天再仔细想想,一些主意就逐渐清晰了。

前言

  最近几年在.net方面的工作经历,让我长久以来(有几年了)想写关于大型asp.net应用系统架构文章的念头。之前和同事们聊天的时候说的都是一些思维片段,其中的想法不尽完善,聊完天再仔细想想,一些主意就逐渐清晰了。现在终于付诸行动了,将一些想到的主意与大家一起探讨,也算是对过去几年在ASP.NET方面的一个总结。这对我来说也是一个学习过程。

  博客园有不少同仁在写系统架构或者企业应用架构方面的文章,我看过其中一些。就我看过的这些文章,我发现他们当中相当多的人写的是分层架构。从我的看法来说,分层是不错。但是如果是我自己写的话,我会从架构的选择来说起。那么应用程序的架构就有可能不选择分层的架构,而选择其他架构。另外我会从整个系统的角度来写,即从硬件和软件两个角度来思考一个系统。

  这些都是我的一些建议,希望对您有所帮助。

 

简介

 

  大型asp.net应用要考虑如何服务众多的访问者,同时还要保证每个访问者都获得高质量的服务。需要面对不同语言的用户;需要保证安全性;应用系统的伸缩性也是很强的,当服务器集群有点不足以担负压力时,可以向服务器集群中加入更多的服务器来增加整个应用系统的服务能力。服务器的可用性也会要求很高,一年的下线时间是很少的。服务器的灾难备份也是很好的,即使现在的机房遭受毁灭性打击,也有灾难备份可以恢复服务。服务器上跑的asp.net应用是可扩展的,具有很好的可扩展性,同时具有良好的可维护性。本系列文章将谈谈大型asp.net应用系统架构的诸多方面。本篇将谈到架构的选择。

 

架构的选择

 

架构的选择与应用程序的类型有关。这里说的是asp.net应用,那么Client-Server的架构就很显然排除了。剩下:

基于组件的架构

应用可以按组件划分,不用组件实现不同功能和逻辑,组件之间的接口规范有很好的定义。某些组件可以重用。

分层Layered的架构

应用被划分成了堆叠在一起的若干层,每一层完成特定的服务和功能,与其上下层接口,各层之间是调用被调用的关系。在最上面的层只有调用下面的一层,在中间的层则兼有调用和被调用。在最下面的层则是仅供上面的层调用。通常划分成UI层,商务逻辑层,数据层等,并且通常多个层都部署在同一台服务器上。

 

消息总线型的架构

应用程序按照预定义的格式来收发消息。有一个消息队列和消息存储,分发处理的任务。相关消息的事件被程序处理。支持不同的系统平台。消息总线里面有若干定义好的消息流,消息总线同各系统平台交换数据,支持不同的格式。将消息交由不同的处理程序处理。

Model, View, Controller(MVC)架构

用户交互的处理与UI显示分离

用户交互的处理和UI显示与数据分离

3Tier/N Tier的架构

Tier可以译成排。以与Layer(层)有所区别。将应用程序划分成一系列的服务,包括UI, Business(商业逻辑), 数据等服务。各Tier可部署在不同的服务器上。类似于分层(layer)的架构。通常分层(layer)不跨机器的边界,也即所有层(layer)都部署在一台服务器上。Tier是要跨机器的边界。各Tier之间用预定义的通信协议来通信,如WCF, Web service, 或者TCP/IP等。分层(layer)的各层(layer)之间的通信都是通过该编程语言的引用和调用来实现的。所以是有区别的。

 

面向对象的架构

应用可以划分成自给自足的可重用的对象集合,对象包含了数据和行为。各对象之间有消息交互。

面向服务的架构

 应用使用一个功能是通过调用一个服务。在服务提供者和调用者之间有通信合同和消息,通信合同定义了消息的格式和通信的方式。消息则包含通信的内容。面向服务的架构是“请求-响应”的工作模式。应用程序是以一种服务提供的,调用者需要向服务发送预定义好的请求消息,服务才做出响应。

 

这些架构类型都可以用来开发asp.net应用。我们可以从其中选择架构类型的组合来,比如:分层Layered的架构 + 面向服务的架构。MVC架构 + 消息总线型架构。具体的选则,取决于应用程序的要求。现在说一下如何选架构:

如果

  • 有若干现成组件,比如以前系统的ActiveX组件或者.net的组件
  • 应用程序足够简单而不需要分层的架构,通过调用这些组件就可完成大部分工作
  • 不同语言开发的组件需要结合在一起,如ASP.net需要调用VB写的COM+的组件
  • 应用程序需要支持插件技术,可以动态切换组件,例如用.net反射技术实现的插件技术

那么我们可以选择基于组件的架构。

如果

  • 应用程序比较复杂,不同的功能需要不同的层来各司其职,如数据访问,商务逻辑,表现等。
  • 有比较复杂的商务逻辑和流程。

那么我们可以选择分层的架构。

如果

  • 有若干已有系统并且这些系统之间有特定的交互
  • 需要让一个系统与外部的其他系统交互
  • 不同平台上的系统相互之间进行交互

那么我们可以选择消息总线型的架构

如果

  • 要获得分离的UI视图和处理逻辑
  • 要UI视图和处理逻辑与数据存储分离

那么我们可以选择Model,View,Controller(MVC)架构

如果

  • 应用全部在内部网里
  • 应用在互联网上,同时商务逻辑需要暴露给公众使用
  • 商务逻辑足够复杂,需要专门的服务器来提供商务逻辑服务。
  • 应用程序比较复杂,不同的功能分布在不同的服务器上,每一种功能,都可能是由一组服务器来提供。

那么我们可以选择3 Tier/N Tier架构

如果

  • 相关商业领域有足够多的现实对象(这些对象通常是相关商务人员口中的名词),并且这些对象之间有交互
  • 应用比较复杂,需要更多的抽象
  • 对象的数据和行为都需要封装以利重用
  • 有足够的资源来做深入的面向对象分析,如时间,人力等。

那么我们可以选择面向对象的架构。

如果

  • 应用需要支持平台无关性
  • 多个应用程序的功能放进一个单一的界面来提供
  • 采用请求-响应模式运行
  • 需要开发软件加服务(Software plus service),软件即服务(Software as a service)类型的应用,或者基于云计算的应用

那么我们可以选择面向服务的架构。

 

针对目前的场景:大型ASP.NET应用,那么它最基本的需求可能是这样的:

同时访问的用户将会是相当多的,比如几千个,上万个。

7x24小时都有大量用户访问

某些地方需要用户登录以获取一些需要授权才能获得的信息

 

我们可能选择的架构组合可能是这样的:

3Tier/N Tier的架构

Model, View, Controller(MVC)架构结合3Tier/N Tier的架构

3Tier/N Tier的架构结合面向服务的架构

3Tier/N Tier的架构结合面向对象的架构

当然也有可能是其他的组合。

  分层Layered的架构不适合大型的ASP.NET应用。分层Layered的架构通常将UI层,商务逻辑,数据访问层都部署在同一台服务器上,首先一台服务器不能负担众多的用户,还有复杂的商务逻辑不是一台服务器能全部担负的。所以分层Layered的架构不适合大型的ASP.NET应用。小型的ASP.NET应用才适合分层Layered的架构。

  基于组件的架构也不适合大型ASP.NET应用。通常来说大型的ASP.NET应用都是相当复杂的,它的UI界面,商务逻辑,数据都是复杂的。不会简单到调用几个控件就完成了大部分的工作,大型的ASP.NET应用的每一个Tier排,都需要众多的服务器来分担压力,基于组件的架构的分布式能力有限,所以基于组件的架构是通常不会在大型ASP.NET应用里考虑的,除非是有若干个重要的控件,并且要考虑集成多个编程语言的控件时,才会考虑基于组件的架构。而且是在某个局部使用,即需要与其他架构一起结合起来用。

  消息总线型架构可以在某些场景下参与大型ASP.NET应用的开发。通常是需要将多个系统平台整合在一起的时候。消息总线型的架构需要结合其他的架构来共同构造ASP.NET应用。

  MVC架构关注的更多的是UI,用户交互的控制以及数据存取的分离。通常不能单独去构造一个大型的ASP.NET架构。需要结合3Tier/N Tier架构来共同构造大型ASP.NET的架构。MVC架构在UI还有用户交互上有固定的模式,所以可以在UI这一块应用MVC的架构,当涉及到MVC中的模型Model时,就可以扩展到3 Tier/N Tier的架构。即在访问模型Model时,就去访问另外一个服务器上的商务逻辑和数据存储。这个可以用下图来表示:

  面向对象的架构是更多地关注应用里面的面向对象分析,设计等过程产生出来的结果。这个结果体现了现实世界中的对象之间的交互作用。面向对象的架构需要结合其他架构如3 Tier/N Tier架构来共同构造ASP.NET应用程序的架构。

  面向服务的架构是在特定场景下需要的。即上面所说的,多个功能作为一项服务,提供一个统一的UI给外界用户。大型ASP.NET应用中通常需要将商务逻辑提供给公众访问。这时就可以采用面向服务的架构。面向服务的架构也需结合其他架构如3 Tier/N Tier架构来共同构造ASP.NET应用程序的架构。

   3 Tier/N Tier架构对于大型ASP.NET应用来说是必须的。它的每一Tier排都由若干服务器组成。只有这样才可以服务众多的用户。如上面的图所示,UI调用商务逻辑时得跨越机器的边界,调用另外一台服务器上的商务逻辑服务接口。

 

结束语

 

  架构的选择需要根据不同架构的特点和应用程序的需求来进行选择,有时候需要用多个架构的组合才足以满足一个复杂应用的需求。设计者需要根据实际情况来决定合适的架构选择。

 

接下来将展开谈谈3 Tier/N Tier架构......

目录
相关文章
|
25天前
|
数据采集 机器学习/深度学习 运维
量化合约系统开发架构入门
量化合约系统核心在于数据、策略、风控与执行四大模块的协同,构建从数据到决策再到执行的闭环工作流。强调可追溯、可复现与可观测性,避免常见误区如重回测轻验证、忽视数据质量或滞后风控。初学者应以MVP为起点,结合回测框架与实时风控实践,逐步迭代。详见相关入门与实战资料。
|
1月前
|
前端开发 JavaScript BI
如何开发车辆管理系统中的车务管理板块(附架构图+流程图+代码参考)
本文介绍了中小企业如何通过车务管理模块提升车辆管理效率。许多企业在管理车辆时仍依赖人工流程,导致违章处理延误、年检过期、维修费用虚高等问题频发。将这些流程数字化,可显著降低合规风险、提升维修追溯性、优化调度与资产利用率。文章详细介绍了车务管理模块的功能清单、数据模型、系统架构、API与前端设计、开发技巧与落地建议,以及实现效果与验收标准。同时提供了数据库建表SQL、后端Node.js/TypeScript代码示例与前端React表单设计参考,帮助企业快速搭建并上线系统,实现合规与成本控制的双重优化。
|
1月前
|
人工智能 自然语言处理 安全
AI助教系统:基于大模型与智能体架构的新一代教育技术引擎
AI助教系统融合大语言模型、教育知识图谱、多模态交互与智能体架构,实现精准学情诊断、个性化辅导与主动教学。支持图文语音输入,本地化部署保障隐私,重构“教、学、评、辅”全链路,推动因材施教落地,助力教育数字化转型。(238字)
|
1月前
|
人工智能 JavaScript 前端开发
GenSX (不一样的AI应用框架)架构学习指南
GenSX 是一个基于 TypeScript 的函数式 AI 工作流框架,以“函数组合替代图编排”为核心理念。它通过纯函数组件、自动追踪与断点恢复等特性,让开发者用自然代码构建可追溯、易测试的 LLM 应用。支持多模型集成与插件化扩展,兼具灵活性与工程化优势。
166 6
|
1月前
|
监控 数据可视化 数据库
低代码的系统化演进:从工具逻辑到平台架构的技术解读
低代码正从开发工具演变为支撑企业架构的智能平台,融合可视化开发、AI引擎与开放生态,实现高效构建、自动化运维与跨场景协同,推动数字化转型迈向智能化、系统化新阶段。
|
1月前
|
存储 人工智能 搜索推荐
拔俗AI助教系统:基于大模型与智能体架构的新一代教育技术引擎
AI助教融合大语言模型、教育知识图谱、多模态感知与智能体技术,重构“教、学、评、辅”全链路。通过微调LLM、精准诊断错因、多模态交互与自主任务规划,实现个性化教学。轻量化部署与隐私保护设计保障落地安全,未来将向情感感知与教育深度协同演进。(238字)
|
1月前
|
机器学习/深度学习 人工智能 搜索推荐
拔俗AI学伴智能体系统:基于大模型与智能体架构的下一代个性化学习引擎
AI学伴智能体系统融合大模型、多模态理解与自主决策,打造具备思考能力的个性化学习伙伴。通过动态推理、长期记忆、任务规划与教学逻辑优化,实现千人千面的自适应教育,助力因材施教落地,推动教育公平与效率双提升。(238字)
|
1月前
|
机器学习/深度学习 自然语言处理 算法
48_动态架构模型:NAS在LLM中的应用
大型语言模型(LLM)在自然语言处理领域的突破性进展,很大程度上归功于其庞大的参数量和复杂的网络架构。然而,随着模型规模的不断增长,计算资源消耗、推理延迟和部署成本等问题日益凸显。如何在保持模型性能的同时,优化模型架构以提高效率,成为2025年大模型研究的核心方向之一。神经架构搜索(Neural Architecture Search, NAS)作为一种自动化的网络设计方法,正在为这一挑战提供创新性解决方案。本文将深入探讨NAS技术如何应用于LLM的架构优化,特别是在层数与维度调整方面的最新进展,并通过代码实现展示简单的NAS实验。
|
1月前
|
Cloud Native Serverless API
微服务架构实战指南:从单体应用到云原生的蜕变之路
🌟蒋星熠Jaxonic,代码为舟的星际旅人。深耕微服务架构,擅以DDD拆分服务、构建高可用通信与治理体系。分享从单体到云原生的实战经验,探索技术演进的无限可能。
微服务架构实战指南:从单体应用到云原生的蜕变之路

热门文章

最新文章