Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >关于软件架构的一切

关于软件架构的一切

作者头像
IT大咖说
发布于 2021-03-14 12:56:34
发布于 2021-03-14 12:56:34
4490
举报
文章被收录于专栏:IT大咖说IT大咖说

现有软件架构方法的详细概述

软件开发可以描述为一个复杂的系统过程,需要在各个技术领域以及相关业务方面的专业知识。就像总体规划的蓝图一样,通过定义软件的体系结构,可以促进此软件开发过程的组成部分。

为什么我们需要软件架构

> Big Ball of Mud

早期的开发人员用来设计无体系结构的软件,这种软件最初看起来像是没有计划开销以及更快的原型制作的优点。但是,随着他们深入到过程中,该软件变得像泥泞的球一样变得僵化和难以管理。随着每项变更的成本越来越高,这种方法后来被称为“泥浆大球”(Big Ball of Mud)

随着时间的推移,这种项目变得难以管理,因此每次新迭代都会大大增加维护成本。这限制了软件的发展,超出了项目开始时最初定义的范围。

软件设计的多年发展过程中,开发人员提出了一些健壮的体系结构方法,以避免出现少体系结构的软件设计问题(也称为“泥泞大球”)。以下是一些最著名的

  • 分层架构
  • 多层架构
  • 面向服务的体系结构(SOA)
  • 微服务架构

分层架构

此方法基于关注点分离的原理。软件设计分为相互重叠的一层。每一层都承担着专门的责任。架构将软件分为以下几层

  • 表示层
  • 业务逻辑层
  • 数据链路层

表示层拥有与外界交互的用户界面。这也负责提供用户体验,因为这是暴露给最终用户交互的唯一层。

顾名思义,业务逻辑层包含软件应用程序的业务逻辑。该层将UI / UX与业务相关的计算分离开,从而提供了根据不断变化的业务需求修改逻辑的灵活性,而不会影响其他层。

数据链接层负责与数据库等持久性存储进行交互以及与域无关的杂项数据处理(即与业务无关)

数据和控制从设计的每一层流到另一层。这些层还增加了设计中的抽象度。由于稳定性在一定程度上与抽象成正比,因此也将软件的稳定性提高到一定程度。

> Layered Representation of Architecture

好处

  • 与其他方法相比,实现起来更简单
  • 由于各层之间的关注点分离而提供抽象
  • 层之间的隔离使其他层免受一层的修改
  • 由于耦合度低,软件变得更易于管理

坏处

  • 没有太大的可扩展性
  • 用这种方法构建的软件将倾向于具有缺乏易于修改的单体结构
  • 即使没有必要从某些层传递数据,数据也必须一层一层地从另一层流出。此问题被称为“污水池问题”

多层架构

这种架构方法根据客户端服务器通信原理将软件套件分为几层。架构可以具有n层系统中的一,二层,将数据提供者和使用者之间的职责分开。

它利用请求响应模式在定义的层之间进行通信。与分层架构不同,它提供的可伸缩性可以是水平的(通过高性能节点扩展网络)或垂直的(通过提高单个性能来扩展每个节点)

单层系统

在这种方法中,单个系统既可以充当客户端又可以充当服务器,并且可以简化部署,而无需进行系统间通信(ISC)。因此,提供了很好的通信速度。

这样的系统仅适用于小规模的单用户应用程序,而不应用于多用户复杂的应用程序。

2层系统

> 2-Tiered Architecture

这样的系统由两个物理机组成,分别是服务器和客户端。它提供了数据管理操作以及数据处理和表示操作之间的隔离。

  • 客户拥有表示,业务逻辑和数据链接层。
  • 服务器保存数据存储,例如数据库

3层/ n层系统

> 3-Tiered Architecture

这样的体系结构在水平和垂直方向上都是高度可扩展的。通常,实施n层体系结构比较昂贵,但可以提供高性能。因此,它在大型复杂软件解决方案中是首选。

可以将其与面向服务的高级体系结构样式相结合,以生成高度复杂的模型。当软件复杂且需要性能和扩展性时,建议使用此体系结构,因为这可能是在资源和时间上更昂贵的方法。

面向服务的架构

SOA是基于服务的体系结构模型,其中组件和应用程序使用定义良好的服务进行通信。

它由5个元素组成,即

  • 服务
  • 服务巴士
  • 服务库服务目录
  • SOA安全性
  • SOA治理

客户端通过网络使用标准协议和数据格式发送请求。ESB处理的此请求可以被视为SOA的核心。ESB负责编排和路由。ESB使用服务存储库将请求定向到专用服务。该专用服务可以与其他服务或数据库交互以组成响应有效负载(响应数据)。

完整的请求响应调用符合SOA治理和安全性规则,以完成确保安全性和正确性的事务。

> https://www.udemy.com/course/software-architecture-and-design-essentials/

服务通常分为两种类型

  • 原子服务:提供无法进一步分解的功能
  • 组合服务:多种大气服务的集合,以提供复杂的组合功能

服务种类

服务可以是以下类型,即

  • 实体服务
  • 域服务
  • 公用事业服务
  • 综合服务
  • 申请服务
  • 安保服务

