阿里巴巴DevOps实践指南(八)| 以特性为核心的持续交付

简介: 今天,基于云的开发已成为主流,这是效能提升的巨大机会,同时又对工程实践提出了前所未有的要求。比如,云原生基础设施、云原生中间件和新一代的云软件编程方法等等,都要求有与之适配的实践和工具。在适配新的技术发展趋势过程中,阿里形成了以特性为核心的持续交付工程实践,并且将其内建到 DevOps 工具体系中,以保障实践准确、有效地落地。

image.png

编者按:本文源自阿里云云效团队出品的《阿里巴巴DevOps实践指南》,扫描上方二维码或前往:https://developer.aliyun.com/topic/devops,下载完整版电子书,了解阿里十年DevOps实践经验。

随着微服务架构和云原生技术的成熟,持续交付的理念也深入人心。持续交付要求开发团队持续、高频地向生产系统交付软件。然而,不断增多的服务数量,给企业交付流程管理带来了巨大挑战。同时,在 DevOps落地的过程中,逐步开放生产环境的发布权限给到开发人员,这种松管控与企业安全生产存在冲突,多应用版本之间的协同问题也逐渐凸显。如何解决企业在新技术转型和 DevOps 落地中的痛点,拿到技术变革带来的效能红利,是每个企业包括阿里巴巴都必须面对和解决的难题。

软件交付挑战

阿里巴巴 2008 年对淘宝巨型服务进行拆分以后,逐步形成了一套适用于服务化、分布式架构的中间件体系,解决了复杂系统性能和稳定性在业务高速扩张中的瓶颈问题。随之而来的是应用变多、架构依赖复杂、人员数量高速膨胀、技能参差不齐等等问题。总结下来有以下几个方面:

应用数量多

微服务架构被广泛应用以后,首先面临的就是应用数量的快速膨胀。原有研发流程也必须从批量发布模式向持续交付模式转型,否则会导致发布软件的风险和回滚的复杂度不可控。另一方面,测试和运维的工作量因为应用的膨胀而倍增,变成整个研发团队的效率瓶颈。打破这种瓶颈的方法就是 DevOps 的全面落地,把整个软件交付过程交给开发来主导,从而解除瓶颈提升效率。

架构依赖复杂

微服务架构让应用内依赖变为了应用间依赖,变更过程无法做到原子化,因此需要很好的模块拆分和接口设计。一方面减少单特性覆盖的应用数量,变更顺序可控、回滚风险可控;另一方面单元测试能覆盖的场景需要集成测试来覆盖,导致开发过程对测试环境的使用频度和依赖度变高,需要稳定、可靠的环境来保障所有开发人员都可以并行工作。

测试资源成本大

测试环境受到资源成本和运维成本双重制约。在业务发展初期,可以采用全链路完整部署加上多套环境的方式来满足研发团队的要求。但是随着业务的快速发展和研发团队的快速扩张,不断地增加环境在成本上已经无法负担。因此需要一套运维高度自动化,高度弹性随用随取,并且可以实现局部隔离的测试环境方案来满足多版本部署需求。

研发协同难

研发环节的协同分为开发间协同和测试,开发、运维多角色间协同两种。前者主要解决并行开发、按需上线的问题。后者解决的是在一个交付流程中各司其职、互相约束,确保软件能高质量、安全交付的问题。在DevOps 场景下软件交付过程由开发人员主导,而测试和运维角色则需要承担流程守护、门禁卡点、提供自动化工具的责任。为了提升协同的效率,需要一个能够满足以上要求的工具平台来将团队的约定固化下来,确保团队各个角色可以高效率的完成工作。

线上风险大

线上的风险来自于两方面,一方面越来越高频的线上迭代意味着出错的概率也在变大,另一方面随着系统规模变大,传统人防人治的手段已不可能满足风控要求。因此必须从出错可能性和出错影响面两个方面系统性地去解决问题,前者关注能否在出错之前对风险进行拦截,而后者关注系统变更影响的用户数量和频度。这两种主动和被动防御措施的相结合,可以有效的解决风险控制的投入产出比问题,从而达到一个比较优的状态。

