💌 这是我参与「第五届青训营」伴学笔记创作活动的第 8 天。
🧡 本堂课重点内容
- 后端架构实战
🧡 实战项目
💌 如何设计一个根据主机层面的资源信息,实时进行流量调度的系统,打平不同宿主机异构环境的算力差异。
输入
- 服务网格数据面:支持带权重的负载均衡策略。
- 注册中心存储了所有容器的权重信息。
- 宿主机能提供:容器的资源使用情况、物理资源信息。
关键点
- 紧急回滚能力。
- 大规模。
- 极端场景。
自适应静态权重
方案
- 采集宿主机物理资源信息。
- 调整容器注册的权重。
优势
- 复杂度低。
- 完全分布式,可用性高。
- 微服务中间件无适配成本。
缺点
- 无紧急回滚能力。
- 缺乏运行时自适应能力。
自适应动态权重 Alpha
💌 设计动态权重决策中心从注册中心在拉取服务注册信息,从配置中心中获取服务名字,向服务对应宿主机采集容器指标,通过一些复杂的计算更新权重。服务网格决定使用动态权重还是静态权重,提供紧急回滚。
方案
- 容器动态权重的自适应调整。
- 服务网格的服务发现 & 流量调度能力。
演进方向
- 解决无法紧急回滚的问题。
- 运行时权重自适应。
缺点
- 过度流量倾斜可能会有异常情况。
自适应动态权重 Beta
方案
- 服务网格上报 RPC 指标,存储在数据库中。
演进方向
- 极端场景的处理成为可能。
缺点
- 时序数据库压力较大。
- 动态权重决策中心职责越来越多,迭代->变更->风险。
自适应动态权重 Release
演进方向
- 微服务化。
- 引入消息队列削峰、解耦。
- 离在线链路切分。
- 梳理强弱依赖。
如何做架构设计
- 需求先行:弄清楚要解决什么问题。
- 业界调研:业界都有哪些解决方案可供参考。
- 技术选型:内部/社区都有哪些基础组件。
- 异常情况:考虑清楚xxx不行了怎么办。
🧡 课后总结
💌 本节课学习了实现负载均衡的架构,最后演进到使用消息队列进行离线分析,时序数据库存储动态权重信息,完成一个大规模的动态权重解决方案。设计架构需要有一个全局的视角,是软件工程师必不可少的技能。