测试环境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,对无用的容器进行销毁。如果研发同学多次提交代码,后台多次触发自动化部署,则会保留最新一次的部署容器,历史的流程自动结束。

结语


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

目录
相关文章
|
2月前
|
存储 缓存 Linux
docker的底层原理六: 联合文件系统(UnionFS)
本文介绍了Docker使用的联合文件系统(UnionFS),它通过分层存储和写时复制(CoW)机制,实现了容器的轻量级、高性能存储,支持了镜像继承、数据持久化和隔离性。
63 0
|
3月前
|
芯片
LDO的原理及测试方法
一、基本结构 这是LM317芯片的核心,这个电路单元称为Bandgap Reference带隙基准源。属于模拟集成电路中的经典电路结构。 LDO拓扑结构图 常见的基本结构 利用VBE的负温度系数,而VT是正温度系数,正负温度系数抵消就的得到稳定的基准参考电压了(三极管的方程VBE=VT*In(lC/IS))。 二、测试意义 了解集成电路的内部结构对测试有意义么? 1、了解内部结构,才能更好的理解测试原理或者设计测试方案2、可以学习提升对电路结构的理解能力。 针对LM317,了解了内部简单原理,可以知道1、内部结构设计针对的是温度系数,因此可能受温度的影响,实际也是会受到温度的影
183 88
|
2月前
|
安全 Linux 调度
docker的底层原理三: 内核共享
本文阐述了Docker容器通过共享宿主机的内核来实现轻量级运行,同时利用命名空间、控制组、文件系统和网络隔离等技术确保容器的安全性和资源控制。
70 6
|
2月前
|
存储 NoSQL 大数据
大数据-51 Redis 高可用方案CAP-AP 主从复制 一主一从 全量和增量同步 哨兵模式 docker-compose测试
大数据-51 Redis 高可用方案CAP-AP 主从复制 一主一从 全量和增量同步 哨兵模式 docker-compose测试
35 3
|
2月前
|
存储 监控 Shell
docker的底层原理二:容器运行时环境
本文深入探讨了Docker容器运行时环境的关键技术,包括命名空间、控制组、联合文件系统、容器运行时以及分离的进程树,这些技术共同确保了容器的隔离性、资源控制和可移植性。
40 5
|
2月前
|
存储 API 数据中心
docker的底层原理
本文概述了Docker的底层原理,包括客户端-服务器架构、容器运行时环境、内核共享、资源隔离、控制组、联合文件系统、可移植性、镜像构建以及插件和API等方面。
31 4
|
2月前
|
分布式计算 监控 Hadoop
Hadoop-29 ZooKeeper集群 Watcher机制 工作原理 与 ZK基本命令 测试集群效果 3台公网云服务器
Hadoop-29 ZooKeeper集群 Watcher机制 工作原理 与 ZK基本命令 测试集群效果 3台公网云服务器
43 1
|
3月前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
49 2
|
2月前
|
Linux 调度 数据安全/隐私保护
docker的底层原理五: 控制组
本文介绍了Docker中控制组(cgroups)的功能,包括CPU和内存控制、磁盘I/O和网络带宽限制、设备访问控制、审计和报告,以及层次化控制结构,确保容器资源使用的隔离性和限制性。
20 0
|
2月前
|
存储 Linux 数据中心
docker的底层原理四: 资源隔离
本文详细解释了Docker利用Linux内核的Namespace和Cgroups技术实现资源隔离,包括CPU、内存、网络、存储、文件系统、进程间通信、用户和用户组以及进程ID和主机名的隔离,确保容器的独立性和系统的安全性。
56 0