常见架构模式
分层模式
- 展示层(View):用户UI页面,请求输入和响应展示
- 控制层(Control):执行业务逻辑
- 应用层(Service):控制层和数据层的桥梁
- 数据层(Dao):操作数据库
场景:
- 适合小型web服务 优点:
- 前期开发成本低,可快速完成应用
- 分层职责分明,可维护性高 缺点:
- 业务请求需要经过多层处理,性能低
微内核
- 核心部分:核心模块保证程序最小可运行部分
- 插件部分:插件模块则按需接入和可自定义开发
场景:
- 程序拥有固定核心逻辑,追求高扩展性,适合开源场景和多团队开发 优点:
- 可扩展,可移植 缺点:
事件驱动
事件产生并发送到Channel,由事件调度器调度到不同的处理器执行
- 事件产生:各种业务场景下触发生成事件
- Channel:事件队列
- 调度器:从Channel中取出事件,并调度到不同的处理器
- 处理器:处理特定类型的事件 场景:
- 电商下单场景 优点:
- 大型复杂系统下,处理异步事件
阶段事件驱动
简称SEDA(stage event driver architecture),各个stage之间通过event通讯,stage内处理event使用线程池异步处理。结合了事件驱动和多线程模式优点。
场景:
- Pipeline处理
- 可异步
优点:
- 易扩展
- 事件驱动,异步,解耦
- 充分利用多线程模型
Pipeline管道-过滤器
统一过滤器之间通讯协议,每个管道都是非定向的和点对点,接收一个源的输入和输出到另一个源
场景:
- 流水线处理
- 语法分词
优点:
- 可插拔、易扩展
缺点:
- 不适合交互性系统
- 过滤器之间频繁解析和反解析导致性能损失
微服务
将系统划分多个独立服务,每个服务可以独立部署,拥有自己的api边界,管理自己的数据库,可以是不同的开发语言。
场景:
- 适合大型系统
优点:
- 容灾性好
- 配合k8s扩缩容
缺点:
- 系统设计必须容忍服务失败
- 分布式事务问题
- 运维复杂
基于空间
参考
- 架构师必须了解的 5 种最佳软件架构模式
- 程序员必知的几种软件架构模式
- 阶段式服务器模型
- SEDA架构实现
- 基于空间的架构(http://www.uml.org.cn/zjjs/202212164.asp)
This post is licensed under CC BY 4.0 by the author.