写点什么

《A Practical Guide to Continuous Delivery》作者访谈录

  • 2018-01-02
  • 本文字数:3379 字

    阅读完需:约 11 分钟

本文要点

  • 持续交付(CD,Continuous Delivery)带来了快速的反馈循环,从而产生更简单的技术解决方案,它能得到更好的容错性,并且能够得到更简单的应用程序架构。
  • 对于新的软件项目,持续交付能够更快地实现增值,而现有项目的价值则需要以每一个案例为基础。
  • 在理想情况下,持续交付应该与测试周期的其余部分进行集成。负载测试、容量测试以及金丝雀部署(canary deployment)都完全适合持续交付管道,这使得人们可以把注意力集中放在那些可能难以量化的边缘案例和验收测试上。
  • 回滚部署、金丝雀部署以及蓝绿部署(blue-green deployments)变得越来越复杂,而那些由较小的、模块化的组件构成的系统更易于利用持续交付以及更便于集成。反之亦然,成功的持续交付就能够带来以这种方式设计的系统。

InfoQ:非常感谢您能接受 InfoQ 的采访。您能简单的介绍下自己吗?介绍下您在持续交付方面的背景以及您为什么要写这本书呢?

我的名字是 Eberhard Wolff。我是德国公司 innoQ 的一员。我们所做的行业是软件项目。我的工作重心不在于做项目,而是在于咨询和培训。

我写这本书的原因是,我认为在开发软件的时候,持续交付是提高生产力和提高软件质量的最重要的工具。然而,人们却常常为了实现持续交付而焦头烂额。这本书给持续交付实践提供了一个非常实用的指南,其中涵盖了许多具体的技术案例。

这本书有助于获得技术上的实际经验,然后开始实现持续交付。这本书还附带了一个可执行的应用程序示例,其中包括了持续交付中管道的每个步骤的实现。读者可以安装这个应用程序来获得一些有关技术的经验。

InfoQ:组织或项目团队需要做什么样的分析才能决定什么时候实现持续交付以及在持续交付上需要实现什么呢?以及有哪些影响因素呢?

持续交付最明显和最原始的目标是改善新特性推向市场的时间,从而获得更好的业务成果。但是持续交付还能带来更多好处:通过可重复的结果进行不断地测试,用这种高度的自动化测试提高了软件的质量。更频繁的部署和自动化的部署降低了部署的风险。这对软件开发以及 IT 都有着十分积极的影响。这些好处就是去实现持续部署最好的理由。

你能通过持续交付走多远取决于对业务、软件开发、运维以及质量评估(QA)的投入。如果对业务的投入不够,你就无法得到更好的推向市场的时机。如果对于运维的投入不够,你就没办法扩展你的自动化管道使其直接投入生产。即便是你实现了一个不完全的持续交付也是值得的,当然了它也会不断完善。

InfoQ:您能举一些具体的例子吗?谈谈您所看到的已经实现了的持续交付或者是集成到应用程序架构中的持续交付。它们都是什么样的?有哪些注意事项呢?

人们总是觉得持续交付是有关于自动化集成的。但是持续交付的核心其实是测试和可靠性。我认为你永远不会进行非常多次的手工测试,当然了,手工测试也不会拥有极高的可靠性。

对架构的影响是将其分成了单独的可部署模块:微服务。持续交付是采用微服务的一个重要驱动因素。这就是我现在主要关注架构和微服务的原因,也是我为什么写了一本关于微服务的书的原因。但是通常情况下,微服务体系结构设计的方式是,最终仍然需要将所有东西都部署到一起。这样做的话是无法利用持续交付的优势的。

因此,我认为问题的关键不在于过分强调持续交付,而在于没有实现目标,或者只关注自动化部署,而不把测试考虑在内。

InfoQ:您能详细谈谈持续交付对应用程序测试、对基础架构的测试以及对软件开发生命周期都有哪些影响吗?

