火箭还是飞机?——DevOps的两种模式
一、背景
在当下的软件应用开发领域中,越来越多的敏捷化企业希望自己的软件开发过程能以超音速、甚至于星际穿梭的速度,来快速响应各种变化,但同时还要保证安全性。DevOps流水线无疑为这一目标提供了最佳实践。
但是,要完全满足这样的需求,我们应该如何去建立合适的DevOps流水线呢?有没有一种很好的方式,能够帮助我们去理解DevOps流水线当中CI/CD过程,以及容器技术,如Docker和Kubernetes,在其中的角色和影响呢?
其实,DevOps流水线的建设可以类比为两种模式:火箭式或飞机式。从众多客户的应用实践来看,要想运行一个完善的、可靠的DevOps流水线,火箭式的建设是远远不够的,实际遇到的困难要大得多。
二、火箭发射模式
我们通常把DevOps流水线理解为一个简单的、从左到右的线性过程:编写代码、提交、构建、测试、部署,以及作为产品发布。创建出来的软件在流水线当中就像被装船运送一样,有着清晰定义的去向。
在这种模式下,创建一个应用程序就像发射登陆火星的火箭一样。在允许登陆任务继续进行之前,必须要计划、审批、测试,以及验证所有的工作。为了准备发射,所有团队必须紧密地协同工作。我们只有一次机会去发射这个火箭,而且火箭一旦发射,就再没有机会进行修改和更新。从发射台到最终到达火星,火箭的功能是固定的、不可修改的。
火箭发射是一次性的。每一次测试都需要创建一个新的火箭,而这会带来一些未知的风险。新的火箭需要在确认所有系统都准备好了之后才能发射,以完成承担的任务。
这是一个清晰的、经典的工程模型。但是,这不是DevOps应有的工作方式。
三、航班运行模式
上述火箭模式中比较好的DevOps实践是在创建和运行服务时,开发和运维团队在研发生命周期的各个阶段都紧密地合作。
然而,DevOps并不是像高风险火箭发射那样简单的从左到右的线性过程。相反,它是一个频繁触发且不会终止的循环过程,而且每一次触发都会引入一些新的的风险。所以,DevOps更像是现代的航空系统。在任何时间,全球的航空公司都频繁地,事实上是连续地,发送着航班,运载着上百万对其充满信任的旅客。
航空公司管理其飞机和航线的流程,和DevOps流水线保证应用发布时效性和可靠性的方法是十分相像的。和软件企业一样,航空公司一样要紧跟技术的发展、快速响应安全问题,以及适应客户需求的变化,同时还要保证整个系统不中断地运行。在日常运营中,航空公司持续对每架飞机进行检查(测试)、维护(打补丁),以及安排运营时间。这个过程和DevOps中应用的持续集成、更新和交付过程非常类似的。
和火箭发射的一次性不同,飞机能够反复地执行起飞和下降,最终执行航线任务的和最初通过测试飞行的都是同一架飞机,这充分表明了两种模式的差异性。那么,怎样才能保证DevOps流水线运转得更像是一个航空公司,而不是一名火箭兵呢?
四、起飞前的清理工作
火箭和飞机都是由许多资源组成的产品,不同的生产部门分别负责结构、机械和控制系统等各个部分,而且是由不同的供应商提供大部分的组件,从最基本的如门锁、座椅、地毯等,直到复杂的如导航系统等。
类似的,每一个软件应用也是由组织内的多个团队共同创建的,而且应用运行的大部分代码,例如操作系统和语言框架等,都是以企业外部的远程仓库为来源的。
开发人员可以控制将自己开发代码的哪些部分加入构建。但是,对于从公共仓库下载的外部依赖包,如npm或maven等,又该如何控制呢?那些包可能会不定期的进行修改,而这是你无法控制的。
如果你的DevOps流水线像发射火箭一样,那么针对测试或发布的每次新构建,都会成为偷渡者潜入火箭的机会。如果无法做到持续监控,那些计划之外的东西就可能进入新的构建,从而导致每次构建都不能获得完全相同的结果。
五、前往跑道
Docker镜像就像是飞行器,不管是火箭还是飞机,通过构建而成,并封装了应用要执行的所有功能。从发射到着陆,Docker镜像的能力保持不变。
Docker引擎,结合镜像仓库,把镜像转换为容器,就像把这些飞行器推送到发射平台。而像Kubernetes这样的编排工具就进一步把这些容器发射到航线上去。
Docker引擎,结合镜像仓库,把镜像转换为容器,就像把这些飞行器推送到发射平台。而像Kubernetes这样的编排工具就进一步把这些容器发射到航线上去。
如果像处理火箭一样,每次发射一个新的,那在开发、测试,或发布阶段构建的每个Docker镜像,都有可能和前一个有一些不同。
而如果像飞机一样处理,就意味着对发射到空中的内容有更大的确定性。航空公司不会为每次起飞都制造一架新的飞机。他们只是测试飞机,然后在航线上可靠地运行飞机,直到飞机需要更换为止。
构建一个Docker镜像,然后在测试到发布的流水线上进行升级,而不是重新构建,能够确保这个镜像带上航线的都能每次、准时、安全地飞翔。
六、地面控制
正如上述分析的,真正的DevOps流水线不是简单的从左到右的线性过程,而是设计、分解和重构的复杂、迭代、网络化的过程。
为了使DevOps流水线运转得更像是航空公司,Artifactory可以作为地勤人员,来保证一切都按计划、平稳地运行。Artifactory使得开发人员能够控制从代码构建而来的Docker镜像,并通过总是在航线中运行同一架飞机来保证可靠性和速度。
首先,Artifactory解决了一个开发人员面对的关键挑战,那就是利用如npm或maven这样的外部依赖,也能进行持久、确定的构建。利用Artifactory,开发人员能够维护外部仓库的本地缓存,从而保证外部代码的变化在没有确认可用之前不会被引入到构建当中。而且,保证外部依赖的本地访问,也能帮助加速构建,提升生产力。
利用Artifactory作为Docker镜像中心,可以使得DevOps流水线中从测试到发布的各个阶段之间升级实不可变的构建产出变得更加容易,而不需要每次都重新构建。同样可以根据需要,利用Artifactory为每次构建存储的详尽信息,来创建新的确定性的构建。
飞机飞行需要燃料,而航空公司,就像所有现代化企业一样,基于数据进行运维。航空公司对他们的飞机、客户和工作人员了解得越多,就越能帮助他们最大限度地提高投资回报率。
Artifactory作为Kubernetes的Docker镜像中心,可以提供简化、安全实施运维工作所需的数据。除了容器、镜像的列表之外,Artifactory还可以可视化地展示容器里都有什么,以及这些内容是如何进入容器的。
如果再增加利用JFrog Xray对镜像进行扫描,就可以获得更多有关镜像当中代码真实安全性的信息,进一步保护企业和应用。
七、翱翔天空
不仅仅像本文说的,真正的DevOps流水线就像是现代化的航空公司,DevOps已成为大多数航空公司自身运营的关键实践。联合航空公司、西南航空公司、阿拉斯加航空公司和捷蓝航空公司就是众多航空公司的代表,它们已经为DevOps和CI/CD做了大量的投资,在网络和移动平台上为其客户提供购票、值机、登机等各种服务。这些航空公司很多都引入了Artifactory,获得了在全球范围发展DevOps的巨大收益。
正如这些高风险企业所展示的,仅仅将Docker容器推上跑道,对于真正的DevOps是不够的,需要利用Artifactory为CI/CD提供的支持,来确保它们在天空中安全地飞翔。
更多技术分享请关注 JFrog杰蛙在线课堂
1月2日在线课堂:《版本控制管理与最佳实践》
课堂收益:
- 如何使用版本控制系统
- 各种分支模型有什么优缺点,什么样的分支模型更适用于您的环境
- 版本控制应该遵循的一些标准
报名链接:https://www.bagevent.com/event/6309332
抽奖活动:
课堂结束前五分钟,进行抽奖活动
第一名:小爱音箱
第二名:JFrog杰蛙新版T恤
第三名:JFrog杰蛙新版T恤
火箭还是飞机?——DevOps的两种模式相关推荐
- 火箭还是飞机?——DevOps 的两种模式
文章来自 | JFrog杰蛙DevOps微信公众号. 作者 | 高欣,JFrog架构师.2019年6月21-23日,GIAC大会DevOps工具链专场讲师,他将为大家分享<Kubernetes上 ...
- 火箭还是飞机?-- DevOps 的两种模式
背景 在当下的软件应用开发领域中,越来越多的敏捷化企业希望自己的软件开发过程能以超音速.甚至于星际穿梭的速度,来快速响应各种变化,但同时还要保证安全性.DevOps 流水线无疑为这一目标提供了最佳实践 ...
- 2021年大数据Spark(九):Spark On Yarn两种模式总结
目录 Spark On Yarn两种模式 引入 一.当一个MR应用提交运行到Hadoop YARN上时 二.当一个Spark应用提交运行在集群上时 注意 client 模式 cluster 模式 总结 ...
- 简述python中怎样导入模块_Python中导入模块的两种模式,import
import import pandas import pandas as pd 使用函数方式:.(),或者.() 比如 pandas.read_csv("data/stock.csv&qu ...
- FTP的两种模式和在实际工作中应用
FTP是一种文件传输协议,它支持两种模式,一种方式叫做Standard (也就是 Active,主动方式),一种是 Passive (也就是PASV,被动方式). Standard模式 FTP的客户端 ...
- 备忘: VC++ 自动适用编译两种模式库文件 (DLL, LIB)
为什么80%的码农都做不了架构师?>>> 一个好的程序设计规划总会有属于自己的基础代码库.重用这些代码库,DLL或LIB方式最好的选择之一.在写新的项目或程序是,我们不可能每次 ...
- Doctype? 严格模式与混杂模式-如何触发这两种模式,区分它们有何意义?
严格模式与混杂模式--如何触发这两种模式,区分它们有何意义. 在标准模式中,浏览器根据规范呈现页面: 在混杂模式中,页面以一种比较宽松的向后兼容的方式显示. 浏览器根据DOCTYPE是否存在以及使用的 ...
- ebc是什么意思_UEFI+GPT和Legacy+MBR两种模式安装的系统有什么区别
UEFI+GPT和Legacy+MBR两种模式安装的系统有什么区别?很多电脑小白都搞不懂UEFI.GPT.BIOS.MBR到底是什么意思,下面跟随小白系统一起深入了解下UEFI+GPT和Legacy+ ...
- 树莓派GPIO的两种模式区别
2019独角兽企业重金招聘Python工程师标准>>> 树莓派GPIO有两种模式:板上(BOARD)模式和BCM模式 一.板上模式 可以看作是电脑板上的引脚编号与处理器引脚编号一样. ...
最新文章
- Docker入门简介
- 99%的数据工作者不曾知道的一款利器
- 每日两SQL(10),欢迎交流~
- netty channel的线程安全性与@Sharable
- ORM框架使用优缺点
- eth入门之web2 与 web3 的对比
- 女人要想赚钱,应该选什么路?
- Luat模块应用手册-示例-Luat DEMO-长连接超低功耗方案
- AI顶级期刊 IEEE T-PAMI 2020最新论文解读 | Deep Partial Multi-View Learning
- Ubuntu fcitx输入法占用内存越来越大(超过1G)
- 传说中的“睡眠算法”的输出分析
- windows网络服务之配置网络负载均衡(NLB)群集
- 欧姆龙NJ/NXPLC 全ST程序案例
- uniapp引入阿里云短信业务
- Ramdisk -内存盘的使用
- ajax访问如何重定向,ajax请求重定向
- android studio 打包慢,[Android Studio系列(三)]Android Studio 编译、同步慢的解决方法
- 进程和线程最通俗的形象比喻
- FMC子卡设计原理图:141-四路 250Msps 16bits AD FMC子卡 模拟信号、无线电、光电的采集场景
- mac写作软件哪个好?推荐几款实用的mac写作软件
热门文章
- 【Python】银行家算法(四舍六入五成双)和使用decimal进行四舍五入处理
- Unity3d 技巧(4)-如何配置JavaHome
- 百度真的出了瑞丽算法吗
- vim 代码段整体左右移动
- mysql report-port_mysql性能优化工具mysqlreport
- 【Leetcode】1612. Check If Two Expression Trees are Equivalent
- ps批量磨皮滤镜插件ArcSoft Portrait3+ 中文版瘦脸自动识别人脸win/mac支持2018
- 1、英里与千米的转换
- C++屌屌的观察者模式-同步回调和异步回调
- 你真的知道什么是项目吗?项目的基本概念