2023-02-07 13:48:27
最经典的两种软件架构模式是 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 都可以看作是一个过滤器,处理输入数据并产生输出数据。


核心组件:
核心系统:负责与具体功能无关的通用功能,如应用生命周期的管理、插件模块的管理等。
插件模块:负责实现具体的功能,如路由模块、安全模块、HTTP 编解码模块等。每个插件模块都通过插件实现,且每个插件都只做一件事情。
核心系统设计的关键点:
插件管理:包括插件的安装、启用、通信、禁用和卸载等。核心系统需要提供一套完整的插件管理机制。
应用管理:核心系统需要实现应用本身的生命周期管理和插件生命周期的管理。主进程设计轻量,插件通过子进程实现,确保系统的稳定性和可扩展性。
插件模块设计的关键点:
插件元数据定义:包括插件的名称、描述、版本号等,方便后期管理。
插件要可插拔、可配置:插件应该是灵活可插拔的,且可配置的属性需要暴露到外界使用环境,实现业务可定制。
每个插件都应该保持职责单一性:每个插件都尽量保持职责单一性,降低系统复杂度。
应用案例:
VS Code:VS Code 的内核非常轻量,只提供最基础的能力,其他功能都是通过插件来扩展。
规则引擎:规则引擎的执行引擎可以看做是微内核,通过解析、执行配置规则来达到业务的灵活多变。
Koa Web 框架:Koa 框架本身只提供最基础的能力,其他功能都是通过中间件来扩展,中间件既是一个插件,也是一个 Filter,是微内核架构与 Pipe-Filter 架构的完美融合。