测试环境Docker发布加速原理

简介: 这篇文章用于介绍Docker化应用在测试环境部署时使用发布加速策略后的优势以及对发布加速原理的剖析。

这篇文章用于介绍Docker化应用在测试环境部署时使用发布加速策略后的优势以及对发布加速原理的剖析。

背景

一般应用至少会有两个环境:测试环境和生产环境,每次代码变更都会在测试环境多次充分验证后发布到生产环境,所以对研发而言,测试环境的发布会很频繁,线上发布会很谨慎。测试环境由于机器性能不如线上,但因为部署频繁,所以发布时间的长短直接影响到研发效率。随着应用Docker化,应用的依赖信息统一固定在镜像里,大大简化了运维操作,也为部署方式的改变创造了更多优化的空间。

测试环境每个应用一般会有1-2台机器,每次代码提交后触发测试环境构建镜像到部署服务启动一般需要几分钟到十多分钟不等。这意味着有可能改一行代码,多则要等十多分钟才可以在测试环境进行验证,严重影响开发效率!

概述


应用Docker化后,应用的部署实际上是进行镜像替换,而镜像替换实际上就是销毁掉老版本镜像的容器,再用新的镜像创建一台容器的过程,整个过程串行执行。

我们在对Docker化应用的发布逻辑进行优化后,采用多版本部署和预部署的策略,将部署时间缩短一倍以上,极端时间在几十秒,提速20倍以上!

使用发布加速逻辑后的部署与传统部署的区别


传统的Docker应用的部署过程是:

1、销毁旧版本容器

2、再在同一台物理机上使用新版本镜像创建新容器(dockerfile里定义volume[数据卷]的数据可以公用,数据不丢失)

3、启动应用

4、检查应用是否启动成功

5、上线流量,也就是服务对外可访问,一般会有http流量和中间件流量。

整个过程串行执行,VM是虚拟机,而Docker是容器,创建销毁动作对容器而言类似进程操作,所以几个步骤中最耗时的是应用启动

使用发布加速策略后,部署系统后台将会分两部分(部署和切流)来完成:

部署

1、在同一台物理机上使用新版本镜像创建容器

2、进行环境初始化等运维相关操作

3、启动应用

4、检查应用是否启动成功,成功后进入切流步骤

切流

将流量从旧版本镜像的容器切换到新版本镜像容器上,对应操作为修改域名的指向从旧版本镜像容器IP变为新版本镜像的容器IP,将新版本镜像容器的IP加入环境隔离,将旧版本镜像容器的IP移出环境隔离,完成流量从旧的服务指向新的服务。

成功后结束发布,后台异步将旧版本镜像容器销毁掉。(环境隔离主要是针对一些中间件,比如消息,加入隔离环境的机器可以接收和发送消息,而移出隔离环境则无法接收和发送消息)

由于后台机器的流量切换是两台机器分批执行,所以即使是流量切换的几十秒,服务也不会中断。

发布加速策略的详细介绍


1、多版本部署

 多版本部署是在部署过程中会有两个版本提供服务即以前在跑的服务和本次需要发布代码的服务,但是对外提供服务是可控的,通过并行启动新版本服务,快速进行流量切换的部署策略。

1)2台机器的应用

有的应用即使是测试环境也要求服务不能中断,所以2台机器分2批串行发布,传统发布方式里第一台执行下线服务、销毁容器、创建容器、应用启动、健康检查、上线服务,成功后第二台执行完全相同的逻辑。开启加速模式后,在部署阶段并行创建两个容器,并行启动应用,健康检查,成功后进入到切流阶段,进行流量切换,而流量切换可以在秒级完成。

整个发布过程中健康检查占总时间60%以上,所以传统的部署方式里两台串行的启动和检查在开启发布加速后变为并行,整体发布时间上提升速度一倍多!且部署过程中服务都不会中断,效果等同传统发布模式。   

传统和加速模式发布过程中应用的状态和流量对比(v1代表旧版本提供服务,v2代表新版本提供服务):

image.png

上表可以看出使用开启加速模式后,发布速度变快了,但是服务模式和以前是相同的,并且服务永远不会中断,除非旧服务本身不可用了。

2)只有1台机器的应用

有的应用在测试环境只有1台机器。传统部署的逻辑是下线服务、销毁容器、创建容器、应用启动、健康检查、上线服务。整个部署过程中服务都是不可用的。开启加速后,部署顺序调整为创建容器、应用启动、健康检查、流量切换、部署成功后后台异步销毁旧容器。相比传统发布方式,加速模式节省了后台异步销毁旧版本镜像的容器的时间,单机部署时间缩短,且整个发布过程中服务不中断。

传统和加速模式发布过程中应用状态和流量对比(v1代表旧版本提供服务,v2代表新版本提供服务):
image.png

对比可以发现使用加速模式后,省去了容器销毁和下线的时间。同时发布过程中服务也不会中断,即使由于代码改动导致新版本无法启动发布失败等场景服务也不会中止。

2、预部署

