云原生时代的软件持续交付实践(一)|学习笔记

简介: 快速学习云原生时代的软件持续交付实践(一)

开发者学堂课程【ALPD 云架构师系列-云原生 DevOps36计云原生时代的软件持续交付实践(一)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/82/detail/1265


云原生时代的软件持续交付实践(一)

 

内容介绍:

一、持续交付的特点

二、如何做到持续交付

三、基于云和云原生技术的持续交付实践

四、持续交付流水线

五、可信发布

六、持续交付的红利

七、小结

一、持续交付的特点

云原生大时代软件交付实践应该的运用。

持续交付,从任何角度讲其实是为了那个业务快速响应而产生的,持续交付是一个业务快速响应的基础从字面意义上来讲就是持续的交付。
首先它是一个持续的不是一个一个的波峰,是均匀的然后每一次都是分散的过去,而不是说我可能突然波峰形势集中批量发过去同时续交付还意味着它是快速的,整个的交付过程是很快的,交付频率很高的交付,是发上去然后再撤回来交付要能够保证质量。所以说持续交付首先它要一定要做到高质量

除了高质量以外,整个过程需要质量保证交付必须是低风险的,尤其是在现在的联网环境下,风险无处不在的后面会有当年就专门聊安全话题你会发现其实整个研发的全链路中间都存在各种各样的安全风险,而且都报出来过交付过程中如何解决低风险的问题,要做到安全合规可信合规大家可以肯定很有体感,尤其是最近因为中美各种各样的事情,合规问题越来越重要的安全可信同样是非常关键的一个内容。


二、如何做到持续交付

图片289.png

整个持续交付的要求包括:持快速高质量低风险这样四块。

1. 持续
1发布力度一定要是很小如果力度很大,基本上很难做到持续如果一个大批量一发过来,可能整个涉及的时间就几天,这是不行的。
2频率要非常高这样的话使用高频的小力度发布,才能够把一条线拉匀了。

2.快速

1首先工序是很淡短的。每一个阶段,比如说测试发布开发整个阶段都是很短的这样的话才能够做到快速的一个反馈响应。
2工序和工序之间工序和其他流程之间的等待少比如不会去等一个联调要等一个协同发布只有这种等待的情况变得尽可能的少,才能够到快速。
3反馈要快比如提交代码之后,两分钟之内会告诉我,这次提交又遇到了一个什么样的问题,必须尽快修复它,然后在一分钟之内修复完了之后,马上提示成功了非常快速的反馈。

2. 高质量
1质量可见性。质量是能够看得见的,要知道现在这个软件质量是什么样子很多时候衡量我们做的好不好,首先要满足能够看到它所以可见性是非常重要的。
2软件的可靠性高比如刚说提及的99.99%,如果乘以十次已经变得很低了,它的功能非常高了为了做到很高的可靠性,阿里每年双11都是为这个做了很多努力

(3)缺陷要少整个软件是按照预期的设计去运行,而不是有很多潜在的缺陷存在
4故障软件故障每次可能带来的不仅仅客户的一个损失,也是软件团队的损失这会导致很多的客户的机会很多的业务资产就损失掉了。

4.低风险

1最重要的是要可观测。要知道这软件当前是什么样子的。
2软件发布可控的后面专门聊发布的时候详细谈这个发布可控这个问题。
3可回溯。如果真的出现了发布问题,或者说软件的某个故障,是能够回溯这整个问题的来源的,比如从哪开始从哪个地方引入的,这些都需要能够回复起来。
4滚。如果真的解决不了,或者没法快速解决把它回滚掉,以避免说造成更大的一个风险。
持续快速高质量低风险,这是我们认为做持续交付需要做到的个方面只有满足这个方面,才能做到持续交付。基本上这四方面是缺一不可的,有很多时候力度小频率高是基于快速的做持续的前提,而且相对来说只有质量高的风险才会低一些
如何做到持续交付?