持续交付把重心放到了测试的自动化上。即便存在众所周知的困难,验收测试也应该是自动化的。这会使得测试的速度更快。因为持续交付的管道会频繁地被执行,因此许多很小的改动都会得到测试。这使得测试更加容易,并且能够提供更快的反馈。因此,持续交付不仅提高了对测试的关注程度,还改进了测试的方法。

InfoQ:为什么验收测试如此重要呢?

验收测试是为了使客户能够接受这个软件。客户通常会对软件进行手工测试。这种手工测试可能会持续几天甚至几周的时间,而且手工测试很容易出错。因此验收测试为软件的改进提供了巨大的潜力。如果这些测试是自动化的,那么整个流程就会更快、更可靠。

然而,验收测试通常情况下很难自动化,因为客户必须要理解并信任自动化的验收测试,否则他们将会继续他们的手工测试。这本书向大家展示了一种技术,它实现了行为驱动设计(behavior-driven design)用以改进客户进行验收测试时的协作。书中还展示了一个基于 UI 的测试作为替代。最后,测试的重点应该更多地放在协作和信任上,而不是在技术上。

InfoQ:您能谈谈探索性测试、金丝雀(canary)以及容量测试吗?因为它们都与持续交付有关。

探索性测试基本上与持续交付平台分离了。例如,对一个软件的注册过程做可用性测试或性能测试。测试团队会通过手工的探索性测试来进行测试。由于现在大多数的测试都是自动化的,测试人员就可以将注意力集中在这些测试上。探索性测试并不能阻止软件的发布,它的目的是为了完善软件。

金丝雀发布(Canary Releasing)的意思是该软件仅安装在集群中的几个服务器上。只有在这些服务器上能够正常工作之后,它才会被安装到其他服务器上。这通常是通过自动化部署实现的。但是,金丝雀部署(canary-deployment)是一种部署模式,它可以在部署过程中以不同的方式进行实现。在部署过程中,金丝雀发布能够降低风险。如果部署出现错误,只有少数服务器需要回滚。

容量测试可以暴露出应用程序中存在的性能问题。通常情况下,测试只是在逻辑上发现问题。但是性能问题也可能使在生产环境中运行软件变得不可能。这只是持续交付管道的另一个阶段。

然而,容量测试在测试环境中运行,而测试环境通常不像生产环境那样强大,而且通常只包含测试数据。因此,当在容量测试阶段中出现性能问题时,就应该实现像金丝雀部署那样的方法。

InfoQ:您能谈谈负载测试框架吗?因为它们也与持续交付有关。还有,您能谈谈持续交付能给目前已经很好用的负载测试框架带来哪些独特的价值吗?

这本书对 Gatling 进行了介绍。Gatling 使用 DSL 来编写测试。因此,它支持将所有步骤自动化至生产的目标。Gatling 可以通过使用分布式配置来确保生成足够大的负载。

持续交付使得负载测试不再仅仅关注于性能,而且还确保了在性能优化过程中,通过执行包括验收测试在内的完整的测试套件使得性能优化过程不会出现错误。

此外,持续交付还引入了基础架构自动化,并且它能使得为容量测试配置环境更加容易。特别是对于容量测试来说,对环境的配置可能会很复杂,因为容量测试耗时很长。在多个环境中并行地运行测试可能会有助于解决这个问题。

InfoQ:持续交付平台具有哪些缺陷呢?有哪些缺陷会导致开发人员生产力的降低呢?

根据持续交付的定义,它是跨组织的:它跨越了产品开发和软件工程团队、运维功能团队以及质量评估(QA)团队。在所有这些部门之间进行协作通常是很困难的。然而,我认为还有很多东西值得我们去做。即使在有限的协作条件下,你仍然可以改进自动化和测试,然后获得更好的软件质量。你可以分析软件是如何被投入到生产中去的,并在最需要投资的地方进行投资。除了能够提高生产力,你还能获得更好的软件质量。分析你们当前的流程并找出如何改进它们是一个很好的主意。这并不一定是一项战略投资,也可以是一些小的改进。

InfoQ:在不使用持续交付工具的情况下,软件工程师们需要构建什么来实现蓝绿部署(blue-green deployments)和回滚呢?您能不能举几个例子来说明下持续交付在启用这些功能方面的优势吗?

