1 数据驱动的三层结构
每一种软件组织架构方式通常脱胎于其他架构方式,既有相似性,又具有某些特定场景限定的特征。
比如,应用程序的开发分层,大多是逻辑上的分层。 物理上的分层常见于网络设备环境。
而三层架构允许各层独立开发和扩展,提高开发速度、可扩展性和安全性。表示层处理用户交互,应用层执行业务逻辑,而数据层管理存储。在Web开发中,Web服务器是表示层,应用服务器是业务逻辑层,数据库服务器是数据层。
2 简介三层架构
三层架构是一种十分完善的软件应用程序架构,它将应用程序组织成三个逻辑和物理计算层:
表示层(或用户界面)
应用层(负责处理数据)
数据层(负责存储和管理与应用程序相关的数据)
三层架构的主要优势在于,由于每层都在自己的基础架构上运行,因此每层都可以由独立开发团队同时开发,并且可根据需要进行更新或扩展,而不会影响其他层。
数十年来,三层架构都是C/S(客户机/服务器)应用程序的主要架构。
目前,大多数三层应用程序的目标是实现现代化、使用云原生技术(例如容器和微服务)以及迁移到云端。
3 三层架构细则
- 表示层
表示层是应用程序的用户界面和通信层,最终用户在此与应用程序进行交互。
其主要目的是向用户显示信息并从用户收集信息。
此顶级层的运行方式多样,例如,可以在 Web 浏览器上运行、作为桌面应用程序运行,或者作为图形用户界面 (GUI) 运行。
Web 表示层通常使用 HTML、CSS 和 JavaScript 开发。 可根据平台以各种不同语言编写桌面应用程序。
- 应用层
应用层,也称为逻辑层或中间层,是应用程序的核心。
在这一层,通过业务逻辑(即一组特定的业务规则)来处理表示层中收集的信息,有时还包括数据层中的其他信息。
应用层还可以添加、删除或修改数据层中的数据。
应用层通常使用 Python、Java、Perl、Go 或 Ruby 开发,并使用 API 调用与数据层通信。
- 数据层
数据层有时称为数据库层、数据访问层或后端,用于存储和管理应用程序所处理的信息。
这可以是关系 数据库管理系统,例如 PostgreSQL、MySQL、MariaDB、Oracle、DB2、Informix 或 Microsoft SQL Server;
也可以是 NoSQL 数据库服务器,如 Cassandra、CouchDB 或 MongoDB。
在三层应用程序中,所有通信均通过应用层进行。 表示层和数据层无法直接相互通信。
- 架构层 (tier) 与功能层 (layer)
在讨论三层架构时,“layer”(架构层)与“tier”(功能层)通常被互换使用,比如“表示层 (presentation layer)”或“业务逻辑层 (business logic layer)”。
这两者并不相同。 “功能层 (layer)”是指软件的功能分区,而“架构层 (tier)”则是指在基础架构上运行的独立于其他分区的软件功能分区。
例如,手机中的“联系人”应用是一个三层 (layer) 应用程序,但又是一个单层 (tier) 应用程序 ,因为三个层 (layer) 都在您的手机上运行。
这一区别很重要,因为功能层 (layer) 无法提供与架构层 (tier) 相同的收益。
4 三层架构的优势
同样,三层架构的主要优势在于其逻辑功能和物理功能的分离。
每一层都可以在最能满足其功能需求的单独操作系统和服务器平台上运行,例如 Web 服务器、应用程序服务器或数据库服务器。
每一层均在至少一个专用服务器硬件或虚拟服务器上运行,因此可以对每一层的服务进行定制和优化,而不会影响其他层。
其他优势(与单层或双层架构相比)包括:
加快了开发速度:因为每个层可以由不同团队同时开发,所以组织可以更快地将应用程序推向市场,而程序员也可以对每个层使用最新、最好的语言和工具。
提高了可扩展性:任何层都可以根据需要独立于其他层进行扩展。
改进了可靠性:一个层中的中断不太可能影响其他层的可用性或性能。
提升了安全性:由于表示层和数据层无法直接通信,因此设计良好的应用层可以充当某种内部防火墙,阻止 SQL 注入和其他恶意攻击。
Web 开发中的三层应用程序
在 Web 开发中,层具有不同的名称,但执行类似的功能:
Web 服务器是表示层,提供用户界面。
这通常是一个网页或网站,例如,供用户将产品添加到购物车、添加支付详细信息或创建帐户的电子商务站点。
内容可以是静态的,也可以是动态的,通常使用 HTML、CSS 和 Javascript 进行开发。
应用程序服务器对应于中间层,用于存放处理用户输入所用的业务逻辑。
以电子商务为例,这是用于查询库存数据库,以返回产品可用性或向客户概要文件添加详细信息的层。
此层通常使用 Python、Ruby、PHP 或 GO 来开发,运行诸如 Django、Rails、Symphony 或 ASP.NET 之类的框架。
数据库服务器是 Web 应用程序的数据层或后端层。
它依托数据库管理软件运行,如 MySQL、Oracle、DB2 或 PostgreSQL 等。
虽然三层架构很容易成为采用最广泛的多层应用程序架构,但是工作或研究中还可能会遇到其他架构。
- 双层架构
两层架构是原始的客户机/服务器架构,由表示层和数据层组成;业务逻辑位于表示层和/或数据层上。
在两层架构中,表示层(以及最终用户)可以直接访问数据层,并且业务逻辑通常会受到限制。
简单的联系人管理应用程序便是一个双层应用程序的例子,用户可以在其中输入和检索联系人数据。
- 多层架构
这是指任何具有多个层的应用程序架构。
但是,三层以上的应用程序很少,因为多出的层不会带来多少益处,但却会让应用程序运行更慢、更难管理且运行成本更高。
因此, 多层架构通常指的是三层架构。
5 小结
三层架构在客户端和数据库之间添加了一个“中间层”。系统的主要功能和业务逻辑都在中间层处理,也就是应用层。
通常结构模式可以,具体功能参考MVC的实现方式:
1.业务逻辑层:该层主要承担两大职责,一是定义业务领域对象,或称为业务实体,二是业务逻辑的具体实现。业务实体常称为Domain,而业务逻辑则是Service。
2.接口层(API层):该层用来对接UI层,为UI层提供数据集业务处理接口,一般将其称为Controller。此外,现在的应用开发一般会对接多种用户端UI层,所以这里往往使用Rest方式提供API接口,供各个应用端使用,因此也可以称之为API层。
3.数据接口层(DAO):负责业务实体对象的数据处理,如CRUD等,通常定义为Repository。该层开发往往会使用O/R Mapping技术。此外,数据接口层也包含对非关系型数据及文件或云存储(OSS)的处理。