这是我参与「第五届青训营 」笔记创作活动的第7天
本节课程主要讲解了架构相关的内容。
1.什么是架构
架构又称为软件架构,是有关软件整体结构和组件的抽象描述,用于指导软件系统各个方面的设计。
单机架构
单机架构将所有功能实现在一个进程里,并部署在一台机器上。
单体架构
单体架构即对单机架构进行分布式部署,以便于进行水平扩容,并且在运维时不需要停服。
垂直应用架构
垂直应用架构按照应用垂直切分成单体,不同应用相互之间并不影响。
SOA(Service-Oriented Architecture)
将应用的不同功能单元抽象为服务,定义服务之间的通信标准。
微服务架构是SOA的去中心化演进方向
2.企业级后端架构剖析
云计算
云计算是指通过软件自动化管理,提供计算资源的服务网络,是现代互联网大规模熟悉分析和存储的基石。
基础:
- 虚拟化技术:整租/合租
- 编排方案:业主/租赁平台
架构:
- Iaas(Infrastructure as a Service)
- Paas(Platform as a Service)
- Saas(Software as a Service)
- Faas(Function as a Service)
Iaas即为云计算提供的服务器设备,Paas即为配置好的服务器平台服务,Saas即为平台提供的软件服务,Faas即为软件提供的计算服务。
云原生
云原生对云部署四个方面的作用:
弹性资源
- 弹性计算资源
-
服务资源调度:微服务、大服务
-
计算资源调度:在线(如热销榜单) 、离线(如热销榜单更新)
-
消息队列:在线(削峰、解耦)、离线(热销榜单更新)
- 弹性存储资源
-
经典:对象(宣传视频)、大数据(用户消费记录)
-
关系型数据库:收银记录
-
元数据:服务发现(通讯录,可以理解为对某一结构体的索引)
-
NoSQL:非关系型数据库
DevOps(Development Operations)
快速进行软件开发的工作流。
微服务架构
通信标准:
- HTTP(RESTful API)
- RPC(Thrift, gRPC)
实际上在当前云原生场景下,微服务不需要在业务逻辑中实现符合通信标准的交互逻辑,而是交给框架来做。
服务网格
服务网格(Service Mesh):
- 微服务之间通讯的中间层
- 高性能网络代理
- 业务代码与治理解耦
服务网格是一组处理服务间通信的网络代理。
由于服务网格的治理都体现在数据面上,因此可以将异构系统治理统一化,代替Http/RPC等框架进行业务管理。
3.企业级后端架构面临的挑战
挑战
- 基础设施层面:物理资源有限(机器、带宽),资源利用率受制于部署服务
- 用户层面:网络通信开销大,网络抖动,异构时资源分配不均
解决方案
离在线资源分池
- 在线业务的特点:IO密集型为主、具有潮汐性、实时性
- 离线业务的特点:计算密集型占大多数、非实时性
自动扩缩容
自动扩缩容是实现离在线资源分配的一种手段,根据当前各个服务的资源占用程度,对资源池进行扩缩容。
微服务亲合性部署
- 将满足亲和性条件的容器调度到一台宿主主机
- 微服务中间件与服务网格通过共享内存进行通信
- 服务网格控制面实施灵活、动态的流量调度
流量治理
- 熔断、重试
- 单元化
- 复杂环境(功能、预览)的流量调度
CPU水位负载均衡
- Iaas:提供资源探针
- 服务网格:动态负载均衡
4.后端架构实战
设计CPU水位负载均衡
输入:
- 服务网格数据面:支持带权重的负载均衡策略
- 注册中心存储了所有容器的权重信息
- 宿主机能提供容器的资源使用情况、物理资源信息(如CPU型号)
关键点:
- 紧急回滚能力
- 大规模
- 极端场景
方案1:单机部署调权代理
- 采集宿主机物理资源信息
- 调整容器注册的权重
优点:复杂度低,完全分布式; 缺点:无紧急回滚能力,对业务无感知
graph TD
X(容器X的数据面)
A(宿主机A)
B(宿主机B)
C(调权代理)
D(调权代理)
E(注册中心)
X --> A
X --> B
A --> C
B --> D
C --> E
D --> E
方案2: 集群部署动态决策中心
- 容器动态权重自适应调整
- 服务网格的服务发现&流量调度能力
graph TD
X(容器X的数据面)
A(宿主机A)
B(宿主机B)
C(动态权重决策中心)
E(注册中心)
X --> A
X --> B
A --> C
B --> C
C --> E
缺点:过度流量倾斜可能会导致极端情况
方案3:RPC指标上报决策中心
- 服务网格上报RPC指标(从数据面上报到动态权重决策中心)
graph TD
X(容器X的数据面)
A(宿主机A)
B(宿主机B)
C(动态权重决策中心)
E(注册中心)
F(时序数据库)
X --> A
X --> B
A --> C
B --> C
C --> E
X --> C
C --> F
F --> C
由于数据面上报的RPC指标是时序化的,决策中心作出决策需要使用某一个时间段内的数据,因此需要时序数据库对RPC指标进行存储,这对数据库会带来一定的压力。
同时随着决策中心任务的增加,也使得决策中心的安全隐患增加。
方案4:动态决策中心微服务化
- 微服务化
- 引入消息队列削峰、解耦(即连接双方不需要接受到对方的响应,异步执行)
- 离在线链路切分
- 梳理强弱依赖
总结
本节课程主要围绕着后端架构出发,讲解了与架构有关的几个概念,并且结合企业级实战所遇到的各种问题,讨论了相关的解决方案,展望了未来架构发展的方向。