这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
此笔记的主要内容如下
- 什么是架构
什么是架构
定义
架构,又称软件架构,是有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计。
实现一个软件有很多种方式,架构在方法选择上起着至关重要的指导作用。
演进
单机
软件系统需要具备对外提供服务,单机,就是把所有功能都实现在一个进程里,并部署在一台机器上。
就像一个蛋糕店只有老板一个人,老板负责蛋糕店的所有工作。
优点是架构简单,但是存在一些问题:C10K问题,即所有功能只部署在一台机器上,所能提供的服务能力是有瓶颈的;运维需要停服,因为只有一个进程,在对服务进行运维的时候,所有服务都需要停止。
单体、垂直应用|垂直切分
单体架构:分布式部署,垂直应用架构:按应用垂直切分的单体
就像蛋糕店除了老板本人,还有多名蛋糕师傅,一位师傅请假,其他师傅的工作正常进行。
优先是:可以水平扩容,运维不需要停服 但依旧存在问题:职责太多,开发效率不高;爆炸半径大
SOA、微服务|水平切分
SOA,Service-Oriented Architecture,将应用的不同功能单元抽象为服务,定义服务之间的通信标准 微服务架构,SOA的去中心化演进方向
蛋糕店分工更加细化,蛋糕师傅专攻某一种蛋糕,原料准备、蛋糕烤制、杂活等不需要师傅本人参与,有学徒负责准备原料、蛋糕烤制或杂活。将职责纵深降低。
但也带来了挑战:
- 数据一致性:装货台共交付了多少蛋糕?
- 高可用:这么多师傅,如何合作?
- 治理:烤箱坏了,怎么容灾?
- 解耦vs过微:运维成本高了,值当吗?
小结
架构演进的初衷好比做蛋糕:
- 需求量越来越大,终归要增加人手;
- 越做越复杂,终归要分工合作
架构的演进思路就像切蛋糕:蛋糕越来越大,一口吃不下终归要切分
- 垂直切分
- 水平切分