首页 > 其他分享 >做服务的架构陷阱,你掌握了多少

做服务的架构陷阱,你掌握了多少

时间:2023-12-07 11:31:55浏览次数:35  
标签:架构 掌握 模式 分层 软件体系结构 陷阱 组件 体系结构

本文分享自华为云社区《做服务的架构陷阱,你掌握了多少能避开吗?》,作者: 码乐 。

1 简介

通常在一个应用中,也很难有固定的分层。软件体系结构为软件系统提供了结构、行为和属性的高级抽象,在使用时可能随着时间推移分层越来越多,这些抽象和分层由构成系统的元素描述、这些元素的相互作用、指导元素集成的模式以及这些模式的约束组成。

而软件层次式体系结构是最通用的架构,也被叫作N层架构模式(n-tier architecture pattern)。这种架构模式非常适合传统的IT通信和组织结构,很自然地成为大部分应用的第一架构选择。

在分层次体系结构中的组件被划分成几个层,每个层代表应用的一个功能,都有自己的角色和职能。

分层架构的一个特性就是关注分离(separation of concerns)。该层中的组件只负责本层的逻辑,组件的划分很容易明确组件的角色和职责,也比较容易开发、测试、管理和维护。

分层架构(Layered Architecture)是最常见的软件架构,也是事实上的标准架构。

事实上人类认知方式也是通过层次划分,在现实宇宙中,如太阳系从内层到外层结构:

做服务的架构陷阱,你掌握了多少_软件体系结构

2 如何设计层次架构

考虑软件体系结构通常从三个方面出发:

(1)利益相关人员之间的交流。

软件体系结构是一种常见的系统抽象,代码级别的系统抽象仅仅可以成为程序员的交流工具,而包括程序员在内的绝大多数系统的利益相关人员都借助软件体系结构来作为相互沟通的基础。

(2)系统设计的前期决策。

软件体系结构是我们所开发的软件系统最早期设计决策的体现,而这些早期决策对软件系统的后续开发、部署和维护具有相当重要的影响。这也是能够对系统进行分析的最早时间点。

(3)可传递的系统级抽象。

软件体系结构是关于系统构造以及系统各个元素工作机制的相对较小、却又能够突出反映问题的模型。

由于软件系统具有的一些共通特性,这种模型可以在多个系统之间传递,特别是可以应用到具有相似质量属性和功能需求的系统中,并能够促进大规模软件的系统级复用。

分层架构将软件分成若干个水平层,每一层都有清晰的角色和分工,不需要知道其他层的细节。层与层之间通过接口进行通信。分层架构通常明确约定软件一定要分成多少层,但是,最常见的是四层结构,如下所述。

●表现层(Presentation Layer);

用户界面,负责视觉和用户互动;

●业务层(Business Layer):

实现业务逻辑;

●持久层(Persistence Layer):

提供数据,SQL语句就放在这一层;

●数据库(Database Layer):

保存数据。

做服务的架构陷阱,你掌握了多少_分层架构_02

有的项目在逻辑层和持久层之间加了一个服务层(Service),提供不同业务逻辑需要的一些通用接口。用户的请求将依次通过这四层的处理,不能跳过其中任何一层。

分层式体系结构是一种最常见的架构设计方法,能有效地使设计简化,使设计的系统机构清晰,便于提高复用能力和产品维护能力。

3 不同维度分析

整体敏捷性: 低

分析:整体敏捷性是对不断变化的环境做出快速响应的能力。

虽然可以通过此模式的隔离层功能来隔离更改,但由于大多数实现的单体性质以及通常使用此模式的组件的紧密耦合,因此在此体系结构模式中进行更改仍然很麻烦且耗时。

易于部署性:低

分析:根据实现此模式的方式,部署可能会成为一个问题,特别是对于较大的应用程序。

对组件的一个小改动可能需要重新部署整个应用程序(或应用程序的大部分),从而导致需要在下班时间或周末计划、安排和执行部署。因此,此模式不容易用于持续交付管道,从而进一步降低了部署的总体评级。

可调试可测试性: 高

分析:由于组件属于体系结构中的特定层,因此可以模拟或存根其他层,因此此模式相对容易测试。开发人员可以模拟演示组件或屏幕以隔离业务组件中的测试,也可以模拟业务层以测试某些屏幕功能。

性能: 低

分析:虽然某些分层体系结构确实可以很好地执行,但由于必须通过体系结构的多个层来满足业务请求,因此该模式并不适合高性能应用程序。

可扩展性:低

分析:由于此模式的紧密耦合和整体实现的趋势,使用此体系结构模式生成的应用程序通常难以扩展。

可以通过将分层架构拆分为单独的物理部署或将整个应用程序复制到多个节点来扩展分层架构,但总体而言,粒度太宽,导致扩展成本较高。

易于开发:高

分析:易开发性获得了相对较高的分数,主要是因为这种模式非常有名,而且实现起来并不太复杂。由于大多数公司通过按层(表示、业务、数据库)分离技能集来开发应用程序,因此此模式成为大多数业务应用程序开发的自然选择。(康威定律)

4 使用分层时需要注意的问题

层次式体系结构是一个可靠的通用的架构,对很多应用来说,如果不确定哪种架构适合,
可以用它作为一个初始架构。设计时要注意以下两点:

(1)要注意的是污水池反模式。

所谓污水池反模式(architecture sinkhole anti-pattern),就是请求流简单地穿过几个层,每层里面基本没有做任何业务逻辑,或者做了很少的业务逻辑。比如一些Java项目例子,业务逻辑层只是简单的调用了持久层的接口,本身没有什么业务逻辑。

