弹性伸缩系统

1. 项目背景

每次大促前我们都会面临着系统扩容的挑战,之所以使用"挑战"二字,是因为我们每次都是人肉操作,要投入大量的人员和时间去支持大促,之前的扩容流程如下:

  • 找到目标机器
    • 确定目标机器是否挂载data盘,确认/etc/fstab配置是否正确
  • 在云资源控制台基于此机器创建镜像
  • 基于镜像创建购买机器的订单
  • 发送leader审批订单付款
  • 协调研发发布代码保持版本一致
  • 慢慢放量观察请求状态是否正常

这一套流程下来超过1小时并且操作人感觉很疲惫,在这种状态下就很容易引发各种线上故障。

2. 项目目标

针对上述的复杂流程我们希望做出改变,因为我们认为扩缩容不应该是这么复杂且高风险的事情,我们要用标准化和自动化来替代人工。于是就有了自动伸缩系统这个项目, 项目目标很简单:

  • 大促1小时内完成所有项目扩缩容
  • 单应用5分钟内完成扩缩容

归根结底还是落到了成本/稳定/效率的核心目标上

3. 项目核心

为了完成上述的2个大目标,我们进行拆解分析,其实无非就是和CI/CD,云厂商,监控,网关方面的交互,问题不大, 具体拆解的项目核心如下:

  • 核心目标
    • CI/CD:
      • 在敏捷开发背景下,我们的操作在保证安全的情况下要尽可能小的影响开发人员
        • 扩容之前禁用项目发布
        • 扩容之后确保版本统一
    • 云厂商:
      • 确保扩容机器/容器环境一致
      • 确保配额充足
    • 监控:
      • 确保扩缩容之后快速发现异常,以实施应急预案
    • 网关:
      • 确保扩缩容对业务请求无影响(动态调整)

4. 项目挑战

  • 监控的实时性和准确性: 决定扩缩容是否正常的判断逻辑
    • 引入flink做实时计算
  • 统一网关: 决定动态调整流量的逻辑是否可实现
  • 镜像的制作速度
    • 异步制作/每天定时制作
    • 扩容之后打通ci/cd同步代码
posted @ 2022-04-11 21:32  白--茶  阅读(59)  评论(1编辑  收藏  举报