有一位上海的小伙伴说:现在很多时候都是云原生架构,降低了中小企业的成本和复杂度大部分基础工作都是项目平台接管了,可以谈谈从事工程效能的未来的方向吗?
我觉得这里其实做效能工作的或者说做这些事情,很多时候我们会发现其实要去做到这些地方,有特别多的机会去做有很多非常现实的问题刚刚那同学也说,现在云原生平台把很多事情都做完了,可能原来需要做很多底层,但现在事情不用做了但是现在的微服务,整个的体系数量完全跟原来不一样,所以在上层的服务治理的需求还在,而且发布的质量发布的风险这些问题都是非常现实要去解决的。就从这个角度来说,我们不会去因为站在课程的体系,觉得要去做到交付实现只要从三方面去做就可以了太多其他的内容也没有必要的。

 

三、基于云和云原生技术的持续交付实践

 图片288.png

基础。我们希望基础设施可以做到不可变有了这些东西,刚才提到的要发布的一个链路要端到端完整,需要建立一个持续交的流水线持续交付流水线一定程度上是把个软件交付的过程部串进去是完整的串联起来的此外,不能说把他分成两段,而且中间是连不上的,这个不叫流水。

安全核心的发布像质量合规安全包括业务规则上事情都包含在这里相应的一些测试,包括无论是分层还是其他的测试方式,因为它是在整个软件交付的过程里,所以我们认为在整个软件交付的过程里是不断让进行自评自评就是产生出来你最后要交付的东西。自评的质量在软件交付的过程中越来越高按张刚老师以前说的它是价值增值的活动把整个价值增值的活动所有的串起来越到后面价值越高

所以说在整个过程里我们把它分成三块顾客面基础设施协调或者缺陷安全科技化

在这个基础上可以去做很多的事情比如说像架构的管控服务的治理,包括变更流程这种一次性的过程。类似安全管控面向综合的这些应用类型方式,在这里都可以去做阿里也对云原生出了相应的一些实践,包括在做相应的技术探索一些产品的工具等。未来我们可以在这方面做一些更详细的交流

每一块里头具体是什么,为什么要去做到这个边界,要做到一个什么样标志,我们平常会聊一下这块
一本书叫做集装箱改变世界这本书说了在五六十年前的故事。我经常看到他们货运站很忙的样子:一列货车到了之后,有人去把货车上东西都卸下来,同时两边调整一下把这些又运到当时货运车的货场上所以会发现其中什么样东西都有,比如说有黄沙是散的水泥承包的还有水果那种装箱的个东西都不一样干这个活的人非常辛苦,他们都是整个身体都是那种非常强壮,但是会很当时码头工也是这个样子,因为一个船过来船的那个构造,老式的整个的船舱里面,运货是很痛苦的。

后来就有人发明了集装箱这东西集装箱其实看起来很简单,就是一个箱子,一个固定尺寸的一个铁箱子但是集装箱箱子就是做了一个标准化的事情首先有集装箱之后,同时产生了吊车运输储藏船上的研发

整个船怎么装,船尺寸都是根据集装箱来去设计的,所以我可以让这个集装箱在船上吊装非常方便同时码头的工人不需要去手工的把里面各种各样的货运出来因为像沙子和水果是完全不同的东西,运输方式是非常非常难的,所以有了集装箱之后不用管了只需要把集装箱吊上来再拉走就可以了

所以它形成了一个完整的产业链,就是基于集装箱的一个标准产业链,这样的话带来什么后果整个货运成本的降低95%就是集装箱以及它所带来的这些那个一套的产业链的升级所带来的后果就是整个货运成本降低95%,因为在几十年前跨国的那个生产是不划算的,因为成本太高了但是现在非常便宜,那就可以做这个事情整个经济全球化就有这个基础,因为可以把这个订单送到到全世界各个地方

