0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

嵌入式7种架构模式分析

工程师进阶笔记 来源:工程师进阶笔记 2023-06-13 15:31 次阅读

嵌入式软件因为硬件资源限制,可能存在驱动与应用耦合的情况,但对于大型项目,资源充裕的情况下,复杂的业务逻辑、后续扩展维护的需要,必须采用分层和模块化思维,这种思想就是架构模式。一般分7种架构模式:

分层架构

②多层架构

管道 - 过滤器架构

④客户端 - 服务器架构

⑤模型 - 视图 - 控制器架构

事件驱动架构

微服务架构

其中加粗部分属于个人觉得适合在嵌入式系统应用的架构(模式),实际开发中一般是多种模式嵌套,确保软件隔离解耦。

一、分层架构模式

最常见的架构模式就是分层架构,大部分分层架构主要由四层组成:展现层、业务层、持久层和数据库层,如下图所示:

26eca6b4-0907-11ee-962d-dac502259ad0.jpg

1、上下文

复杂的系统都会经历独立的发展和衍化系统各个部分的需要。出于这个原因,系统开发者需要对关注点进行清晰且条理分明的分离,以便系统的各个模块可以独立地开发和维护。

2、问题

软件需要以这样一种方式分割:各个模块可以独自开发和衍化,各自部分之间的交互非常少,支持可移植性、可修改性和复用性。

3、方案

为了实现关注点分离,分层模式将软件分割成各个单元(称为“层”)。每一层都是一组模块,提供了一组高内聚的服务。其使用必须是单向的。层将一组软件作为一个完整的分区,每个分区暴露一个公开接口

✪ 第一个概念是,每一层都有特定的角色和职责。例如,展现层负责处理所有的用户界面。分层架构的这种关注点分离,让构建高效的角色和职责非常简单。

✪第二个概念是,分层架构模式是一个技术性的分区架构,而非一个领域性的分区架构。它们是由组件组成的,而不是领域。

✪最后一个概念是,分层架构中的每一层都被标记为封闭或者开放。封闭层意味着请求从一层移到另一层,它必须通过它正下面的这一层才能达到下面这一层的再下一层。请求不能跳过任何层。

26f1f7fe-0907-11ee-962d-dac502259ad0.jpg

4、弱点

分层会导致性能下降。这种模式不适合高性能应用程序,因为经过架构中的多层来实现一个业务请求的效率是不高的。还会增加系统的前期成本和复杂性。

5、用途

我们应该将这种方式应用于小型简单的应用程序。

点评

原文是针对互联网软件,对于嵌入式可以分为业务层、公共组件层、系统适配层、硬件驱动层。软件分层思想是个基础概念,也许在嵌入式软件中体现不明显,是因为硬件资源限制有所取舍。

二、多层模式

方案:

2705948a-0907-11ee-962d-dac502259ad0.jpg

许多系统的执行结构被组织成一系列逻辑组件分组。每个分组被称为一个层。

1、上下文

在一个分布式部署中,通常需要将系统的基础设施分到不同的子集中。

2、问题

我们如何将系统分割到多个计算上独立的执行结构:由一些通信媒介连接的软件和硬件组?

3、弱点

大量前期成本和复杂性。

4、用途

用在分布式系统中。

点评

个人能力限制,暂不明白在嵌入式软件中的用法和使用范围。

三、管道-过滤器架构

软件架构中反复出现的一种模式是管道 - 过滤器(pipe-filter)模式。

27214e3c-0907-11ee-962d-dac502259ad0.jpg

1、上下文

许多系统需要转换从输入到输出的离散数据流。许多类型转换在实践中重复出现,因此将其创建成独立的可复用的部分,这是比较理想的。

2、问题

这些系统需要被分割成可复用的松耦合的组件,组件之间拥有简单通用的交互机制。这样它们就可以灵活地相互结合。这些通用松耦合的组件就很容易复用。独立的组件可以并行执行。

3、方案