微服务架构

根据Martin Fowler在2014年撰写的文章中提供的定义,描述了微服务架构

简而言之,微服务架构风格是一种将单个应用程序开发为一组小型服务的方法,每个小型服务都在自己的进程中运行并与轻量级机制(通常是HTTP资源API)进行通信。这些服务围绕业务功能构建,并且可以由全自动部署机制独立部署。这些服务的集中管理几乎没有,它可以用不同的编程语言编写并使用不同的数据存储技术。

它基于服务组件化的原理。这种体系结构将软件分解为可以定义为服务的各种组件。每项服务负有单一责任,每项服务本质上都是孤立的。一种服务的更改不应影响其他服务。

> https://divante.com/blog/monolithic-architecture-vs-microservices/

微服务包括什么

能够独立扩展的隔离,简洁和细粒度微服务的体系结构组合

架构由5个部分组成,如下所示

  • 服务
  • 服务巴士
  • 外部配置
  • API网关
  • 货柜

微服务的特征

微服务架构应包含以下特征

  • 通过服务进行组件化
  • 围绕业务能力进行组织
  • 产品不是项目
  • 智能端点和哑管道
  • 分散治理
  • 分散数据管理
  • 基础设施自动化
  • 失败的设计
  • 进化设计

建议与不同的团队分别开发不同的微服务,并允许每个微服务随时间同时演化,就像空气中的各种气泡一样。由于数据通信是按照标准协议和数据格式进行的,因此一项服务的结构不会影响共同服务中的功能。

> Comparison of different architectures

好处

  • 由于高度隔离,提供低耦合
  • 增强模块化
  • 一项服务中的故障不会对整个系统造成影响,因为它们是隔离的
  • 提供高度的灵活性
  • 提供高度的可扩展性
  • 易于修改可以加快进化迭代的速度
  • 可以实现更好的错误处理
  • 避免层层架构和数据流仅通过有关服务的问题

缺点

  • 不同服务之间进行通信时出现故障的可能性更高。
  • 难以管理大量服务。
  • 需要解决的问题,例如网络延迟和负载平衡以及其他类似分布式体系结构的问题
  • 分布式环境下的复杂测试
  • 实施需要更多时间

参考

结论

每种软件体系结构方法的设计动机都是为了解决先前体系结构中的突出问题。拥有不同方法的适当知识可以帮助您为项目设计高效的软件架构

“尽管不存在完善的软件体系结构,但是,只要满足项目的功能和非功能需求,任何体系结构方法都可以被认为是相对完美的”