再来看这个问题,就是说我们软件以前的情况什么样的。以前的开发语言构建方式是各种各样的,比如说一个 iPhone 程序,打的是一个大包另外一个是要编译成一个安全式文件的可能还有诸如 PHP 各种各样的程序,它的打包方式都不一样它的运营方式也不一样,整个管理方式都不一样

所以就像我们原来在老的方式下去运货一样的,卸货的时候得知道卸的什么货如果卸错了,比如说卸水果的时候卸沙子一样往下扔,可能会扔坏了所以这是一个非常现实的问题那么当有容器这个问题起来之后,在容器之前,还有很多运维工具部署工具做了很多尝试,但是都不太成功因为容器做了就像我们那个集装箱做的一样事情,它做了标准化。

然后有了容器之后,基于容器又把分发做了,然后整个的部署运维的体系做了以及运行的环境

1. 各种各样云原生的数据库消息,中介语言性的一些标准就出来了,就像那个集装箱带来的改变一样,整个的研发体系的基础部分就标准化了。用相同的方式去对待,不管是用 Python 写的程序,还是勾写的程序,还是用 loss 写的程序,完全是一样的,降低了我们大量的成本。

首先因为它不可变带来的影响就是消除了不一致带来的不确定性相信很多人以前可能经历过这样的或者现在也经历过这样的

2. 减少不一致的风险,这个风险很难预估。之前遇到过一个 bug 就是像 Java 程序,里面大部分数据是是对的,但是在某些情况下出现异常,异常原因是因为它 Java 程序里面包了一个 so这个 so 依赖一个 library 的版本,环境里版本是有一点差别,这个小版本的差异导致行为是有异常的这种情况下会发现风险非常难排查,而且风险带来后果很严重。
3.维护成本降低了就刚刚那个同学说的就是说我现在实现云原生了,运维的成本比原来低的很多很多事情不需要运维再去做了确实是这样,因为无论什么有底层的东西,包括标准化。标准化使用使整个部署简化了,都是用同样一套东西,就像集装箱一样,吊起来反正都那么大,都往上丢直接就就运走了。

境维护成本的降低了,因为是集装箱,而且标准化的,所以不需要有太多的薪酬负担,只要遵照这个标准,放到既定的位置上就行了因为只有一种形态了,整个工具链的开发学习成本就相应的降低了所以不可基础设施,带给我们的非常大的技术红利。
目前,生态越来越完整,整个成本研发的成本也在降低。但是这个地方对大家也是一个挑战原来的习惯,来的思维方式或者工作方式也发生变化

因为可能用原来的方式再去套在线上面就会产生一些问题,比如说容器可能就是默认虚拟的,尽量用那很多东西就不是一个集装箱了,还是集装箱里塞了一些沙子。另外比如说还是把自己当做码头工人的话,那意味着也要做一些变革,你的脑子要去改一下,比如我能不能成为是货车司机或者吊车司机


四、持续交付流水线

图片287.png

这是一个非常典型的流水线如果简化来看,大概就是从代码提交到合并然后上去之后会做构建生成一个制品;之后会做接口测试,会做功能验证果这些都通过了,会进入到一个生产环境去做部署和验证验收。完成以上步骤可以上线了部署到市场环境里。流水线它是一整个串起来的一个一个过程,就是中间不会说产生头的概念是一层一层往后走的,而且是不会跳过的有了这个流水线之后,可以看出理想的情况是什么样的如果这个代码质量很好,自动化率很高,整个事情都是完全可以自动搞定的,它就会自动在两分钟之后或者说一小时之后告诉我成功了

这个是一个非常美妙的体验,因为我的工作不会打扰我,然后会直接告诉我布完成了。但是流水线不是说云校一样,建一个流水线,它就可以达到这个目的的

1. 流水线需要能够可表述:
1研发模式的具象化表达。流水线是一个可描述的东西,它本身是一个研发模式的具象化的表达研发模式的展现,我们是通过流水线或者其他一些手段把它描述出来的

