【引】伴随着微服务架构以及云技术的广泛使用,DevOps相应地引起了人们的关注,尤其在互联网企业展开了大量的探索和实践。去年赋闲在家的时候, 有幸精读了三本书,分别是《持续架构实践——敏捷和DevOps时代下的软件架构》,《精益DevOps——快速安全的IT交付宝典》和《基础设施即代码——模型驱动的DevOps》, 于是,温故知新,老码农对DevOps 又有了不同的体会。
DevOps的出现是“左移运动”的具体体现,是为了按时交付软件产品和服务,可看作开发、运维和质量保障三者的交集,旨在通过改善这三个部门之间的协作,提高组织提供应用程序和服务的速度,从而更好地为客户服务并在市场中保持竞争力。遗憾的是, 在经典DevOps 环中的“Test”并没有凸显QA团队的作用。
DevOps的实施涉及到多个方面,包括自动化工具的使用、持续集成/持续部署(CI/CD)的实践、监控和日志分析系统的建立等。通过这些实践,DevOps可以确保软件在开发、测试、部署和运维等各个环节中都能够保持高效、可靠和一致。
DevOps 的技术组成
DevOps 涉及了技术、组织、文化等多个领域,就相关技术技能而言, 大约包括以下几个层次:
基础的技术技能包括版本控制、Linux 操作系统的操作、编程技能、数据库和网络操作等,其中与Ops相关的编程主要是Shell 和Python。CI/CD 是DevOps 的关键环节,常见的工具包括Jenkins、Github Action,GitLab CI 等。容器化技术保证了CI/CD 的环境一致性,同时为服务和网络的编排提供了工具。就具体的部署环境而言, IaC 是实现面向混合云快速部署的关键。监控和日志与传统运维领域的技术类似,区别可能是颗粒度不同。
DevOps 中CI/CD 流水线
CI/CD 是DevOps 的关键技术点,工作流及其流水线是工程效率提升的主要体现。
CI/CD有助于从初始代码提交到部署的软件开发过程。通过自动化流水线,它消除了传统上将代码运送到生产环境所需的大量手动人工干预。
持续集成(CI)包括自动化构建、执行测试以及将单个开发人员的代码合并到共享存储库中。持续集成的主要目标是有效地将源代码集成到共享存储库中。一旦将更改提交给版本控制系统,就会执行自动构建和测试用例,以确保代码的功能和有效性。这些过程验证源代码如何编译以及测试用例在执行期间如何执行。
其中代码入库可以做成一个单独的流水线:
构建和测试作为另一条流水线:
持续部署(CD)是 CI/CD 流水线中 CI 之后的下一步,是自动部署将自动测试阶段传递到生产环境的每个代码更改的实践。其典型的流水线如下:
持续部署的重点是在生产环境中快速部署代码变更。它的根源可以追溯到敏捷宣言,强调“早期和持续交付的有价值的软件”来满足客户。真正的持续部署是具有挑战性的,而且没有像 CI 那样被广泛采用,但是一个更常见的实践方式是持续交付(Continuous delivery)。持续交付和持续部署的主要区别在于,持续交付可能侧重于“ready for production”,不是自动完成上线,而是完成上线准备。
从DevOps 到MLOps
如果对DevOps中的Dev 进行领域划分和扩展,就会形成XOps。随着人工智能的广泛使用, 机器学习成为了Dev 中的一个重要领域,从而形成了DevOps 的一个变体——MLOps。
MLOps的核心思想是将DevOps的流程和工具应用于机器学习领域,以实现机器学习应用的持续集成、持续交付和持续部署。MLOps的目标是通过使机器学习的开发、测试和部署更加自动化来增强软件开发的效率和质量。
MLOps可以更好地管理机器学习模型的生命周期,包括数据准备、传输和转换、模型训练和优化、模型评估和选择、模型部署和监控等。同时,MLOps也可以帮助团队管理开发和生产环境之间的差异,保证模型在生产环境中的稳定性和可靠性。简单而言,MLOps增加了领域特殊性的环节——持续训练(Continuous Training,CT)。
MLOps的引入,使得机器学习模型的开发和部署流程更加高效,从而加快了AI应用的创新速度并降低了错误率,还有助于加强数据安全性和合规性,并提高机器学习应用的可靠性和可维护性。
至于LLMOps, 后续会有专门的文章重点总结。
面向基础设施的DevOps
DevOps 不仅仅适用于软件交付,而是面向整个IT交付领域。那么,如何将DevOps应用于基础设施呢?如何高效、智能地管理和配置基础设施呢?
这就需要IaC,IaC 是面向基础设施的DevOps 的关键技术。面对基础设施尤其是网络环境的多样化和差异性,对网络进行建模是实现IaC的前提。
通过模型驱动的方式,IaC是一种将基础设施管理过程自动化的方法,通过使用编程语言来描述和管理基础设施资源,实现对基础设施的快速部署、配置和管理。
与传统的手动管理方式相比,IaC具有更高的灵活性、可扩展性和可维护性,能够帮助企业降低运营成本、提高运维效率。
从DevOps 到 DevSecOps
DevSecOps是DevOps实践的自然演变,其重点是将安全性集成到软件开发和部署过程中。术语“DevSecOps”代表了开发(Dev)、安全(Sec)和运营(Ops)实践的融合,强调了安全在整个软件开发生命周期中的重要性。在QCon 2022的关于工程师成长专题中,我曾分享过《工程师成长的金字塔思维》,其中涉及了DevSecOps 的敏捷安全金字塔。
DevSecOps的核心理念是“业务应用生命周期的每个环节都需要为安全负责,安全是整个IT团队(包括开发、测试、运维及安全团队)所有成员的责任,并且需要贯穿到从研发至运营的全过程”。相较于传统的研发运营安全,它更注重在开发阶段就考虑并融入安全因素,而不是仅仅在测试及运营阶段进行安全威胁的检测、识别、修复和防御。
DevSecOps是DevOps概念的延续,可以最大限度在软件上线前减少产品的漏洞,并完全地被最终用户使用。由于每个流程和相关工作流程都通过严格的安全检查实现自动化,因此可以更准确地满足安全要求。
DevOps 的方法论
我们很容易理解DevOps为IT服务交付带来的诸多益处,但对如何让DevOps 真正融入我们的软件工程中往往缺乏真正有意义的指导方法。也就是说,DevOps的落地确实是个难题,它不仅需要技术层面的支持,还需要组织文化、流程管理、团队协作等多方面的配合。
“他山之石,可以攻玉”,我们可以参考借鉴其他领域的反法论来实现DevOps,例如精益管理。精益管理是由丰田精益生产方式创生出的具有全新思维方式和行为方式的管理,在制造业取得了巨大的成功。精益思想是适于任何组织消除浪费、创造价值的最强有⼒⼯具。基于精益思想的DevOps能有效地减少交付摩擦和管理服务交付风险,应用OODA循环,可以通过管理不可预测性来提升组织的执行力,
DevOps 本身就是把精益思想应用到技术价值流中的结果,而技术价值流是把业务构想转化为向客户交付价值的、由技术驱动的服务所需要的流程。精益思想是DevOps乃至敏捷开发的魂魄,也是指引DevOps及敏捷开发落地的灯塔。