架构初探(2) | 青训营笔记

109 阅读2分钟

💌 这是我参与「第五届青训营」伴学笔记创作活动的第 8 天。

🧡 本堂课重点内容

  • 后端架构实战

🧡 实战项目

💌 如何设计一个根据主机层面的资源信息,实时进行流量调度的系统,打平不同宿主机异构环境的算力差异。

输入

  • 服务网格数据面:支持带权重的负载均衡策略。
  • 注册中心存储了所有容器的权重信息。
  • 宿主机能提供:容器的资源使用情况、物理资源信息。

关键点

  • 紧急回滚能力。
  • 大规模。
  • 极端场景。

自适应静态权重

image.png 方案

  • 采集宿主机物理资源信息。
  • 调整容器注册的权重。

优势

  • 复杂度低。
  • 完全分布式,可用性高。
  • 微服务中间件无适配成本。

缺点

  • 无紧急回滚能力。
  • 缺乏运行时自适应能力。

自适应动态权重 Alpha

image.png

💌 设计动态权重决策中心从注册中心在拉取服务注册信息,从配置中心中获取服务名字,向服务对应宿主机采集容器指标,通过一些复杂的计算更新权重。服务网格决定使用动态权重还是静态权重,提供紧急回滚。

方案

  • 容器动态权重的自适应调整。
  • 服务网格的服务发现 & 流量调度能力。

演进方向

  • 解决无法紧急回滚的问题。
  • 运行时权重自适应。

缺点

  • 过度流量倾斜可能会有异常情况。

自适应动态权重 Beta

image.png

方案

  • 服务网格上报 RPC 指标,存储在数据库中。

演进方向

  • 极端场景的处理成为可能。

缺点

  • 时序数据库压力较大。
  • 动态权重决策中心职责越来越多,迭代->变更->风险。

自适应动态权重 Release

image.png

演进方向

  • 微服务化。
  • 引入消息队列削峰、解耦。
  • 离在线链路切分。
  • 梳理强弱依赖。

如何做架构设计

  • 需求先行:弄清楚要解决什么问题。
  • 业界调研:业界都有哪些解决方案可供参考。
  • 技术选型:内部/社区都有哪些基础组件。
  • 异常情况:考虑清楚xxx不行了怎么办。

🧡 课后总结

💌 本节课学习了实现负载均衡的架构,最后演进到使用消息队列进行离线分析,时序数据库存储动态权重信息,完成一个大规模的动态权重解决方案。设计架构需要有一个全局的视角,是软件工程师必不可少的技能。