每一层或多或少都有可能遇到这样的场景,关键是分析这样的请求的百分比是多少。二八原则可以帮助你决定是否正在遇到污水池反模式。如果请求超过20则应该考虑让一些层变成开放的。

(2)需要考虑的是分层架构可能会让你的应用变得庞大。

即使你的表现层和中间层可以独立发布,但它的确会带来一些潜在的问题,比如:分布模式复杂、健壮性下降、可靠性和性能的不足,以及代码规模的膨胀等。

做服务的架构陷阱,你掌握了多少_软件体系结构_03

5 小结

层次式体系结构设计是将系统组成一个层次结构,每一层为上层服务,并作为下层客户。

在一些层次系统中,除了一些精心挑选的输出函数外,内部的层接口只对相邻的层可见。连接件通过决定层间如何交互的协议来定义,拓扑约束包括对相邻层间交互的约束。

严格约束的环境,由于每一层最多只影响两层,同时只要给相邻层提供相同的接口,允许每层用不同的方法实现,同样为软件重用提供了强大的支持。

分层由于其易于使用和理解开发,仍然是现代普遍存在的架构,因为有如下优势

1、良好的复用性,只要接口不变可用在其它处;
2、可维护性好;
3、可扩展性好,支持递增设计
4、经过合理分层,让系统整体耦合性降低,达到解耦效果
5、把相同逻辑与抽象级别内容放一个层次,易于理解和开发。

点击关注,第一时间了解华为云新鲜技术~


标签:架构,掌握,模式,分层,软件体系结构,陷阱,组件,体系结构
From: https://blog.51cto.com/u_15214399/8719873

相关文章

  • 架构师的知行合一(内容由AI的全文生成,满分100分我打99分)
    大型架构是怎么来的随着科技的不断发展,越来越多的企业和组织开始意识到数字化转型的重要性。为了更好地适应市场的变化,满足客户的需求,提高企业的竞争力,大型架构成为了企业和组织不可或缺的一部分。那么,大型架构到底是怎么来的呢?本文将为您深入剖析。一、业务需求推动架构演进......
  • 服务器架构的发展
    1背景商业化处理器都致力于单核处理器的发展,通过在芯片上集成更多数目的晶体管,加快运算速度(即主频),从而提升系统性能。2005年,当主频接近4GHz时,Intel和AMD发现,单纯提升主频已无法明显提升系统整体性能。单核处理器利用冗长的运算流水线(即增加每个始终周期同时执行的运......
  • 从面试官角度看Handler:掌握技巧,事半功倍!
    引言在Android开发领域,Handler是一项关键技能,尤其在面试中,对Handler的深刻理解和熟练运用往往是衡量一位Android开发者水平的重要标志。本文将从面试官的角度出发,针对AndroidHandler技术展开详细的解析,深入剖析高级疑难问题,帮助读者更好地准备面试。Handler的基本概念问题:请解释Ha......
  • 为什么王者荣耀不使用微服务架构?
    来源:zhihu.com/question/359630395/answer/954452799今天,在知乎上看到这样一个问题:"为什么游戏公司的server不愿意微服务化?"背景介绍最近面试了一家游戏公司(满大间的,有上市)我问他,公司有没有做微服务架构的打算及考量?他很惊讶的说,我没听说过微服务耶,你可以解释一下吗?我大概说......
  • 掌握Prompt工程,开启AI大模型新时代
    人工智能(AI)领域正在快速发展,各种专业术语和黑话也层出不穷,使得新入行的人往往感到无所适从。特别是在涉及到AI大模型的领域,一些关键概念如提示工程(prompt)、向量工程(embedding)和微调工程(fine-tune)更是晦涩难懂。本文将用简洁明了的语言,详解这些行业黑话,帮助你迅速搞懂它们。一、提示......
  • 基于社区电商的Redis缓存架构-库存模块缓存架构(下)
    基于缓存分片的下单库存扣减方案将商品进行数据分片,并将分片分散存储在各个Redis节点中,那么如何计算每次操作商品的库存是去操作哪一个Redis节点呢?我们对商品库存进行了分片存储,那么当扣减库存的时候,操作哪一个Redis节点呢?通过轮询的方式选择Redis节点,在Redis中通过记录......
  • 大语言模型底层架构丨带你认识Transformer
    本文分享自华为云社区《大语言模型底层架构你了解多少?大语言模型底层架构之一Transfomer的介绍和python代码实现》,作者:码上开花_Lancer。语言模型目标是建模自然语言的概率分布,在自然语言处理研究中具有重要的作用,是自然语言处理基础任务之一。大量的研究从n元语言模型(n-gram......
  • 深度掌握TypeScript中的重载【函数重载、方法重载】
    深度掌握TypeScript中的重载【函数重载、方法重载】1.函数重载,方法重载的重要性著名前端流行框架底层都用到函数重载,例如:Vue3底层源码就多处使用到带泛型的函数重载。很多前端面试更是拿函数重载作为考核求职者TS技能是否扎实的标准之一,如果你不掌握函数重载,等于你的TS技......
  • 技术架构演进之路基础概念
    概述在进行技术学习过程中,由于没有经历过一些中大型系统的实际经验,导致无法从全局理解一些概念,所以本文以一个"电子商务"应用为例,介绍从一百个到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个整体的认知,方便大家对后......
  • 单机架构
    初期,我们需要利用我们精干的技术团队,快速将业务系统投入市场进行检验,并且可以迅速响应变化要求。但好在前期用户访问量很少,没有对我们的性能、安全等提出很高的要求,而且系统架构简单,无需专业的运维团队,所以选择单机架构是合适的用户在浏览器中输入www.google.com,首先经过DNS服......