这种架构中的管道构成了过滤器之间的通信通道。第一个概念是,由于性能原因,每个管道都是非定向的和点对点的,接受来自一个源的输入并经常直接输出到另外一个源。

在这种模式中,有如下四种过滤器。

✪ producer(source):一个过程的起点。

✪ transformer (map):对一些或所有数据进行转换。

✪ tester (reduce):测试一个或多个条件。

✪ consumer (sink):终点。

4、弱点

不太适合交互性的系统,因为它们的转换特性。

过多的解析和反解析会导致性能损失,也会增加编写过滤器本身的复杂性。

5、用途

管道 - 过滤器架构用于各种应用程序,特别是简化单项处理的任务。

点评

看起来比较类似广播与接收的模式,在无操作系统消息队列机制,基于单片机裸机开发时可以使用,所有分时任务共享一个广播队列,接收时选择自身感兴趣的进行处理,或者对广播消息进行删除截断后续操作。

四、客户端-过滤器架构

273116a0-0907-11ee-962d-dac502259ad0.jpg

1、上下文

有许多共享资源和服务是大量分布式的客户端希望访问的,希望控制访问或服务质量。

2、问题

通过管理一组共享资源和服务,我们可以通过分解公共服务并在单个位置或少数位置进行修改来提高可修改性和复用性。我们想要通过在将资源本身分布在多个物理服务器上的同时集中控制这些资源和服务,来提高可伸缩性和可用性。

3、方案

在客户端 - 服务器模式中,组件和连接器具有特定的行为。

称为“客户端”的组件将请求发送到称为“服务器”的组件,然后等待回复。

服务器组件接收到客户端的请求并向其发送回复。

4、弱点

服务器会成为性能瓶颈和单点故障位置。在系统建成后,关于功能位置(在客户端还是在服务器)的决策通常是复杂的而且变动成本很大。

5、用途

对于有许多组件(客户端)发送请求到另外一些提供服务的组件(服务器)的系统,我们可以使用客户端 - 服务器模式来建模这个系统的一部分:在线应用程序,例如电子邮件、共享文档或银行服务。

点评

这个好像只适合互联网软件。

五、模型-视图-控制器架构(MVC)

273c462e-0907-11ee-962d-dac502259ad0.jpg

1、上下文

用户界面通常是一个交互性应用程序的最频繁被修改的部分。用户通常希望从不同的视角查看数据,例如柱状图或者饼图。这些表示形式都应该反映数据当前的状态。

2、问题

用户界面功能如何独立于应用程序功能,同时还还对用户输入或底层应用程序数据的更改做出响应?

当底层应用程序数据更改时,如何创建、维护和协调用户界面的多个视图?

3、方案

模型 - 视图 - 控制器(model-view-controller,即 MVC)模式将应用程序功能分为以下三种类型的组件:

✪模型,包含应用程序的数据。

✪视图,显示部分底层数据并与用户交互。

✪控制器,在模型和视图之间进行中介并管理状态更改的通知。

4、弱点

对于简单的用户界面,其复杂性并不值得这么做。

模型、视图和控制器抽象可能不适用于某些用户界面工具包。

5、用途

MVC 是网站或移动应用程序开发用户界面常用的一种架构模式。

点评

这模式一般用在支持显示的场景,底层对数据的维护管理,与界面显示分离,这样当业务需求、显示部分变更对底层基础影响较小,似乎是软件分层模式的特例。

六、事件驱动架构

1、上下文

需要提供计算和信息资源来处理传入的应用程序生成的独立异步事件,这种方式可以随着需求的增加而扩展。

2、问题

构建分布式系统,这个系统可以服务异步到达的事件相关信息,并且能从简单小型扩展到复杂大型。

3、方案

27460466-0907-11ee-962d-dac502259ad0.jpg

为事件处理部署独立的事件进程或处理器。到达的事件进入队列。调度程序根据调度策略从队列中拉取事件并将它们分配到合适的事件处理器。

4、弱点

