这是我参与「第五届青训营 」伴学笔记创作活动的第 9 天
什么是架构
围绕架构的定义和演进两部分内容展开
1. 什么是架构 — 定义
架构,又称软件架构
- 是有关软件整体结构与组件的抽象描述
- 用于指导软件系统各个方面的设计
常见软件架构:
- 单机
- 单体
- 垂直应用
- SOA (Service Oriented Architecture)
- 微服务 (Microservice)
2. 什么是架构 — 单机
软件系统需要具备对外提供服务,单机,就是把所有功能都实现在一个进程里,并部署在一台机器上
- 优点:
- 简单
- 缺点:
- C10K problem
- 运维需要停服
- 演进:如何卖更多的蛋糕? —— 多雇几个蛋糕师傅
3. 什么是架构 — 单体、垂直应用 | 垂直切分
- 单体架构:分布式部署
- 垂直应用架构:按应用垂直切分的单体
- 优点:
- 水平扩容
- 运维不需要停服
- 问题:
- 指责太多,开发效率不高
- 爆炸半径太大
- 演进:如何提高做蛋糕效率? —— 分工协作
4. 什么是架构 — SOA、微服务 | 水平切分
- SOA(Service Oriented Architecture)
- 将应用的不同功能单元抽象为服务
- 定义服务之间的通信标准
- 问题:
- 数据一致性:装货台共交付了多少蛋糕?
- 高可用:这么多师傅,如何合作?
- 治理:烤箱坏了,怎么容灾?
- 解耦 vs 过微:运维成本高了,值当么?
5. 什么是架构 — 小结
架构的演进初衷:好比做蛋糕
- 需求量越来越大,终归要增加人手
- 越做越复杂,终归要分工合作
架构的演进思路:就像切蛋糕。蛋糕越来越大,一口吃不下终归要切分
- 竖着切 (垂直切分)
- 横着切 (水平切分)
总结
其实架构无处不在,它不只在计算机中存在,它在我们生活当中也很常见,比如我们着手解决一些问题,首先要计划一套方案,一套流程,这些方案和流程其实就是一种架构。在软件系统中,架构是非常重要的一部分,它统领各个模块的开发和合作。可以把软件架构理解成一栋房子的框架,与现实生活中的房子有异曲同工之处,这个框架有很多个大大小小的房间,每个房间可以放各种类型的东西。框架可以做的很大,也可以做的很小,关键看你的需求。我们需要一个坚固的、多样化的、好用的、可伸缩的、容错性强的房子,这也是我们设计架构所追求的目标。