蓝绿部署和回滚是部署的基础架构的特性。Kubernetes 和 Paas(例如 Cloud Foundry)支持这一点。蓝绿部署和回滚也取决于被部署软件的大小。基本上它们不可能适用于非常庞大的系统。因此,使用蓝绿部署是另一个将系统分割成小单元的原因,这些小单元可以单独进行开发——这就是微服务。

关于作者

Eberhard Wolff 拥有超过 15 年的架构和咨询经验,专注在业务和技术之间的领域。他在德国 innoQ 咨询公司工作。作为一个演讲者,他在很多国际性会议上呈现演讲。作为一个作者,他发表了 100 多篇文章,并出版了微服务相关书籍。他最新的著作是一本有关微服务的书。他专注于现代架构技术,包括云计算、持续集成、DevOps、微服务或 NoSQL。他还是《 Microservices: Flexible Software Architecture 》一书的作者。

查看英文原文: Q&A With Eberhard Wolff On the Book “A Practical Guide to Continuous Delivery”

2018-01-02 17:334014

评论

发布
暂无评论
发现更多内容

某Java程序员在外包公司每天读写删改几年后,发现跳不出来了

Java架构之路

Java 程序员 面试 算法 编程语言

【硬件篇之功耗测试】

良知犹存

硬件

诺奖以上,真相未满:追捕黑洞二百年

脑极体

区块链赋能医疗产业报告

CECBC

区块链 大数据 医疗

建议将区块链产业纳入国家“十四五规划”

CECBC

区块链 新基建

手写SpringIOC

彭阿三

spring源码 sping springioc

反射API

彭阿三

反射

云服务时代,未来怎么样保障自己的核心竞争力?

boshi

个人成长 职业规划 云服务

手把手教你AspNetCore WebApi:数据验证

AI代笔

ASP.NET Core web api 数据验证

七千字的线性回归模型指南,建议收藏!

计算机与AI

数据挖掘 学习 线性回归

TensorFlow安装

菜鸟小sailor 🐕

学习

《我想进大厂》之Redis夺命连环11问

艾小仙

Java redis 面试 程序语言

创新者谈

善宝橘

创新

论软件工程师的自我修养:角色、重构与质量

华为云开发者联盟

软件 开发 工程师

MySql领域经典之作,“不敢自诩为MySql专家,岂敢错过这本神书”

Java架构之路

Java MySQL 程序员 面试 编程语言

Java并发编程-线程基础

程序员 并发编程 java 14 架构师训练

系统架构第四周总结「架构师训练营第 1 期」

天天向善

一文搞懂PV、UV、VV、IP及其关系与计算

冰河

多线程 高并发 流量 并发流量

Redis-技术专题-Jedis实战入门

码界西柚

系统架构第四周作业「架构师训练营第 1 期」

天天向善

架构师第一期作业(第四周)

Cheer

课程作业

阿里巴巴内部“Java成长笔记”,看完才发现自己和阿里大牛的差距真的太远了!

Java架构之路

Java 阿里巴巴 程序员 面试 编程语言

2020国庆我花了 7 天给大家撸了一篇云南旅游攻略

程序猿石头

美食 旅行

MySQL-技术专题-连接查询和子查询

码界西柚

开源监控系统open-falcon搭建笔记

卓丁

监控 监控管理平台 Open-Falcon 监控告警

能够让机器狗学会灭火, ModelArts3.0让AI离我们又近一步

华为云开发者联盟

人工智能 AI 机器狗

来碗小面

葱小白

美食 旅行

程序员在中国是青春饭?扯!看看阿里资深架构师是怎么说的!

Java架构师迁哥

Java 程序员 面试

实用威胁建模指南(二)

亚伦碎语

敏捷 安全 系统安全架构 系统安全 威胁建模

延迟满足

时间是一个人最好的证明

延迟满足感 成功

浅析 Java 内存模型 一

朱华

Java JMM

《A Practical Guide to Continuous Delivery》作者访谈录_Book Review_Dylan Raithel_InfoQ精选文章