Go Engineering - Specification - Life Cycle
生命周期管理
研发模式
瀑布模式
按照预先规划好的研发阶段来推进研发进度,串行执行(在每个阶段完美完成后,才会进入到下一阶段)
迭代模式
- 研发任务被切成一系列轮次,每一个轮次是一个迭代,每一次迭代都是从设计到实现的完整过程
- 不要求每个阶段的任务都做到最完美,先把主要功能搭建起来,然后再通过客户的反馈信息不断完善
- 缺点:比较专注于开发过程,很少从项目管理的视角去加速和优化项目开发过程
敏捷模式
- 将一个大的需求分成多个、可分阶段完成的小迭代,在开发过程中,软件一直处于可用状态!
- 敏捷模式需要高频地开发、构建、测试、发布和部署,进而催生了 CICD 技术
CICD
CICD 通过自动化的手段,快速执行代码检查、测试、构建、部署等任务,解决敏捷模式带来的弊端
- CI:Continuous Integration
- 频繁地将开发者的代码合并到主干上
- 流程
- 开发人员完成代码开发,push 到 git 仓库
- CI 工具对代码进行扫描、单元测试和构建,并将结果反馈给开发者
- CI 通过后会将代码合并到主干
- CI 可以让问题在开发阶段暴露,CI 执行很频繁,需要自动化工具支撑
- CD:Continuous Delivery
- 使得软件在较短循环中可靠发布的软件方法
- 持续交付在 CI 的基础上,将构建后的产物自动部署到目标环境中
- 目标环境一般为测试环境、预发环境,直接发布到生产环境,存在风险,需要评估
- CD:Continuous Deployment
- 持续部署在持续交付的基础上,将经过充分测试的代码自动部署到生产环境
- 持续部署强调的是自动化部署,是交付的最高阶段
- CICD 强调的是持续性,能够支持频繁地集成、交付和部署,离不开自动化工具的支持
- CI 的核心是代码,持续交付的核心是可交付的产物,持续部署的核心是自动部署
DevOps
DevOps 是一组过程、方法和系统的统称(而 CICD 只是软件构建和发布的技术,CICD 技术的成熟,加速了 DevOps 的落地),用于促进 RD、Ops 和 QA 之间的沟通、协作和整合
AIOps
- AIOps 通过搜集海量的运维数据,并利用机器学习算法,智能定位并修复故障
- AIOps 在自动化的基础上,增加了智能化
ChatOps
- 在一个聊天工具中,发送一条命令给 ChatBot 机器人,然后 ChatBot 会执行预定义的操作
- RD、Ops、QA 通过@机器人来触发任务,机器人会通过 API 接口调用的方式对接不同的系统,完成不同的任务
- 优势:利用 ChatBot 机器人让团队成员与各种辅助工具连接在一起,以沟通驱动的方式完成工作
GitOps
实现云原生的持续交付模型
- GitOps 是一种持续交付的方式
- 核心思想
- 将应用系统的声明式基础架构(YAML)和应用程序存放在 Git 版本库中
- 将 Git 作为交付流水线的核心,每个开发人员都可以提交 PR,并使用 Git 来加速和简化 K8S 的应用程序部署和运维任务
- 通过 Git,RD 可以将精力聚焦在功能开发,而不是 Ops
- 核心优点
- 当使用 Git 变更代码时,GitOps 可以自动将变更应用到程序的基础架构
- 整个流程是自动化的,部署时间更短
- Git 代码是可追溯的,部署的应用可能够稳定回滚
- 关键概念
- 声明性容器编排
- 通过 K8S YAML 格式的资源定义文件,来定义如何部署应用
- 不可变基础设施
- 基础设施中的每个组件都是可以自动部署,组件在部署完成后,不能发生变更
- 如果需要发生变更,则重新部署一个新的组件,K8S Pod 就是一个不可变基础设施
- 连续同步
- 不断查看 Git 仓库,将任何状态更改反映到 K8S 集群中
- 流程
- RD 开发完代码后推送到 Git 仓库,触发 CI 流程,CI 流程通过编译构建出 Docker 镜像,并将镜像推送到 Docker 镜像仓库中
- Push 动作会触发一个 Push 事件,通过 webhook 的形式通知到 Config Updater 服务
- Config Updater 服务会从镜像仓库下载镜像,并更新 Git 仓库中的 K8S YAML 文件
- GitOps 的 Deploy Operator 服务检测到 YAML 文件的变动,会重新从 Git 仓库提取变更的文件,并将镜像部署到 K8S 集群
- Config Updater 和 Deploy Operator 需要自研开发
- 声明性容器编排
NoOps
无运维,完全自动化的运维,为运维的终极形态,与 DevOps 类似,更多是一种理念,需要很多技术和手段来支撑
- 不再需要 RD、Ops 和 QA 的协同,把 Micro-service、Low-code、Serverless 全都结合起来,RD 只需要聚焦业务开发,所有维护都交由云厂商来完成
- GitOps、AIOps 可以减少运维,Serverless 可以免运维
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.