这是我参与「第三届青训营 -后端场」笔记创作活动的的第6篇笔记
老师上课做例子的图很有趣,所以在这里也一起贴出来帮助理解
1 什么是架构
架构是有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计
实现一个软件有多个方法,架构在方法选择上起着重要作用
单机
单机就是把所有的功能都实现在一个进程里,并部署在一台机器上。
- 优点:显而易见,就是简单 除此以外,好像就没有优点……
单体、垂直应用|垂直切分
- 单体架构: 分布式部署,请多几位全栈师傅
- 把进程部署在多个机器上并引入负载均衡。经过这样的垂直切分,就来到了单体架构。
- 垂直应用架构:按应用垂直切分,就好比请来了做不同蛋糕的师傅
- 优点 这种架构解决了单机服务两个最重要的问题:
- 水平扩容
- 运维不需要停服
- 缺点:
- 职责太多,开发效率不高
- 爆炸半径大,一旦出问题,影响面不可估量
SOA、微服务|水平切分
SOA:
1 将应用的不同功能单元抽象为服务
2 定义服务之间的通信标准
微服务架构是SOA的去中心化演进方向,不同模块的RD可以专注于自己的业务逻辑,提高开发迭代效率;各个服务独立运维,变更操作的影响面可控,应用整体的稳定性得到提高
- 我们还需要解决垂直切分和水平切分带来了的一系列问题:
- 数据一致性
- 高可用 服务越来越多,依赖越来越复杂,如何做到高可用
- 治理 怎么容灾
- 解耦VS过微 运维成本提高,值得吗
2 企业级后端架构剖析
云计算
云计算是通过软件自动化管理,提供计算资源的服务网络,是现代互联网大规模熟悉分析和存储的基石
- 四层架构
Iaas
Paas
Saas
Faas
云原生
为组织在公有云、自由云、混合云等新型动态环境中,构建和运行可弹性拓展的应用提供了可能
它的代表技术有很多: 容器化、服务网格、微服务、不可变基础架构、声明式API
基于这些技术,开发者可以构建出容错性好、易于管理、具备较好观测性的云服务。
云原生主要涉及四个方面:
- 弹性计算资源:
- 服务资源调度
- 微服务:做蛋糕的雕花
- 大服务
- 计算资源调度
- 在线: 热销榜单
- 离线: 热销榜单更新
- 消息队列
- 在线: 削峰、解耦
- 离线: 大数据分析
- 服务资源调度
- 弹性存储资源
- 经典
- 对象:宣传视频
- 大数据:用户消费记录
- 关系型数据库
- 收银记录
- 元数据
- 服务发现:蛋糕店通讯录
- NoSQL
- KV:客户说要来个XXX蛋糕
- 经典
总结:将存储资源当成是服务
- DevOps 结合自动化流程,提高软件开发、交付效率
- 微服务架构
- 制定通信标准
- 微服务中间件 RPC和HTTP
- 性能
- 服务治理
- 协议可解释性 在云原生场景下,微服务不必再业务逻辑中实现符合通信标准的交互逻辑,而是交给框架来做
服务网格
- 微服务之间通讯的中间层
- 高性能网络代理
- 业务代码与治理解耦
案例中最后出来的云原生蛋糕店
3 企业级后端架构的挑战
- 挑战:
- 基础设施层面
- 物理资源有限
- 资源利用率受制于部署服务
- 用户层面
- 网络通信开销较大
- 网络抖动导致运维成本提高
- 异构环境下,不同实例资源水位不均
- 基础设施层面
解决方案
- 离在线资源并池
- 在线业务的特点:
- IO密集型为主
- 潮汐性、实时性
- 离线业务的特点:
- 计算密集型占多数
- 非实时性
- 核心收益
- 降低物理资源成本
- 提供更多弹性资源
- 在线业务的特点:
同一个机器,可以使用虚拟化等方式对核心做隔离,离在线的用各自的CPUset来实现离在线隔离
- 自动扩缩容
- 利用在线业务潮汐性自动扩缩容
- 核心收益:
- 降低业务成本
扩缩容依据什么指标?CPU使用量,是否有内存要求
- 微服务亲合性部署
- 将满足亲合性条件的容器调度到一台宿主机
- 微服务中间件与服务网格提高共享内存通信
- 服务网格控制面实施灵活、动态的流量调度
- 核心收益
- 降低业务成本
- 提高服务可用性
- 基于微服务中间件&服务网格的流量治理
- 熔断、重试
- 单元化
- 复杂环境的流量调度
- 核心收益
- 提高微服务调用容错性
- 容灾
- 进一步提高开发效率
- CPU水位负载均衡
- Iaas
- 提供资源探
- 服务网格
- 动态负载均衡
- 核心收益
- 打平异构环境算力差异
- 为自动化扩缩容提供正向输入
- Iaas
4 后端架构实战
- 要明确需要哪些输入
- 在设计时需要考虑哪些关键点
问题提炼
- 输入?
- 服务网格数据面
- 支持带权的负载均衡策略
- 注册中心存储了所有容器的权重信息
- 宿主机能提供:
- 容器的资源使用情况
- 物理资源信息(如CPU型号)
- 服务网格数据面
- 关键点
- 紧急回滚能力
- 大规模 系统的稳定性和计算瓶颈
- 极端场景
自适应静态权重
-
采集宿主机物理资源信息
-
调整容器注册的权重
-
优点:
- 复杂度低 在宿主机中加入了调权代理
- 完全分布式,可用性高 一个机器挂了,不会影响其他机器
- 微服务中间件无适配成本
-
缺点:
- 无紧急回滚能力
- 缺乏运行时自适应能力 暂时不支持权重可能要做的动态调整
自适应静态权重 Alpha
多了一个动态权重决策中心
- 容器动态权重的自适应调整,动态权重决策中心获取容器的指标
- 服务网格的服务发现&流量调度能力
- 演进方向
- 解决无法紧急回滚的问题
- 运行时权重自适应 静态权重有存储,有问题时可以调回
- 缺点
- 过度流量倾斜可能会有异常情况,有可能会把X上服务调成100,Y上服务调成10,所以需要其他指标来做参考
自适应静态权重 Beta
- 服务网格上报RPC指标,在服务网格层面做指标的收集
- 演进方向
- 极端场景的处理成为可能
- 缺点:
- 时序数据库压力较大,会成为系统瓶颈
- 动态权重决策中心职责越来越多,迭代——变更——风险
自适应动态权重 Release
- 演进方向:
- 微服务化
- 引入消息队列削峰、解耦
- 离在线链路切分
- 梳理强弱依赖