这是我参与「第三届青训营 -后端场」笔记创作活动的的第二篇笔记。
定义
是软件整体结构和组件的抽象描述,用于指导系统设计。
类型
软件系统需要具备对外提供服务。
单机
把所有功能都实现在一个进程里,并部署在一台机器上。
优点:简单。
缺点:C10K问题;运维需要停服。
单体
在单机架构的基础上,将进程部署到多个机器上。
优点:具备水平扩容能力;运维不需要停服。
缺点:后端进程职责太多,越来越臃肿;爆炸半径较大,进程中一个很小的模块出现问题,都可能导致整个进程崩溃。
垂直应用(垂直切分)
在单机架构基础上,将进程按照某种依据切分开。比如,A 软件和 B 软件的后端原先采用单机架构部署,那就是一个进程部署在多个机器上;如果用垂直应用架构,可以将 A 和 B 的后端拆分为 A、B 两个进程,然后再按照单体模式的思路,部署在多个机器上。
优点:一定程度上减少了后端进程职责;一定程度上缩小爆炸半径。
缺点:没有根本解决单体架构的问题。
SOA(面向服务架构)
SOA 架构中,服务为一等公民,将进程按照不同的功能单元进行抽象,拆分为『服务』。有了服务之后,SOA 还为服务之间的通信定义了标准,保证各个服务之间通讯体验的一致性。
优点:各服务的职责更清晰;运维粒度减小到服务,爆炸半径可控。
缺点:(企业服务总线) 往往需要一整套解决方案。
微服务
在 SOA 架构中,ESB 起到了至关重要的作用。但从架构拓扑来看,它更像是一个集中式的模块。有一个 SOA 分布式演进的分支,最终的形态便是微服务。
优点:兼具 SOA 解决的问题;服务间的通信更敏捷、灵活。
缺点:运维成本。
水平切分
SOA的去中心化演进方向。 问题:数据一致性(一共)、高可用(如何合作)、治理(容灾)、解耦vs过微(运维成本高)?
小结
- 架构演进的初衷:满足软件迭代诉求,提高迭代效率
- 架构演进的思路:垂直切分——分布式,水平切分——分层/模块化