在服务的数据驱动中使用三层架构

简介: 【6月更文挑战第17天】三层架构是软件设计中的一种经典模式,将应用分为表示层(UI)、应用层(BLL)和数据层(DAL)。相比于双层架构,三层架构提供了更好的模块化和安全性。多层架构虽少见,但三层架构在现代云原生技术中依然重要,常与微服务结合使用。

1 数据驱动的三层结构

每一种软件组织架构方式通常脱胎于其他架构方式,既有相似性,又具有某些特定场景限定的特征。

比如,应用程序的开发分层,大多是逻辑上的分层。 物理上的分层常见于网络设备环境。

而三层架构允许各层独立开发和扩展,提高开发速度、可扩展性和安全性。表示层处理用户交互,应用层执行业务逻辑,而数据层管理存储。在Web开发中,Web服务器是表示层,应用服务器是业务逻辑层,数据库服务器是数据层。

treeoflife6.png

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)的处理。

目录
相关文章
|
消息中间件 负载均衡 中间件
⚡ 构建真正的高性能即时通讯服务:基于 Netty 集群的架构设计与实现
本文介绍了如何基于 Netty 构建分布式即时通讯集群。随着用户量增长,单体架构面临性能瓶颈,文章对比了三种集群方案:Nginx 负载均衡、注册中心服务发现与基于 ZooKeeper 的消息路由架构。最终选择第三种方案,通过 ZooKeeper 实现服务注册发现与消息路由,并结合 RabbitMQ 支持跨服务器消息广播。文中还详细讲解了 ZooKeeper 搭建、Netty 集群改造、动态端口分配、服务注册、负载均衡及消息广播的实现,构建了一个高可用、可水平扩展的即时通讯系统。
1353 0
|
运维 监控 负载均衡
动态服务管理平台:驱动微服务架构的高效引擎
动态服务管理平台:驱动微服务架构的高效引擎
451 17
|
运维 监控 负载均衡
探索微服务架构下的服务治理:动态服务管理平台深度解析
探索微服务架构下的服务治理:动态服务管理平台深度解析
|
运维 监控 安全
探索微服务架构下的服务治理:动态服务管理平台的力量
探索微服务架构下的服务治理:动态服务管理平台的力量
|
Cloud Native Java API
聊聊从单体到微服务架构服务演化过程
本文介绍了从单体应用到微服务再到云原生架构的演进过程。单体应用虽易于搭建和部署,但难以局部更新;面向服务架构(SOA)通过模块化和服务总线提升了组件复用性和分布式部署能力;微服务则进一步实现了服务的独立开发与部署,提高了灵活性;云原生架构则利用容器化、微服务和自动化工具,实现了应用在动态环境中的弹性扩展与高效管理。这一演进体现了软件架构向着更灵活、更高效的方向发展。
|
存储 Linux KVM
Proxmox VE (PVE) 主要架构和重要服务介绍
Proxmox VE (PVE) 是一款开源的虚拟化平台,它基于 KVM (Kernel-based Virtual Machine) 和 LXC (Linux Containers) 技术,支持虚拟机和容器的运行。PVE 还提供高可用集群管理、软件定义存储、备份和恢复以及网络管理等企业级功能。
5246 7
|
文字识别 运维 监控
架构解密|一步步打造高可用的 JOCR OCR 识别服务
本文深入解析了JOCR OCR识别服务的高可用架构设计,涵盖从用户上传、智能调度、核心识别到容错监控的完整链路,助力打造高性能、低成本的工业级OCR服务。
587 0
架构解密|一步步打造高可用的 JOCR OCR 识别服务
|
消息中间件 人工智能 监控
文生图架构设计原来如此简单之分布式服务
想象一下,当成千上万的用户同时要求AI画图,如何公平高效地处理这些请求?文生图/图生图大模型的架构设计看似复杂,实则遵循简单而有效的原则:合理排队、分工明确、防患未然。
695 14
文生图架构设计原来如此简单之分布式服务
|
存储 JavaScript 开发工具
基于HarmonyOS 5.0(NEXT)与SpringCloud架构的跨平台应用开发与服务集成研究【实战】
本次的.HarmonyOS Next ,ArkTS语言,HarmonyOS的元服务和DevEco Studio 开发工具,为开发者提供了构建现代化、轻量化、高性能应用的便捷方式。这些技术和工具将帮助开发者更好地适应未来的智能设备和服务提供方式。
基于HarmonyOS 5.0(NEXT)与SpringCloud架构的跨平台应用开发与服务集成研究【实战】
|
消息中间件 存储 安全
分布式系统架构3:服务容错
分布式系统因其复杂性,故障几乎是必然的。那么如何让系统在不可避免的故障中依然保持稳定?本文详细介绍了分布式架构中7种核心的服务容错策略,包括故障转移、快速失败、安全失败等,以及它们在实际业务场景中的应用。无论是支付场景的快速失败,还是日志采集的安全失败,每种策略都有自己的适用领域和优缺点。此外,文章还为技术面试提供了解题思路,助你在关键时刻脱颖而出。掌握这些策略,不仅能提升系统健壮性,还能让你的技术栈更上一层楼!快来深入学习,走向架构师之路吧!
898 12