性能和错误恢复可能是问题。

5、用途

使用这个方案的电商应用程序将工作如下:

Order Service 创建一个 Order,这个订单处于待定状态,然后发布一个OrderCreated事件。

✪ Customer Service 接收到这个事件并尝试为这个 Order 扣除信用。然后发布一个 Credit Reserved 事件或者CreditLimitExceeded(超出信用限额)事件。

✪ Order Service 接收到 Customer Service 发送的事件并将订单状态更改为已核准或已取消。

点评

这个在嵌入式软件很容易理解,所谓事件就是硬件检测到中断信息。嵌入式软件基本都有体现这个思想,一个while死循环,等待事件触发,比如外部按键中断、串口接收中断、或者内部定时器超时中断等。这种框架有益于外设扩展,理论上互不干扰。

七、微服务架构

1、上下文

部署基于服务器的企业应用程序,支持各种浏览器和原生移动客户端。应用程序通过执行业务逻辑、访问数据库、与其它系统交换信息并返回响应来处理客户端请求。这个应用程序可能会暴露一个第三方 API。

2、问题

一体化应用程序会变得过于庞大和复杂,无法得到有效支持和部署来实现最优的分布式资源利用,例如在云环境中。

3、方案

2756060e-0907-11ee-962d-dac502259ad0.jpg

将应用程序构建成服务套件。每个服务都是独立部署和可扩展的,拥有自己的 API 边界。不同的服务可以用不同的编程语言编写,管理它们自己的数据库,由不同的团队开发。

4、弱点

系统设计必须能容忍服务失败,需要更多的系统监控。服务编排和事件协作开销比较大。

5、用途

许多使用场景都可以应用微服务架构,特别是那些涉及大量数据管道的场景。例如,一个微服务系统对关于一个公司的零售店销售的报表系统会比较理想。数据展现过程的每一步都会被一个微服务处理:数据收集、清理、规范化、浓缩、聚合、报告等。

点评

在嵌入式软件开发中,比较适合某个相对独立的功能,在适配其基础接口后,将一个复杂功能模块化,外部输入参数,模块内部执行,结束后输出结果或者触发回调,该功能对外接口简单,外部无需过多关注内部实现,便于软件解耦和维护。
责任编辑:彭菁

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5083

    文章

    19129

    浏览量

    305392
  • 数据库
    +关注

    关注

    7

    文章

    3803

    浏览量

    64404

原文标题:你的嵌入式项目适合使用哪种软件架构?

