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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 【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)的处理。

目录
相关文章
|
1天前
|
消息中间件 传感器 Cloud Native
事件驱动作为分布式异步服务架构
【6月更文挑战第25天】本文介绍事件驱动架构(EDA)是异步分布式设计的关键模式,适用于高扩展性需求。EDA提升服务韧性,支持CQRS、数据通知、开放式接口和事件流处理。然而,其脆弱性包括组件控制、数据交换、逻辑关系复杂性、潜在死循环和高并发挑战。EDA在云原生环境,如Serverless,中尤其适用。
18 2
事件驱动作为分布式异步服务架构
|
12天前
|
存储 数据处理 数据库
理解在服务架构中的事件驱动
【6月更文挑战第14天】网络架构和软件设计常基于ISO七层模型和三层应用架构,强调数据处理的重要性。事件驱动架构(EDA)以事件为中心,改变传统设计方式,解决系统问题。事件是触发通知或状态变化的操作,如用户下单。EDA适用于微服务通信、工作流程自动化、SaaS集成和基础设施自动化等场景,提高系统敏捷性和可扩展性。然而,EDA并非万能,需根据需求选择合适的设计方案。
66 1
理解在服务架构中的事件驱动
|
2天前
|
监控 API 数据安全/隐私保护
构建高效后端服务:微服务架构的实践与挑战
【6月更文挑战第23天】在现代软件开发中,微服务架构已成为设计高性能、可扩展后端系统的首选模式。本文将深入探讨微服务的设计原则、实践方法及其面临的技术挑战,旨在为开发者提供一个全面的微服务实施指南。
15 3
|
13天前
|
监控 安全 自动驾驶
基于java+单体服务 + 硬件(UWB定位基站、卡牌)技术架构开发的UWB室内定位系统源码 UWB定位技术 超宽带定位 高精度定位系统源码
基于java+单体服务 + 硬件(UWB定位基站、卡牌)技术架构开发的UWB室内定位系统源码 UWB定位技术 超宽带定位 高精度定位系统源码
28 3
|
12天前
|
数据库 SQL 存储
使用合理的架构保障服务的韧性
【6月更文挑战第14天】 该文介绍了软件韧性的概念和目标,强调了主从模式在确保业务连续性中的作用。主从模式通过全同步、半同步和异步技术保证数据一致性和系统可用性。这种模式常用于读写分离,缓解数据库负载,是保障业务韧性的常见策略。
72 0
使用合理的架构保障服务的韧性
|
14天前
|
消息中间件 运维 监控
微服务架构中的服务通信与数据一致性挑战
在微服务架构的海洋中,服务之间的通信和数据一致性问题犹如潜藏的暗礁和漩涡,随时可能威胁到整个应用的健康运行。本文将深入探讨微服务间通信机制的选择、数据一致性维护的策略,以及面对网络延迟和分区容忍性时如何保持系统的灵活性和健壮性。通过分析常见的模式和最佳实践,旨在为开发者提供一套应对这些挑战的航海图。
|
19天前
|
缓存 网络协议 算法
微服务架构之从类库到服务之服务发现
服务发现是分布式系统中的核心技术,其实现需要在可用性和一致性之间进行权衡。通过合理设计服务注册中心的架构,并采用有效的健康检查和缓存机制,可以提高系统的可靠性和可用性。不同的服务发现框架各有优缺点,选择适合的框架需要根据具体需求进行权衡和取舍。总之,服务发现的有效实现对于构建可靠的大型分布式系统至关重要。
15 3
|
1月前
|
缓存 微服务
01.【微服务架构】服务注册与发现:AP和CP,你选哪个? -- 客户端容错
【5月更文挑战第12天】客户端容错机制确保在服务端或注册中心故障时仍能正确发送请求。当服务端崩溃,由于延迟,客户端一段时间内仍会尝试发送请求。客户端应实施 failover 策略,即检测到调用失败后,切换到其他节点重试,并将故障节点从列表移除。延时通常等于服务端与注册中心心跳间隔加通知时间。若网络问题导致客户端无法访问服务端,客户端应发送心跳以检测服务端状态,成功则恢复,连续失败则视为崩溃。若客户端无法连接注册中心,它应使用本地缓存并考虑退出。
26 1
01.【微服务架构】服务注册与发现:AP和CP,你选哪个? -- 客户端容错
|
1月前
|
缓存 微服务
01.【微服务架构】服务注册与发现:AP和CP,你选哪个?-- 服务注册与发现模型
【5月更文挑战第1天】本文探讨了服务注册与发现的关键作用,在微服务架构中,这一概念常出现在面试中。文章深入讲解基础模型,包括服务端注册、心跳维持、客户端缓存及服务端下线流程,并强调了高可用性的重要性,涉及服务端崩溃检测、客户端容错和注册中心选型。通过分析客户端、注册中心和服务端之间的交互,提出如何应对潜在故障的策略,以构建稳定的微服务架构。
41 3
01.【微服务架构】服务注册与发现:AP和CP,你选哪个?-- 服务注册与发现模型
|
1月前
|
UED
服务架构中的数据驱动设计
【5月更文挑战第13天】数据驱动设计是依据用户数据进行网页设计的方法,旨在通过测试了解用户需求并优化体验,从而增加流量和转化率。设计师应避免主观感受影响设计,因个人偏好可能与用户需求不符。数据驱动设计能减少偏见,提高转化率和销售额,是一个迭代过程,不断实验和优化。虽然有些人担忧可能限制创造力,但其实它仍需要创新和妥协。随着业务、用户和技术变化,数据驱动设计提供持续改进的解决方案。
48 0
服务架构中的数据驱动设计