这是我参与「第三届青训营 - 后端场」笔记创作活动的的第 2 篇笔记。
一、什么是架构?
即软件架构,是有关软件整体结构与组件的抽象描述。实现一个软件有很多种方法,架构在方法选择上有至关重要的作用。
万丈高楼平地起,对于一座高楼而言,首先要设计好图纸,然后打好地基,再搭建好钢架。软件架构就如建楼中的打地基步骤,地基不稳,高楼易塌。
二、架构的演进
2.1 巨石架构(单机架构)
- 定义:将所有功能都实现在一个进程中,并部署在一台机器上。
- 优点:简单
- 问题:
- C10K problem1
- 运维需要停服
- 性能易出现瓶颈
2.2 单体、垂直应用|垂直切分
解决方案: 1、分布式部署(分布式操作复杂,运维成本高) 2、按应用垂直切分(划分不易,容易耦合) 其他问题: 对于分布式架构或垂直切分而言,开发效率低,而且容易产生连锁故障。
2.3 SOA、微服务|水平切分
SOA(Service-Oriented Architecture)
- 将应用的不同功能单元抽象成服务
- 定义服务之间的通信标准
问题: 数据一致性、高可用、治理容灾、解耦/过微
三、云计算
3.1 云计算
云计算:是指通过软件自动化管理,提供计算资源的服务网络,是现代互联网大规模数据分析和存储的基石。 基础:虚拟化(Docker容器),编排方案(K8S) 架构:
- laas (Infrastructure as a Service)
- Paas (Platform as a Service)
- Saas (Software as a Service)
- FaaS (Function as a Service)
3.2 云原生
云原生:云原生技术为组织(公司)在公有云、自由云、混合云等新型的动态环境中,构建和运行可弹性拓展的应用提供了可能。 弹性资源:
- 虚拟化容器
- 快速扩缩容 微服务架构:
- 业务功能单元解耦
- 统一的通信标准 DevOps:
- 敏捷开发
- CI/CD 服务网格:
- 业务与实例解耦
- 异构系统治理统一化
- 复杂治理能力