你在使用哪种编程语言?快来投票,亲手选出你心目中的编程语言之王 了解详情
写点什么

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

2018 年 1 月 02 日

本文要点

  • 持续交付(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 年 1 月 02 日 17:331093

评论

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

Spring知识点总结!已整理成142页离线文档(源码笔记+思维导图)

周老师

Java 编程 程序员 架构 面试

公安情报大数据分析研判平台建设解决方案,情报信息平台建设

WX13823153201

AI 转型必看|算法工程师的 AI 启示录

百度大脑

人工智能

「区块链+游戏」背后能否诞生下一个腾讯?

CECBC区块链专委会

MySQL最全整理(面试题+笔记+导图),面试大厂不再被MySql难倒

周老师

Java 编程 程序员 架构 面试

吃透这份Java面试调优高级手册等350道面试宝典,已涨30k

程序员改bug

Java spring 程序员 架构

Windows Core Audio 音频开发技术指南

拍乐云Pano

华云大咖说 | 华云数据与福昕鲲鹏携手共建国产云生态

华云数据

不愧是 Alibaba 技术官,高并发的精髓全写这本“高并发系统设计”里,服了

神奇小汤圆

Java 架构 面试 高并发

Java性能问题定位命令

hasWhere

​Bzz分币系统开发,节点分配,BZZ矿机挖矿系统开发

WX13823153201

IDEA搭建DCM4CHEE开发环境

鸟哥

intellij-idea 医学影像 DICOM PACS DCM4CHE

干货|车来了APM应用性能体验实践

友盟全域数据

APM App 稳定性 APP稳定性

Flink+Hologres助力伊的家电商平台建设新一代实时数仓

Apache Flink

flink

架构训练营模块 6 作业 - 江哲

江哲

Bzz云算挖矿APP定制 ,Bzz矿机分币系统开发

风信子

Java设计模式(5:设计模式的分类及工厂模式详解)

互联网架构师小马

设计模式

技术干货 | Windows桌面端录屏采集实现教程

ZEGO即构

RTC 录屏采集

阿里技术官新推2800页Java面试大礼包,金九银十稳了

Crud的程序员

Java 编程 程序员 架构 面试

超全Redis命令总结,墙裂建议收藏,说不定就用上了呢

北游学Java

Java redis

性能排查常用Linux命令

hasWhere

Java版本发布历史

hasWhere

中国信通院云大所与dbaplus社群开启战略合作,共同推动多项标准落地

dbaplus社群

山东bzz分币算力系统专业技术开发公司

风信子

开发效率提升50%以上,爱奇艺官网主站的Nuxt实践

爱奇艺技术产品团队

前端 开发 nuxt

实测 Google 全同态加密FHE,效果如何?

瑚琏

机器学习 隐私计算 多方安全计算 富数科技 Avatar2.0

干货!阿里架构专家教你打通Git任督二脉,20分钟搞定Git工作原理

java专业爱好者

Java git

RDMA打造存储利器

焱融科技

文件 高性能 数据中心 分布式存储

全靠这份Java面试宝典,助我拿下阿里offer!

Java架构师

Java 阿里巴巴 程序员 面试 java面试

美团二面问源码社死当场!闭门偷学318页Spring深度源码笔记,再战

Crud的程序员

spring 程序员 架构 编程语言

cpu突然变高定位步骤

hasWhere

围绕“三个问题”开展的网易云音乐数据基础建设

围绕“三个问题”开展的网易云音乐数据基础建设

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