(2)发布流程一致性。流水线保证了发布流程的一致性。当拥有流水线之后,每次发布是一样的,流程是一样的,没有任何的区别。
3最佳实践可快速复制。很多时候我们会发现在一个公司里面不同队的研发实践差别非常的大,很多东西是口口相传或者说文档里的文档里的时候,在一家几十人的公司,哪怕是挨着的两个团队,在发布这个事情上面它的差别都非常大,因为他们都是靠文档去做的文档里面的东西是靠人去掌握的学习成本和掌握程度是不一样的
刚好有人提到 ducument的这件事情,其实对于流水线你可以认为它就是拉一个ducument的问题,这个流程用文章描写出来,还不如直接落在工具里头,让他活在不是落在纸上需要人去维护的东西,而是它就天然在运行,天天在启动的一个东西
2.流水线需要能够可观测:

(1)开发、发布过程可见。整个开发发布过程是可以看到的,不仅仅是当前的开发过程可以看到历史的发布过程开发过程也是可以看到的每一次的发布经过了怎么样阶段每个阶段是什么结果,我都应该是可以看到的。有了这个之后,我可以知道我整个的流程是什么样子整个流程的质量是什么样子,中间哪个节点是有可能出现问题的
2发布过程有保障。发布过程保障意味着整个流水线里,我们看到有很多的验证节点很多的接口测试很多的发的验收所有这些节点它带来的成本都不小,但是它的目的是为了保证最后发布上线是成功的是稳定的,所以在这个可观测前提下,整个发布过程就有了一个保障。

3.流水线需要能够自动化

1发布过程自动化。自动化就是不应该或者尽量减人工在这的干预程度比如说一直在提的流水线应该是完整的串起来的,而不应该是分成好几段的。

当你分成好几段的时候,每一段之间衔接是靠人的,一旦靠人的时候,中间的等待市场以及协同的成本就会比较高,会带来各种各样的一个风险所以我们应该做到整个发布过程是完全的自动化完全自动化意味着从代码提交或者某个事件开始,到最后上线是完全有流水线牵动的中间有可能有些布置需要人去做验收或者做测试,但是这只是一个工序,工序完之后点个确定,保证说成功了,就可以自动的往下发所以整个过程是自动化的

2流程通过工具落地。而不是通过写在文档里,或者说每一个部分都是通知要干什么了,去干一下接下来回来再去做什么,这是不行的整个东西应该是通过工具串起来的,这个工具可能包括很多