(本文由闻数起舞翻译自Ronald Ángel的文章《Everything About Software Architecture》,转载请注明出处,原文链接: https://medium.com/swlh/everything-aboutsoftware-architecture-dfd2b9351ef4)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT大咖说 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
微服务与其他三种软件架构的优缺点
当你开始构建一流的 Web 软件应用程序的时候,当你拥有适当的敏捷方法的时候,开发团队可以开始布局软件体系架构。
后场技术
2020/09/04
1.6K0
软件架构的演进
软件架构的发展经历了从单体架构、垂直架构(分布式架构)、SOA架构到微服务架构的过程。
许喜朝
2021/01/02
1.5K0
软件架构的演进
干货|软件架构的演化过程
目前大部分的企业系统和互联网应用都是采用的Web形式提供服务能力,根据系统的组织和部署结构。
用户10245619
2023/02/23
1.1K0
干货|软件架构的演化过程
12种常见的软件架构风格,架构师必备
软件架构是定义软件系统的高级结构和组织的过程。它涉及识别和选择正确的组件,决定它们之间如何交互,以及确定它们应该如何组织以实现特定的目标。软件架构的目标是创建一个可维护、可扩展和安全的系统,能够满足用户和组织的需求。
程序新视界
2023/12/02
3.2K0
12种常见的软件架构风格,架构师必备
浅谈软件工程架构及其演进 | 青训营笔记
简单来讲,软件架构就像建筑的地基一样,为指导软件实现的方法起到重要作用。只有地基坚实了,大厦才能盖的高。
HikariLan贺兰星辰
2023/03/06
3460
对软件架构的一些思维脑图整理
软件架构(software architecture)就是软件的基本结构。 合适的架构是软件成功的最重要因素之一。大型软件公司通常有专门的架构师职位(architect),只有资深程序员(现在流行全栈
Java高级架构
2018/07/20
2.3K0
服务架构的演进之路:从单体应用到Serverless
随着时间的推移和技术的进步,软件架构经历了从单体应用、面向服务架构(SOA)、微服务架构到Serverless架构的演变。每一步的演进都是为了更好地应对日益增长的业务需求和用户基数。接下来,我们将一起回顾这段旅程,看看每个阶段是如何推动技术的发展的。
井九
2024/10/12
2440
技术角 | 架构学习书摘总结(四)可扩展架构模式(上)
最近阅读了一本架构方面的入门图书叫《从零开始学架构:照着做,你也能成为架构师》,部分内容比较不错,先做书摘总结,以便加深印象与未来回顾学习。
ZNing
2020/05/13
4960
单体架构和微服务架构:现实应用中的软件架构
如果没有一个好的架构,软件系统的开发可能会使公司付出很高的代价。举个例子,如果一个在线电子商务公司开发平台采用耦合程度高的模块化方法,用户界面和业务逻辑功能的源文件是混在一起的,如果想要支持新的智能手机本地应用或支持更大规模的用户交易,他们可能会需要大量的投资(时间和资源)。这种系统设计风格会影响软件的可维护性,质量,并会增加业务投放市场的时间。
程序你好
2018/07/23
1.2K0
微服务是SOA,微服务也不是SOA
本文源自一次面试官的提问:你觉得微服务和SOA架构有什么联系和区别?回想起来,在我一开始接触到微服务的概念的时候,我也萌生过这个疑惑。于是借着这个机会我认真思考了这个问题,有点自己的想法写下来,未必是合适的, 也希望不对之处大家给指出来。
MCNU云原生
2023/09/05
9310
微服务是SOA,微服务也不是SOA
单体应用、SOA架构、微服务架构有哪些优劣势?
目前大部分的企业系统和互联网应用都是采用的Web形式提供服务能力,根据系统的组织和部署结构,软件架构的演化过程大概分成以下阶段:1、单体架构; 2、SOA架构;3、微服务架构
凡泰极客
2023/02/10
1.4K0
FIMS:互操作型媒体服务架构
可互操作媒体服务框架(The Framework for Interoperable Media Services, FIMS)是一个定义关于如何使用SOA架构构建媒体系统的标准的项目。 使用FIMS架构可以提供传统架构所缺少的灵活性,高效率和可扩展性。FIMS是由AMWA和EBU共同管理的特别工作组。FIMS 1.0版本在2012年最初被提出,目前仍在持续进行更新和迭代。FIMS2.0与时俱进,通过媒体云和微服务进行服务模型重构和提升,正在加速推进。
用户1324186
2018/07/26
1.1K0
FIMS:互操作型媒体服务架构
「软件架构」软件架构样式和模式列表
架构模式是一种通用的、可重用的解决方案,用于解决给定上下文中软件架构中常见的问题。架构模式通常被记录为软件设计模式。
架构师研究会
2020/07/20
9150
「软件架构」软件架构样式和模式列表
浅谈软件架构
每一个程序员都有一个架构师的梦,可理想很丰满,现实很骨感---大部程序员工作中都做着简单的 CRUD,我也不例外。如果就这样还常把“架构”两个字挂在嘴边,估计程序员们都会脸红。但就因为暂时还不能成为架构师,我们就要放弃成为架构师的梦想了吗?显然不能,掌握架构设计的相关理论是成为架构师的前提,有了方法论可以更好地指导我们干活。机会总是留给有准备的人的,万一哪天梦想实现了呢?
政采云前端团队
2023/11/16
4900
浅谈软件架构
说说软件领域的框架和架构
日常工作中,很业内人士框架和架构经常混为一谈。她们在日常的会议、邮件中经常出现框架和架构这样的措辞。时间朝阳了,感觉框架和架构几乎查不会,没有区别。甚至肤浅地认为框架就是架构,架构也就是框架。业内人士况且如此,外行人士更是滥用概念了。今天就来说说框架和架构和具体含义。
软件架构师Michael
2023/06/02
4640
系统架构模式和软件架构模式的区别
从系统架构的角度关注整个系统的组织方式和各个组件间的交互。这涉及到服务器的部署、负载均衡、网络通信等问题。因此,系统架构主要关心的是在硬件和操作系统层面上如何实现和优化组件之间的通信。
运维开发王义杰
2023/08/15
6760
系统架构模式和软件架构模式的区别
浅谈“架构设计演化”
单体架构,是指由一台或多台计算机组成中心节点。将数据集中存储于这个中心节点中,并且整个系统的所有业务功能也均在此集中处理。也就是说,在这种架构下,每个终端或客户端机器仅仅负责数据的录入和输出,而数据的存储与控制处理完全交由单体系统来完成。
用户5548425
2019/11/10
6760
微服务架构:敏捷软件架构的实际体现
正如敏捷开发能够解决工程技术瓶颈,微服务则能够解决架构层面的瓶颈。 2014年出现的“微服务”理念仿佛一道闪电,让技术人员意识到这一全新架构风格的重要意义。面向服务架构崛起又复衰落,微服务架构与SOA
李海彬
2018/03/22
8200
微服务架构:敏捷软件架构的实际体现
服务架构的进化
虽然在软件设计中划分了3层模型,但是对业务场景没有划分,一个典型的单体架构就是将所有的业务场景的表现层,业务逻辑层,数据访问层放在一个工程中最终经过编译,打包,部署在一台服务器上。
KunkkaWu
2022/07/18
8500
【从零开始学微服务】03.软件架构的演化过程
目前大部分的企业系统和互联网应用都是采用Web的形式提供服务能力,根据系统的组织方式和部署结构,我们通常把软件架构的演化过程分为以下几个阶段:
万猫学社
2022/12/01
3780
【从零开始学微服务】03.软件架构的演化过程
相关推荐
微服务与其他三种软件架构的优缺点
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档