传统的研发部署流程是:1、代码提交;2、打包构建镜像;3、部署,但是有时可能提交了代码不一定会在工具上点击部署,真正的部署是研发同学在工具上提交了部署按钮后。而加速模式的部署类似于持续集成的思想,在代码提交后工具服务端会自动触发打包构建镜像,使用构建的最新镜像创建容器,启动服务,完成部署步骤,但是不会执行切流步骤,所以这时不会将流量导入,类似于进入一种应用启动了但是没有对外服务的状态。在研发同学触发部署时,会将提交需要部署的镜像与最近一次后台自动触发部署的镜像进行对比,如果一样则挂接成功,直接返回后台自动触发部署的流程,如果在研发提交部署请求时后台自动触发的部署步骤已经完成,那么这时的部署相当于只需要执行切流步骤,而切流步骤耗时只有几十秒,对研发的体验就是之前需要十多分钟的部署几十秒就完成了!

部署系统会对发布过程中容器的生命周期以及应用的状态进行管理,部署失败的容器会保留,置为一种预销毁的状态,但不会销毁留给开发登录排查,进行代码修改修复后再次提交部署请求时会做check,对无用的容器进行销毁。如果研发同学多次提交代码,后台多次触发自动化部署,则会保留最新一次的部署容器,历史的流程自动结束。

结语


测试环境这种由于应用间依赖、一个应用部署导致另一个应用功能不能正常验证、代码或配置问题长时间定位不到导致服务不可用等多种场景影响开发效率,使用部署加速后,发布系统将帮助构建一个快速、稳定的测试环境,提高研发效率,提升开发幸福感。

目录
相关文章
|
3月前
|
Ubuntu Cloud Native 测试技术
百度搜索:蓝易云【云原生之使用Docker部署ubuntu测试环境】
请注意,以上步骤仅是简单的使用Docker部署Ubuntu测试环境的示例。在实际应用中,您可能需要根据测试需求和应用场景进行更多的配置和优化。同时,在退出容器时,容器并未删除,您可以使用 `docker rm <容器名称>`命令来删除容器。在进行测试时,请谨慎操作,并确保对Docker的使用有一定的了解,以避免不必要的问题。
40 2
|
3月前
|
分布式计算 Java Linux
【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(Dockerfile使用手册)
Docker 是一套构建在 Linux 内核之上的高级工具,旨在帮助开发人员和运维人员更轻松地交付应用程序和依赖关系,实现跨系统和跨主机的部署。使用安全且轻量级的容器环境来实现这一目标。容器可以手动创建,也可以通过编写 Dockerfile 自动创建。开发人员和运维人员可以将应用程序及其依赖打包到容器中,实现应用程序的可移植性和环境一致性。
106 5
【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(Dockerfile使用手册)
|
4月前
|
测试技术 Docker 容器
使用Docker构建多环境应用:开发、测试、生产环境
Docker已经成为了现代应用程序开发和部署的核心工具之一。通过使用Docker,开发团队可以轻松地在不同的环境中构建、测试和部署应用程序,从而提高开发速度和应用程序的可移植性。本文将介绍如何使用Docker构建多环境应用,包括开发、测试和生产环境,并提供丰富的示例代码,以帮助大家轻松应对不同环境的挑战。
|
13天前
|
jenkins 测试技术 持续交付
软件测试|docker搭建Jenkins+Python+allure自动化测试环境
通过以上步骤,你可以在Docker中搭建起Jenkins自动化测试环境,实现Python测试的自动化执行和Allure报告生成。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
34 6
|
20天前
|
关系型数据库 MySQL Nacos
【深入浅出Nacos原理及调优】「实战开发专题」采用Docker容器进行部署和搭建Nacos服务以及“坑点”
【深入浅出Nacos原理及调优】「实战开发专题」采用Docker容器进行部署和搭建Nacos服务以及“坑点”
45 1
|
1月前
|
SQL Apache 流计算
Apache Flink官方网站提供了关于如何使用Docker进行Flink CDC测试的文档
【2月更文挑战第25天】Apache Flink官方网站提供了关于如何使用Docker进行Flink CDC测试的文档
139 3
|
2月前
|
Java Linux 虚拟化
浅谈Docker底层原理
浅谈Docker底层原理
28 0
|
2月前
|
存储 网络协议 Unix
docker的底层原理
docker的底层原理
|
3月前
|
存储 运维 Linux
精彩推荐 | 【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(实战技术总结)
在使用Docker时,管理维护工作可能会显得复杂。然而,实际上,Docker提供了许多便捷且人性化的工具,这些工具的使用技巧可以大大简化维护工作,并提升效率。通过掌握这些技巧,你不仅能够更轻松地管理Docker环境,还能展现出专业的能力。接下来我们就给大家介绍一下对于我在工作当中对于Docker容器使用的技术实战总结
48 2
精彩推荐 | 【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(实战技术总结)
|
3月前
|
存储 运维 Linux
探索容器化技术:Docker的原理与应用
在当今快节奏的软件开发环境中,容器化技术成为了一种重要的工具,其中最为流行和广泛使用的是Docker。本文将深入探讨Docker的原理和使用,包括容器化概念、镜像管理、容器编排等内容,帮助读者更好地理解和应用这项技术。
39 0

热门文章

最新文章