单机架构
单机架构是把所有功能都实现在一个进程里,并且部署在一台机器上。优点是简单,但是缺点在于其能够承载的带宽有限,而且进行运行维护必须关停服务器。模块之间相互影响,
单体架构
单体架构和单机架构最大的不同是单体架构可以有多个进程一同处理需求,其中用户会被分流到不同的分布式应用上,从而实现水平扩容,就像蛋糕店雇多了几个师傅一同做蛋糕一样。但是所有的职责都会在一个进程内完成,单个进程的职责过重,就如同一个蛋糕师傅需要制作所有类型的蛋糕一样
垂直应用架构
垂直应用架构是对单体架构的改进,按照业务线垂直划分比如说一个进程对应一个特定的功能,就如同一个师傅只负责一种蛋糕一样。垂直应用架构可以按照应用垂直切分单体。其优势在于各个业务都是独立开发维护的
但是垂直应用架构中单个进程的职责还是很重,一旦某个进程的某一步出现故障,那么该进程就会瘫痪,而且有一些各个进程都需要进行的重复性工作被分散到了各个进程中,降低了效率。比如每一个蛋糕都需要蛋糕胚,按照垂直应用架构,每一个师傅都要自己做蛋糕胚,实际上讲做蛋糕胚的任务集中起来效率会更高。而且每个服务依旧是一个单体架构,依旧存在单体架构的缺点
分布式架构
分布式架构在垂直架构的基础上,抽离除了业务无关的公共模块,在中间增加列一个服务层,减少了垂直应用架构的服务中的重复模块,实现了公共逻辑的复用。
但是他的劣势在于:某个服务模块的bug可能导致全站瘫痪,而且服务的调用关系十分复杂
SOA
SOA的思想是面向服务的
SOA的特性是:
- 将应用的不同功能单元抽象为服务
- 定义服务之间的通信标准
SOA架构是一种水平切分,对职责进行了进一部分的切分,将将职责扁平化,然后再组合起来,并且通过中心化的手段解决了分布式架构中的调用关系复杂的问题
经过水平切分后,在“兰师傅蛋糕店沟通技巧”部分将各个蛋糕部分组合在一起,实现了更为高效的系统。
这个兰师傅蛋糕店沟通技巧就是一个服务注册中心,展现层和服务层通过服务注册中心交互,可以实现服务的发现和注册等。
但是SOA的问题是:整个系统设计是中心化的,是从上至下的设计,这导致系统重构的难度和成本都很大
微服务
微服务架构是SOA的去中心化演进方向。是彻底的服务化
对于微服务,有以下挑战:
- 数据一致性问题:如何保证各个分布式服务数据一致
- 高可用问题:服务之间如何合作
- 治理:如果某个微服务出错,如何容灾
- 解耦还是过微:过分的解耦会使得服务太多,使得运维成本反而增加
微服务优势在于:
- 开发效率高,开发者只需要聚焦于自己要实现的微服务的功能而不需要管其他微服务
- 业务独立设计
- 自下而上,使得重构变得容易
- 故障隔离,一个微服务的故障不会使得系统崩溃
劣势在于:
- 治理和运维的难度都提升了,尤其是微服务拆分粒度太细的时候
- 微服务对安全性的要求更高
架构的演进就如同做蛋糕,需求量越来越大,总归要增加人手;越做越复杂,总归要分工合作。架构的演进可以水平切分或者竖直切分