这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天
通过今天的学习,让我对后端架构有了一个新的认识:
- 没有最好的架构,只有最合适的架构
- 做架构设计
- 先从需求出发。要满足什么样的需求?预期规模有多大?
- 做足够的业界调研。业界对于类似的需求是怎么做的?有无成熟的方案可以借鉴?直接拿来用有什么问题?
- 技术选型。涉及的技术组件是自研,还是使用开源的?
- 异常情况。任何时候,都不能做『输入合法』的假设。容灾能力一定要有
- 学好架构,是工程师成长的一个重要标志
1、什么是架构
架构,又称软件架构,是有关软件整体结构与组件的抽象描述,用于指导软件系统各方面的设计
架构的重要性:
拿盖房子来做举例子。
我们都知道,地基对于一栋楼房的主要性,架构对于一个软件的重要性也是类似的:
- 架构没设计好,软件容易崩,用户体验上不去。最终要么重构,要么放弃
- 架构设计好了,软件的稳定性上去了,用户体验高了,口碑一点点就打造出来了
- 良好的架构基础,也为软件的未来发展提供了更多的可能。为用户赋能,实现自身价值
常见软件架构:
- 单机: All in one,所有的东西都在一个进程里,部署在一个机器上。
- 单体: 在单机架构的基础上,将进程部署到多个机器上。
- 垂直应用: 在单机架构基础上,将进程按照某种依据切分开。比如,A 软件和 B 软件的后端原先采用单机架构部署,那就是一个进程部署在多个机器上;如果用垂直应用架构,可以将 A 和 B 的后端拆分为 A、B 两个进程,然后再按照单体模式的思路,部署在多个机器上。
- SOA (Service Oriented Architecture): SOA 架构中,服务为一等公民,将进程按照不同的功能单元进行抽象,拆分为『服务』。有了服务之后,SOA 还为服务之间的通信定义了标准,保证各个服务之间通讯体验的一致性。
- 微服务 (Microservice): 在 SOA 架构中,ESB 起到了至关重要的作用。但从架构拓扑来看,它更像是一个集中式的模块。有一个 SOA 分布式演进的分支,最终的形态便是微服务。
2、企业后端架构剖析
- 云计算
- 基础
- 虚拟化
- 编排
- 架构
- IaaS: 云基础设施,对底层硬件资源池的抽象
- SaaS: 基于资源池抽象,对上层提供的弹性资源平台
- PaaS: 基于弹性资源平台构建的云服务
- FaaS: 更轻量级的函数服务。好比 LeetCode 等 OJ,刷题时只需要实现函数,不需要关注输入输出流
- 基础
- 云原生: 云原生,实际是云原生(计算)的简称,它是云计算发展到现在的一种形态。
- 弹性资源
- 计算资源
- 存储资源
- 微服务架构: 微服务架构下,服务之间的通讯标准是基于协议而不是 ESB 的。
- 通信协议
- 中间件
- DevOps
- 软件生命周期
- 服务网格
- 微服务之间通讯的中间层
- 一个高性能的 4 层网络代理
- 将流量层面的逻辑与业务进程解耦
- 弹性资源
没有什么是加一层代理解决不了的问题,服务网格相比较于 RPC/HTTP 框架:
- 实现了异构系统治理体验的统一化
- 服务网格的数据平面代理与业务进程采取进程间通信的模式,使得流量相关的逻辑(包含治理)与业务进程解耦,生命周期也更容易管理
3、企业后端架构的挑战
- 离线任务
- 在线任务
- IO 密集型
- CPU 密集型
- 服务治理
- IPC (Inter-Process Communication)
- RPC (Remote Procedure Call)