导读:《架构设计》系列为极客工夫李运华老师《从 0 开始学架构》课程笔记。本文为第九局部。首先整体介绍可扩大架构的根本思维——“拆”,以及如何拆;随后介绍了面向流程的拆分,即分层架构。
扫描文末二维码 关注公众号 回复“架构设计”获取架构设计笔记残缺思维导图
根本思维
所有的可扩展性架构设计,背地的根本思维都能够总结为一个字:拆!
拆,就是将本来大一统的零碎拆分成多个规模小的局部,扩大时只批改其中一部分即可,毋庸整个零碎到处都改,通过这种形式来缩小改变范畴,升高改变危险。
不同的拆分形式,实质上决定了零碎的扩大形式。
拆分思路
面向流程拆分
- 计划:将整个业务流程拆分为几个阶段,每个阶段作为一部分
- 劣势:扩大时大部分状况只须要批改某一层,少部分状况可能批改关联的两层,不会呈现所有层都同时要批改
- 典型架构:分层架构
面向服务拆分
- 计划:将零碎提供的服务拆分,每个服务作为一部分
- 劣势:对某个服务扩大,或者要减少新的服务时,只须要扩大相干服务即可,毋庸批改所有的服务。
- 典型架构:SOA & 微服务
面向性能拆分
- 计划:将零碎提供的性能拆分,每个性能作为一部分
- 劣势:对某个性能扩大,或者要减少新的性能时,只须要扩大相干性能即可,毋庸批改所有的服务
- 典型架构:微内核架构
分层架构
概念:分层架构是很常见的架构模式,它也叫 N 层架构,通常状况下,N 至多是 2 层。
依据不同的划分维度和对象可分为:C/S 架构 &B/S 架构、MVC 架构 &MVP 架构、逻辑分层架构。
C/S 架构、B/S 架构
- 划分的对象是整个业务零碎
- 划分的维度是用户交互,行将和用户交互的局部独立为一层,撑持用户交互的后盾作为另外一层
MVC 架构、MVP 架构
- 划分的对象是单个业务子系统
- 划分的维度是职责,将不同的职责划分到独立层,但各层的依赖关系比拟灵便
逻辑分层架构
- 划分的对象能够是单个业务子系统,也能够是整个业务零碎
- 划分的维度也是职责,逻辑分层架构中的层是自顶向下依赖的
外围要点
- 须要保障各层之间的差别足够清晰,边界足够显著,让人看到架构图后就能看懂整个架构
- 分层架构之所以可能较好地撑持零碎扩大,实质在于隔离关注点(separation of concerns),即每个层中的组件只会解决本层的逻辑
- 并不是简略地分层就肯定可能实现隔离关注点从而撑持疾速扩大,分层时要保障层与层之间的依赖是稳固的,能力真正撑持疾速扩大。
- 分层构造的另外一个特点就是层层传递,也就是说一旦分层确定,整个业务流程是依照层进行顺次传递的,不能在层之间进行跳跃。
优缺点
长处
强制将分层依赖限定为两两依赖,升高了整体零碎复杂度。
毛病
- 分层架构另外一个典型的毛病就是性能,因为每一次业务申请都须要穿梭所有的架构分层,有一些事件是多余的,多少都会有一些性能的节约
- 分层构造的代价就是冗余,也就是说,不论这个业务有如许简略,每层都必须要参加解决,甚至可能每层都写了一个简略的包装函数。