解决思路

为了解决以上在企业规模增长和新技术应用中的种种交付痛点,阿里巴巴不断探索和尝试,逐步摸索出一种适合这种业务发展快、软件迭代快、架构依赖复杂场景的交付方法和实践,我们称之为“以特性为核心的持续交付”。它有三个特点:

以特性为核心

特性是一个用户能体验到的产品能力的最小单元,其代码可能涉及到多个应用,因此特性也是协同多个开发团队完成一个能力的最小单元。以特性为核心的交付过程管理可以有效地将开发、测试等角色连接起来并统一推进,比如组织隔离测试环境、运行自动化测试、编写测试用例、做好测试验收等等。

以应用为载体

应用可以直接对应一个服务,是提供一种业务能力的最小单元,也是软件交付和运维的最小单元。可以通过应用串联代码、流水线、环境、测试和资源,以及外围工具链比如监控、数据库、运维、中间件等。开发人员可以在工具平台上定义他的应用,及应用的交付运维过程,比如配置流水线、规划环境、创建资源、设置部署策略等。以独立应用为载体的交付流程可以实现软件交付的原子化,并强迫开发降低应用间的耦合性,同时避免系统级集中式交付模式的惯性。

松管控与强卡点

在软件高速迭代下需要兼顾质量和效率,DevOps 模式需要给开发人员足够的自由度来完成软件的线上变更,阿里巴巴结合自身业务特点,在实践上采用了松管控和强卡点结合的方式。“松管控”表现在有多种流水线可以供开发选择,应用负责人可以完整定义这个应用的各种规则,比如如何部署、如何测试、资源环境如何配置。在技术可控的前提下,还可以开放线上测试,比如全链路压测和全链路灰度。轻发布,重恢复,在每一个应用维度,开发可以随时使用流水线来交付代码,不主张过多的人为限制,重点需要思考的是如果出问题,如何控制影响面,如何快速恢复。“强卡点”是一种软件质量底线思维的体现,比如代码审核和质量红线,规约检查,发布窗口,安全检查,线上灰度卡点等。这些卡点是为了保障集团所有开发工程师步调统一,交付合格的产品。

持续交付的核心是快速高质量地交付价值,给与开发人员最大自由度,负责开发和运维全部过程。在监控、故障防控工具、功能开关的配合下,可以在保障用户体验和快速交付价值之间找到平衡点。

总结

今天,基于云的开发已成为主流,这是效能提升的巨大机会,同时又对工程实践提出了前所未有的要求。比如,云原生基础设施、云原生中间件和新一代的云软件编程方法等等,都要求有与之适配的实践和工具。在适配新的技术发展趋势过程中,阿里形成了以特性为核心的持续交付工程实践,并且将其内建到 DevOps 工具体系中,以保障实践准确、有效地落地。

接下来的我们将按照软件开发和交付过程逐一介绍,具体包括:开发、调试、测试、集成、交付。

免费下载《阿里巴巴DevOps实践指南》

阿里巴巴合伙人和业界多位大佬力荐、何勉、陈鑫等17位阿里资深技术专家联袂出品、阿里十年DevOps经验沉淀总结、阿里巴巴DevOps落地实践一本通。

前往:https://developer.aliyun.com/topic/devops,下载完整版电子书。

image.png

