关于软件架构的一切

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

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

为什么我们需要软件架构

> 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)

(0)

相关推荐

  • 究竟什么是“软件定义汽车”

    这两年,关于汽车软件的讨论越来越多."软件定义汽车"的说法也被行业内的人们屡屡提起,每个人都在说软件将要重新定义汽车,并视特斯拉为先驱. 有两个说法比较流行:一是新四化的浪潮下,软 ...

  • 如何理解SOA是一种模板软件架构?

    如何理解SOA是一种模板软件架构?

  • SOA究竟是蜜糖还是毒药?

    (source:Bing) 文/侯哥 题记:吾之美食,汝之鸩毒.--<物性论> 1.  现在所有有进取心的OEM都在研究SOA(面向服务的架构:Service Oriented Archi ...

  • 本土软件企业的汽车战事(下)

    在上一篇我们提到过,东软集团在成立之初便在汽车电子领域有所布局,直至今天,东软除了汽车电子事业部,在2015年与阿尔派合资成立了东软睿驰,在智能座舱以外,聚焦智能网联.自动驾驶.EV动力系统.出行服务 ...

  • 整车SOA系统设计

    引言: <浅谈整车SOA架构>系列分为四大部分,层层递进,干货满满,千万不要错过哦: 1. 背景介绍(已发表,点击可看) 2.大家眼中的SOA(已发表,点击可看) 3.我眼中的SOA(已发 ...

  • 基于SIMULINK开发面向服务的汽车应用架构(SOA)。

    汽车功能越来越多地由软件定义,使它们更容易被黑客攻击.汽车电气工程向面向服务的架构演变,无论是向ADAS或信息娱乐系统添加新功能,还是修补漏洞,OTA更新都是一个有价值的解决方案.面向服务的架构(SO ...

  • 《车载SOA软件架构技术规范1.0》解读3:车载SOA软件服务设计规范

    《车载SOA软件架构技术规范1.0》解读3:车载SOA软件服务设计规范

  • 一文了解四种软件架构:Serverless架构、微服务架构、分布式架构、单体架构

    如果一个软件开发人员,不了解软件架构的演进,会制约技术的选型和开发人员的生存.晋升空间.这里我列举了目前主要的四种软件架构以及他们的优缺点,希望能够帮助软件开发人员拓展知识面. 一.单体架构 单体架构 ...

  • 开发工程师不了解软件架构,会怎么样?

    源 / 顶级程序员        文/  前言 如果一个软件开发人员,不了解软件架构的演进,会制约技术的选型和开发人员的生存.晋升空间.这里我列举了目前主要的四种软件架构以及他们的优缺点,希望能够帮助 ...

  • 嵌入式软件架构设计分层思路

    在正规的项目开发中,项目往往是并行开发的,也就是说硬件设计.底层软件设计.应用软件设计等是同步进行的.比如说在开发板上调试模块驱动,在其他平台上调试应用程序再移植到目前这个平台等. 嵌入式专栏 1 为 ...

  • 智能驾驶域控制器的软件架构及实现:支持L3 的软件架构及产品架构

    第二篇支持L3+的软件架构Level 2 及以下级别的自动驾驶功能基本上都是属于"驾驶辅助"性质.各功能的场景,主要的驾驶行为是驾驶员主导,自动驾驶系统只在非常限定的条件约束内对车 ...

  • 丰田最新L2系统和软件架构解析

    上文(丰田L2自动驾驶TAD系统)中整体介绍了丰田的TAD系统,今天我们来进一步看看TAD系统的架构. 系统冗余介绍 上一篇说过TAD系统在电源.通信.ECU等都做了备份,可以再看一下图1.该图中展示 ...

  • 软件架构的10个常见模式

    企业规模的软件系统该如何设计呢?在开始写代码之前,我们需要选择一个合适的架构,这个架构将决定软件实施过程中的功能属性和质量属性.因此,了解软件设计中的不同架构模式对我们的软件设计会有较大的帮助. 什么 ...

  • 智能驾驶域控制器的软件架构及实现(二):支持L3 的软件架构及产品架构

    第二篇  支持L3+的软件架构及产品架构 Level 2 及以下级别的自动驾驶功能基本上都是属于"驾驶辅助"性质.各功能的场景,主要的驾驶行为是驾驶员主导,自动驾驶系统只在非常限定 ...

  • 干货 | 嵌入式系统软件架构设计

    整理 :嵌入式云IOT技术圈,作者:veryarm 1. 前言 嵌入式是软件设计领域的一个分支,它自身的诸多特点决定了系统架构师的选择,同时它的一些问题又具有相当的通用性,可以推广到其他的领域. 提起 ...

  • 软件架构编年史:MVC及其变种

    原创 覃宇 逸言 5天前 覃宇,Android开发者/ThoughtWorks技术教练//译者,热衷于探究软件开发的方方面面,从端到云,从工具到实践.喜欢通过翻译来学习和分享知识,译作有<Kot ...

  • 4 大软件架构,你们公司用哪种?

    作者:SimpleEasy 链接:www.jianshu.com/p/e7b992a82dc0 如果一个软件开发人员,不了解软件架构的演进,会制约技术的选型和开发人员的生存.晋升空间.这里我列举了目前 ...