最经典的两种软件架构模式

最经典的两种软件架构模式
最新回答
没事别惹我

2023-02-07 13:48:27

最经典的两种软件架构模式是 Pipe-Filter 架构模式和微内核架构模式。以下是对这两种架构模式的详细介绍:

Pipe-Filter 架构模式
  • 定义与原理:Pipe-Filter 模式,即管道过滤器模式,是一种经典的架构模式,与工业制造生产流水线类似。管道负责数据的传递,过滤器则负责处理数据。原始数据通过管道传送给第一个过滤器,处理完成后再通过管道传送给下一个过滤器,重复这个过程直到处理结束,最终得到需要的结果数据。
  • 适用场景

    Web 框架:如 Koa 洋葱模型就是参照 Pipe-Filter 架构模式设计的。在 Web 系统中,数据经过多个处理环节,如 HTTP 消息解析、安全校验、用户识别等,每个环节都可以看作是一个过滤器。

    大数据处理与分析系统:在大数据处理中,数据需要经过清洗、转换、分析等多个步骤,Pipe-Filter 模式能够很好地支持这种流式处理。

    编译器:编译器的词法分析、语法分析、语义分析等阶段也可以看作是过滤器,它们依次处理源代码,最终生成可执行文件。

    Linux 管道命令:Linux 中的管道命令(如 |)允许将一个命令的输出作为另一个命令的输入,这也是 Pipe-Filter 模式的一种体现。

  • Filter 和组合模式

    多个 Filter 可以组合成一个新的 Filter,这个组合 Filter 接收的数据与第一个 Filter 保持一致,返回的数据与最后一个 Filter 保持一致。

    通过组合,可以将多个简单的 Filter 组合成一个更复杂的 Filter,实现更强大的功能。

  • Serverless 和 FaaS

    在 Serverless 架构中,FaaS(Function as a Service)是一个核心组件,它负责函数的加载、调度和执行。

    FaaS 中的函数(Fn)可以串行、并行或组合执行,每个 Fn 都可以看作是一个过滤器,处理输入数据并产生输出数据。

微内核架构模式
  • 定义与原理:微内核架构(Microkernel Architecture),也被称为插件化架构(Plugin-in Architecture),是一种面向功能进行拆分的可扩展架构。它包含核心系统和插件模块两部分,核心系统负责通用功能,插件模块负责具体功能。

  • 核心组件

    核心系统:负责与具体功能无关的通用功能,如应用生命周期的管理、插件模块的管理等。

    插件模块:负责实现具体的功能,如路由模块、安全模块、HTTP 编解码模块等。每个插件模块都通过插件实现,且每个插件都只做一件事情。

  • 核心系统设计的关键点

    插件管理:包括插件的安装、启用、通信、禁用和卸载等。核心系统需要提供一套完整的插件管理机制。

    应用管理:核心系统需要实现应用本身的生命周期管理和插件生命周期的管理。主进程设计轻量,插件通过子进程实现,确保系统的稳定性和可扩展性。

  • 插件模块设计的关键点

    插件元数据定义:包括插件的名称、描述、版本号等,方便后期管理。

    插件要可插拔、可配置:插件应该是灵活可插拔的,且可配置的属性需要暴露到外界使用环境,实现业务可定制。

    每个插件都应该保持职责单一性:每个插件都尽量保持职责单一性,降低系统复杂度。

  • 应用案例

    VS Code:VS Code 的内核非常轻量,只提供最基础的能力,其他功能都是通过插件来扩展。

    规则引擎:规则引擎的执行引擎可以看做是微内核,通过解析、执行配置规则来达到业务的灵活多变。

    Koa Web 框架:Koa 框架本身只提供最基础的能力,其他功能都是通过中间件来扩展,中间件既是一个插件,也是一个 Filter,是微内核架构与 Pipe-Filter 架构的完美融合。