相关文章
|
9天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
37 2
|
12天前
|
监控 Kubernetes Cloud Native
云原生之旅:从理论到实践的探索
【10月更文挑战第34天】本文将引导你走进云原生的世界,从基础概念出发,逐步深入到实际的应用部署。我们将探讨云原生技术如何改变现代软件开发和运维的方式,并展示通过一个简单应用的部署过程来具体理解服务编排、容器化以及自动化管理的实践意义。无论你是云原生技术的初学者还是希望深化理解的开发者,这篇文章都将为你提供有价值的视角和知识。
27 3
|
18天前
|
弹性计算 Kubernetes Cloud Native
云原生架构下的微服务设计原则与实践####
本文深入探讨了在云原生环境中,微服务架构的设计原则、关键技术及实践案例。通过剖析传统单体架构面临的挑战,引出微服务作为解决方案的优势,并详细阐述了微服务设计的几大核心原则:单一职责、独立部署、弹性伸缩和服务自治。文章还介绍了容器化技术、Kubernetes等云原生工具如何助力微服务的高效实施,并通过一个实际项目案例,展示了从服务拆分到持续集成/持续部署(CI/CD)流程的完整实现路径,为读者提供了宝贵的实践经验和启发。 ####
|
7天前
|
运维 Kubernetes Cloud Native
云原生技术入门及实践
【10月更文挑战第39天】在数字化浪潮的推动下,云原生技术应运而生,它不仅仅是一种技术趋势,更是企业数字化转型的关键。本文将带你走进云原生的世界,从基础概念到实际操作,一步步揭示云原生的魅力和价值。通过实例分析,我们将深入探讨如何利用云原生技术提升业务灵活性、降低成本并加速创新。无论你是云原生技术的初学者还是希望深化理解的开发者,这篇文章都将为你提供宝贵的知识和启示。
|
7天前
|
Cloud Native 安全 API
云原生架构下的微服务治理策略与实践####
—透过云原生的棱镜,探索微服务架构下的挑战与应对之道 本文旨在探讨云原生环境下,微服务架构所面临的关键挑战及有效的治理策略。随着云计算技术的深入发展,越来越多的企业选择采用云原生架构来构建和部署其应用程序,以期获得更高的灵活性、可扩展性和效率。然而,微服务架构的复杂性也带来了服务发现、负载均衡、故障恢复等一系列治理难题。本文将深入分析这些问题,并提出一套基于云原生技术栈的微服务治理框架,包括服务网格的应用、API网关的集成、以及动态配置管理等关键方面,旨在为企业实现高效、稳定的微服务架构提供参考路径。 ####
29 5
|
9天前
|
运维 Cloud Native 安全
云原生技术在现代软件开发中的实践与挑战####
【10月更文挑战第21天】 本文将深入探讨云原生技术在现代软件开发中的应用,分析其带来的优势及面临的挑战。通过案例分析和数据支持,揭示云原生化转型的关键因素,并展望未来发展趋势。 ####
28 7
|
8天前
|
负载均衡 监控 Cloud Native
云原生架构下的微服务治理策略与实践####
在数字化转型浪潮中,企业纷纷拥抱云计算,而云原生架构作为其核心技术支撑,正引领着一场深刻的技术变革。本文聚焦于云原生环境下微服务架构的治理策略与实践,探讨如何通过精细化的服务管理、动态的流量调度、高效的故障恢复机制以及持续的监控优化,构建弹性、可靠且易于维护的分布式系统。我们将深入剖析微服务治理的核心要素,结合具体案例,揭示其在提升系统稳定性、扩展性和敏捷性方面的关键作用,为读者提供一套切实可行的云原生微服务治理指南。 ####
|
8天前
|
消息中间件 缓存 Cloud Native
云原生架构下的性能优化实践与挑战####
随着企业数字化转型的加速,云原生架构以其高度解耦、弹性伸缩和快速迭代的特性,成为现代软件开发的首选模式。本文深入探讨了云原生环境下性能优化的关键策略与面临的主要挑战,通过案例分析,揭示了如何有效利用容器化、微服务、动态调度等技术手段提升应用性能,同时指出了在复杂云环境中确保系统稳定性和高效性的难题,为开发者和架构师提供了实战指南。 ####
21 3
|
8天前
|
运维 Kubernetes Cloud Native
深入理解云原生架构:从理论到实践
【10月更文挑战第38天】本文将引导读者深入探索云原生技术的核心概念,以及如何将这些概念应用于实际的软件开发和运维中。我们将从云原生的基本定义出发,逐步展开其背后的设计哲学、关键技术组件,并以一个具体的代码示例来演示云原生应用的构建过程。无论你是云原生技术的初学者,还是希望深化理解的开发者,这篇文章都将为你提供有价值的见解和实操指南。
|
9天前
|
Cloud Native 持续交付 云计算
云原生技术入门与实践
【10月更文挑战第37天】本文旨在为初学者提供云原生技术的基础知识和实践指南。我们将从云原生的概念出发,探讨其在现代软件开发中的重要性,并介绍相关的核心技术。通过实际的代码示例,我们展示了如何在云平台上部署和管理应用,以及如何利用云原生架构提高系统的可伸缩性、弹性和可靠性。无论你是云原生领域的新手,还是希望深化理解的开发者,这篇文章都将为你打开一扇通往云原生世界的大门。