文章出处:【微信号:工程师进阶笔记,微信公众号:工程师进阶笔记】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于嵌入式实时系统设计模式的设计

    为满足嵌入式实时系统快速适应硬件型号升级、快速变更要求以及可伸缩、可修改、可复用等方面的需求,本文提出了一适用于嵌入式实时系统的设计模式--ERTSDP,解决了系统
    发表于 10-14 15:33 2837次阅读
    基于<b class='flag-5'>嵌入式</b>实时系统设计<b class='flag-5'>模式</b>的设计

    嵌入式架构有多重要?

    嵌入式架构有多重要?要做到嵌入式应用的代码逻辑清晰,且避免重复的造轮子,没有好的应用架构怎么行?如果没有好的架构,移植将会是一件很痛苦的事情
    发表于 07-22 06:00

    嵌入式架构有多重要

    嵌入式架构有多重要?要做到嵌入式应用的代码逻辑清晰,且避免重复的造轮子,没有好的应用架构怎么行?如果没有好的架构,移植将会是一件很痛苦的事情
    发表于 10-27 08:15

    怎样去设计一基于嵌入式架构的指纹识别系统呢

    基于嵌入式架构的指纹识别系统是由哪些部分组成的?怎样去设计一基于嵌入式架构的指纹识别系统呢?
    发表于 11-11 06:03

    基于软件+服务平台的软件架构模式

    本文在介绍软件+服务平台的概念的基础上,设计了一基于软件+服务平台的软件架构模式,并对其核心组件进行了说明,最后通过分析架构的使用效果,从而说明了该
    发表于 06-10 10:33 27次下载

    嵌入式系统的发展特点及架构分析

    嵌入式系统的发展特点及架构分析    嵌入式系统已经广泛地应用到当今各个领域,与我们的生活息息相关,小到掌上的数字产品,大到汽车、航天飞机。 提到
    发表于 11-28 08:55 667次阅读

    嵌入式系统架构发展趋势及比较分析

    嵌入式系统架构发展趋势及比较分析 嵌入式系统已经广泛地应用到当今各个领域,与我们的生活息息相关,小到掌上的数字产品,大到汽车、航天
    发表于 01-20 17:45 1133次阅读

    简便的基于ARM的嵌入式应用开发模式

    简便的基于ARM的嵌入式应用开发模式
    发表于 09-22 16:40 4次下载
    一<b class='flag-5'>种</b>简便的基于ARM的<b class='flag-5'>嵌入式</b>应用开发<b class='flag-5'>模式</b>

    实例分析嵌入式系统电源设计

    的器件以及设计策略。 为电源电路规定具体的功能和架构模块并非微不足道,这些工作直接影响到电池供电系统的工作时间。电源系统架构会因嵌入式产品和应用领域的不同而各异。下图是典型便携嵌入式
    发表于 10-27 10:38 5次下载
    实例<b class='flag-5'>分析</b><b class='flag-5'>嵌入式</b>系统电源设计

    10常见的软件体系架构模式分析以及它们的用法、优缺点

    架构模式是一个通用的、可重用的解决方案,用于在给定上下文中的软件体系结构中经常出现的问题。架构模式与软件设计模式类似,但具有更广泛的范围。
    的头像 发表于 01-31 12:39 2.2w次阅读
    10<b class='flag-5'>种</b>常见的软件体系<b class='flag-5'>架构模式</b><b class='flag-5'>分析</b>以及它们的用法、优缺点

    详解SOA五基本架构模式

    本文详细解说了SOA五基本架构模式,面向服务的架构(SOA)已成为连接复杂服务系统的主要解决方案。虽然SOA的理论很容易理解,但要部署一个设计良好、真正实用的SOA系统却非常困难。本文试图通过解析SOA的
    的头像 发表于 02-07 14:41 2.1w次阅读
    详解SOA五<b class='flag-5'>种</b>基本<b class='flag-5'>架构模式</b>

    一文带你了解嵌入式领域三处理器通用的架构

    嵌入式领域,存在着三处理器通用的架构,PowerPC、X86、ARM,本文将对这三架构进行对比分析
    发表于 03-05 17:39 5541次阅读

    《C嵌入式编程设计模式》读书笔记

    《C嵌入式编程设计模式》第一章 什么是嵌入式编程嵌入式系统的基本知识面向对象编程与结构化编程使用C语言实现类、继承、状态机 第二章 嵌入式
    发表于 11-03 16:06 13次下载
    《C<b class='flag-5'>嵌入式</b>编程设计<b class='flag-5'>模式</b>》读书笔记

    架构模式的基础知识

        作为软件工程师,为什么至少要学习基本的架构模式?     我相信有很多人回答了这个问题,但我会给你一些考虑的理由。     首先,如果您了解架构模式的基础知识,那么您就更容易遵循架构师的要求
    的头像 发表于 06-13 16:13 743次阅读
    <b class='flag-5'>架构模式</b>的基础知识

    嵌入式软件最常见的架构模式

    嵌入式软件因为硬件资源限制,可能存在驱动与应用耦合的情况,但对于大型项目,资源充裕的情况下,复杂的业务逻辑、后续扩展维护的需要,必须采用分层和模块化思维,这种思想就是架构模式。一般分7
    的头像 发表于 06-22 10:32 2561次阅读
    <b class='flag-5'>嵌入式</b>软件最常见的<b class='flag-5'>架构模式</b>