相关文章
|
19天前
|
运维 监控 Devops
DevOps文化:持续交付与持续反馈的文化构建与实践
【10月更文挑战第26天】DevOps作为一种将开发与运维紧密结合的文化和实践,通过促进团队协作与自动化流程,实现快速、稳定且高质量的软件交付。本文重点探讨持续交付与持续反馈两大支柱,通过实际案例和示例代码,展示其构建与实践过程。例如,使用Jenkins构建CI/CD流水线,通过Grafana和Prometheus实现实时监控,确保软件质量和快速响应。
28 1
|
13天前
|
运维 Devops jenkins
DevOps实践之持续集成与持续交付
【10月更文挑战第32天】在软件开发的快节奏世界中,DevOps已经成为提升效率和质量的关键策略。通过将开发(Development)和运维(Operations)紧密结合,DevOps促进了更快速的软件发布和更高的可靠性。本文将深入探讨DevOps的核心组成部分——持续集成(CI)和持续交付(CD),并展示如何通过实际代码示例实现它们,以帮助团队构建更加高效和稳定的软件发布流程。
|
18天前
|
运维 Devops jenkins
DevOps文化:持续交付与持续反馈的文化构建与实践
【10月更文挑战第27天】DevOps文化强调开发和运维的紧密合作,以实现快速、高质量的软件交付。核心在于持续交付和持续反馈。本文探讨了如何通过改变组织结构、构建跨功能团队、使用自动化工具(如Jenkins)和积极收集用户反馈,来构建和实践DevOps文化。
29 0
|
6月前
|
Ubuntu 安全 Docker
【DevOps】Docker 最佳实践指南(绝对干货)
祝您的 Docker 之旅一切顺利!
210 4
|
2月前
|
运维 监控 Devops
拥抱 DevOps 文化:实现持续交付与部署的最佳实践
在软件开发领域,DevOps 强调开发与运维团队的协作,通过自动化、持续集成与部署等实践缩短系统开发生命周期,提升软件质量。其核心原则包括自动化、协作、度量与共享责任。实施 DevOps 需要建立跨功能团队、采用版本控制、持续集成与部署、自动化测试及监控反馈。常用工具有 Jenkins、GitLab CI/CD、Ansible、Prometheus 和 ELK Stack 等。DevOps 通过文化与技术变革,加速软件交付并提高客户满意度。
|
3月前
|
持续交付 jenkins Devops
WPF与DevOps的完美邂逅:从Jenkins配置到自动化部署,全流程解析持续集成与持续交付的最佳实践
【8月更文挑战第31天】WPF与DevOps的结合开启了软件生命周期管理的新篇章。通过Jenkins等CI/CD工具,实现从代码提交到自动构建、测试及部署的全流程自动化。本文详细介绍了如何配置Jenkins来管理WPF项目的构建任务,确保每次代码提交都能触发自动化流程,提升开发效率和代码质量。这一方法不仅简化了开发流程,还加强了团队协作,是WPF开发者拥抱DevOps文化的理想指南。
85 1
|
3月前
|
持续交付 jenkins C#
“WPF与DevOps深度融合:从Jenkins配置到自动化部署全流程解析,助你实现持续集成与持续交付的无缝衔接”
【8月更文挑战第31天】本文详细介绍如何在Windows Presentation Foundation(WPF)项目中应用DevOps实践,实现自动化部署与持续集成。通过具体代码示例和步骤指导,介绍选择Jenkins作为CI/CD工具,结合Git进行源码管理,配置构建任务、触发器、环境、构建步骤、测试及部署等环节,显著提升开发效率和代码质量。
76 0
|
4月前
|
运维 Devops jenkins
DevOps实践之路:从自动化部署到持续交付
【7月更文挑战第16天】在当今快速迭代的软件生命周期中,DevOps已经成为提升效率、缩短产品上市时间的关键因素。本文将深入探讨DevOps的核心理念与实践,特别是如何通过自动化工具实现代码的持续集成和部署,以及如何构建有效的持续交付流程。我们将从理论出发,结合实际案例分析,为读者提供一套完整的DevOps落地方案。
|
6月前
|
网络协议 Ubuntu Devops
【DevOps】Docker 最佳实践指南(绝对干货)
如果需要通过网络远程访问 Docker 守护进程,应开启 TLS 并确保只接受来自可信客户端的连接。
59 3
|
6月前
|
安全 Devops 网络安全
【DevOps】Docker 最佳实践指南(绝对干货)
【DevOps】Docker 最佳实践指南(绝对干货)
71 2