这是我参与「第五届青训营 」伴学笔记创作活动的第 11 天
1. 初识架构
1.1 架构定义
- 是有关软件整体结构与组件的抽象描述
- 用于指导软件系统各个方面的设计
1.2 架构发展
架构演进的思路:垂直切分——分布式,水平切分——分层/模块,以满足软件迭代诉求,提高迭代效率。
- 单机架构
All in one,所有的东西都在一个进程里,部署在一个机器上。
优点:简单
缺点:运维需要停服,用户体验较差; 承载能力有限。
- 单体架构
在单机架构的基础上,将进程部署到多个机器上。
优点:
具备水平扩容能力
运维不需要停服
缺点:
后端进程职责太多,越来越臃肿
爆炸半径较大,进程中一个很小的模块出现问题,都可能导致整个进程崩溃
- 垂直应用架构
在单机架构基础上,将进程按照某种依据切分开。比如,A 软件和 B 软件的后端原先采用单机架构部署,那就是一个进程部署在多个机器上;如果用垂直应用架构,可以将 A 和 B 的后端拆分为 A、B 两个进程,然后再按照单体模式的思路,部署在多个机器上。
优点:
一定程度上减少了后端进程职责
一定程度上缩小爆炸半径
缺点:
没有根本解决单体架构的问题
- SOA (面向服务架构)
SOA 架构中,将进程按照不同的功能单元进行抽象,拆分为服务。有了服务之后,SOA 还为服务之间的通信定义了标准,保证各个服务之间通讯体验的一致性。
优点:
各服务的职责更清晰
运维粒度减小到服务,爆炸半径可控
缺点:
ESB (企业服务总线) 往往需要一整套解决方案,过于中心化
- 微服务
在 SOA 架构中,ESB 起到了至关重要的作用。但从架构拓扑来看,它更像是一个集中式的模块。有一个 **SOA 分布式演进(去中心化)**的分支,最终的形态便是微服务。
需要解决的问题:
数据一致性;高可用;治理;解耦 vs 过微
优点:
兼具 SOA 解决的问题
服务间的通信更敏捷、灵活
缺点:运维成本
2. 企业级后端架构剖析
2.1 云计算
是指通过软件自动化管理、提供计算资源的服务网络,是现代互联网大规模熟悉分析和存储的基石。
云计算架构:
-
IaaS(Infrastructure as a Service)- 云基础设施,对底层硬件资源池的抽象
-
PaaS (Platform as a Service) - 基于资源池抽象,对上层提供的弹性资源平台
-
SaaS (Software as a Service) - 基于弹性资源平台构建的云服务
-
FaaS (Function as a Service) - 更轻量级的函数服务。好比 LeetCode 等 OJ,刷题时只需要实现函数,不需要关注输入输出流
2.2 云原生
云原生技术为组织(公司)在公有云、自由云、混合云等新型的动态环境中,构建和运行可弹性拓展的应用提供了可能。
-
弹性资源:
-
服务资源调度
-
计算资源调度
在线:热销榜单
离线:热销榜单更新
-
消息队列
在线:消峰,解耦
离线:大数据分析
-
存储资源
-
-
DevOps :
结合自动化流程,提高软件开发、交付效率
以下整个流程都需要DepOps支持
-
微服务架构:
通信标准:
HTTP (RESTful API)(可解释性强)
RPC (Thrift gRPC) (性能较好、天生具有服务治理能力)
-
服务网格:
微服务之间通讯的中间层
高性能网络代理
将流量层面的逻辑与业务进程解耦
服务网格相比较于 RPC/HTTP 框架:
-
实现了异构系统治理体验的统一化
-
服务网格的数据平面代理与业务进程采取进程间通信的模式,使得流量相关的逻辑(包含治理)与业务进程解耦,生命周期也更容易管理。
如下,原先要使用 RPC 进行通信,现在可以放到 Service Mesh 层。
3. 企业级后端架构的挑战
- 混合资源池 -- 解决资源利用率不均的问题
在线业务特点
I/O密集、潮汐性、实时性
离线业务特点
计算密集占多数、非实时性
在线、离线资源池自动扩缩容用于解决在线、离线资源隔离。
-
微服务亲合性部署 -- 解决网络开销较大问题
A、B服务存在大量的通信需求,将两个服务部署在一台宿主机上
- 基于微服务中间件 & 服务网格的流量治理 -- 容灾、提高微服务调用的容错性