一、什么是架构
1.1 架构的定义
架构是指有关软件整体结构和组件的抽象描述,用于指导软件系统各个方面的设计。实现软件有很多种方法,架构在方法选择上起着至关重要的指导作用。
1.2 架构的重要性
-
地基没打好,大厦容易倒,换言之,架构没设计好,软件可维护性差
-
地基坚实,大厦才能盖得高,换言之,架构没设计好,软件可扩展性差
-
站在巨人的肩膀上,才能看得远,换言之,优秀的架构能极大帮助软件开发
1.3 单机架构
单机是指把所有功能放在都在一个进程里,部署在一个机器上。
- 优点:
- 非常简单
- 缺点:
-
承载能力有限
-
运维需要停服
1.4 单体架构
单体架构是在单机架构的基础上,将进程部署到多个机器上,即分布式部署。
- 优点:
-
可以水平扩容
-
运维不需要停服
- 缺点:
-
进程职责太多,开发效率不高
-
爆炸半径较大
1.5 垂直应用架构
垂直应用架构是在单机架构基础上,将 A 和 B 的后端拆分为 A、B 两个进程,再按照部署在多个机器上。
- 优点:
-
减少了单体的后端进程职责
-
缩小爆炸半径
- 缺点:
- 没有根本解决单体架构的问题
1.6 SOA
SOA(Service-Oriented Architecture,面向服务架构)将进程按照不同的功能单元进行抽象,拆分为服务并为服务之间的通信定义了标准,保证各个服务之间通讯体验的一致性。
- 优点:
-
各服务的职责更清晰
-
运维粒度减小到服务,爆炸半径可控
- 缺点:
-
方案形态较重,扩展性不佳
-
可用性不高,不普及
1.7 微服务架构
微服务架构是SOA去中心化演进出的一种架构。
- 优点:
-
兼具 SOA 解决的问题
-
服务间的通信更敏捷、灵活
- 缺点:
-
需要解决数据一致性、灾容等问题
-
依赖复杂,运维成本增加
二、企业级后端架构剖析
2.1 云计算
云计算是指通过软件自动化管理,提供计算资源的服务网络,是现代互联网大规模分析和存储的基石。
- 基础:
-
虚拟化技术
-
编排方案
- 架构:
-
IaaS (Infrastructure as a Service),云基础设施,对底层硬件资源池的抽象
-
PaaS (Platform as a Service),基于资源池抽象,对上层提供的弹性资源平台
-
SaaS (Software as a Service),基于弹性资源平台构建的云服务
-
FaaS (Function as a Service),基于功能的抽象,提供更轻量级的函数服务
2.2 云原生
云原生为组织(公司)在公有云、自由云、混合云等新型的动态环境中,构建和运行可弹性拓展的应用提供了可能。
云原生代表技术:
-
弹性资源
-
微服务架构
-
DevOps
-
服务网格
-
容器化
-
不可变基础架构
-
声明式 API
2.2.1 弹性计算资源
2.2.2 弹性存储资源
将存储资源当成一种服务一样
2.2.3 DevOps
2.2.4 微服务架构
2.2.5 服务网络
三、企业级后端架构挑战
3.1 问题
企业级后端架构的挑战来自基础设施和用户两个层面。
3.2 离在线资源并池
3.3 自动扩缩容
3.4 微服务亲和性部署
3.5 流量治理
四、后端架构实战
4.1 问题提炼
关键点是如何实现紧急回滚、如何适应大规模、如何应对极端场景。