摘要: 前言 哲学有各种各样的流派,百家争鸣,但是只有一个哲学问题是严肃的,那就是生与死。而云端交付过程中也只有三个问题是严肃的。 如何重建你的系统 How to recreate your system? 如何安全地部署你的系统 How to safely change your system? 部署后的问题监控与解决 When something has gone wrong? 在前面的文章中,我们讲述了什么是云端交付,如何搭建从零搭建一个持续交付系统,而今天我们要谈的是如何安全的部署你的系统,部署这个名词包含了很多的含义,最简单的解释就是如何让你的程序运行在最终的环境上。
前言
哲学有各种各样的流派,百家争鸣,但是只有一个哲学问题是严肃的,那就是生与死。而云端交付过程中也只有三个问题是严肃的。
- 如何重建你的系统 How to recreate your system?
- 如何安全地部署你的系统 How to safely change your system?
- 部署后的问题监控与解决 When something has gone wrong?
在前面的文章中,我们讲述了什么是云端交付,如何搭建从零搭建一个持续交付系统,而今天我们要谈的是如何安全的部署你的系统,部署这个名词包含了很多的含义,最简单的解释就是如何让你的程序运行在最终的环境上。但是部署的方式上面有非常多的最佳实践。接下来我们来讨论下常见的几种发布方式,以及如何利用容器发布实现最常用的零宕机发布方式蓝绿发布。
发布策略
常见的发布策略有蓝绿发布、金丝雀发布(灰度发布)、ABTest,在国内的开发者中,对这几个概念有独立的理解。蓝绿发布通常被大家成为热部署;金丝雀发布在国内的名头完全被他的变种发布方式盖过了,主要是灰度发布与ABTtest,下面我们来详细的为大家解释一下他们之间的异同。
蓝绿发布
在发布的过程中用户无感知服务的重启,通常情况下是通过新旧版本并存的方式实现,也就是说在发布的流程中,新的版本和旧的版本是相互热备的,通过切换路由权重的方式(非0即100)实现不同的应用的上线或者下线。
金丝雀发布
通过在线上运行的服务中,新加入少量的新版本的服务,然后从这少量的新版本中快速获得反馈,根据反馈决定最后的交付形态。
灰度发布
灰度发布是通过切换线上并存版本之间的路由权重,逐步从一个版本切换为另一个版本的过程。虽然马丁·扶老耳朵大人认为灰度发布与金丝雀发布是等同的,但是在具体的操作和目的上面个还是有些许差别的。金丝雀发布更倾向于获取快速的反馈,而灰度发布更倾向于从一个版本到另一个版本平稳的切换。
ABTest
ABTest和灰度发布非常像,但是从发布的目的上,可以简单的区分灰度发布与ABTest,ABTest侧重的是从A版本或者B版本之间的差异,并根据这个结果进行决策。最终选择一个版本进行部署。因此和灰度发布相比,ABTest更倾向于去决策,和金丝雀发布相比,ABTest在权重和流量的切换上更灵活。
阿里云容器服务实现蓝绿发布
下面我们通过一个简单的例子来演示蓝绿发布的流程。假设我们要进行蓝绿发布的应用是一个nginx的静态页面,初始的应用模板如下
nginx-v1:
image: 'registry.aliyuncs.com/ringtail/nginx:1.0'
labels:
aliyun.routing.port_80: nginx
restart: always
部署后会有“Welcome to nginx”的成功页面提示。如果用户想变更配置, 可以在操作面板上选择“变更配置”,进入信息修改阶段,选择变更的发布策略与新版本服务的配置。
nginx-v2:
image: 'registry.aliyuncs.com/ringtail/nginx:2.0'
labels:
aliyun.routing.coexist: true
aliyun.routing.port_80: nginx
restart: always
在蓝绿发布中,新版本与旧版本不能共用同一个名字;如果共享同一个路由地址,那么需要添加aliyun.routing.coexist的label,这个label的含义是,当前的服务与其他服务共享路由地址,在蓝绿发布的场景中,为了保证应用的零宕机切换,新版本的服务的路由权重默认为0,需要通过路由管理页面进行调整,方可进行流量切换。
在进行发布的过程中,会经历两个状态,一个是蓝绿发布中,一个是蓝绿发布待确认。“蓝绿发布中”表示,新版本的服务尚未启动完成;而“蓝绿发布待确认”表示新版本的服务已经启动完成,此时需要进行发布确认或者发布回滚方可进行下一次发布。其中,新版本的应用和旧版本的应用并存,前者用绿色标明,后者用蓝色标明。如果一个服务在前后两个版本中都存在且没有变化,那么会使用黄色标记,表示这个应用在蓝绿发布中不会出现任何变化。
选择“路由列表”之后再点击“设置服务权重”,调整与之对应的路由权重。如图所示,旧版本服务的权重为100,新版本服务的权重为0;下面我们将旧版本服务的权重调整为0,新版本服务的权重调整为100。
相关推荐
《魅族持续集成及云端交付之路》是一份深入探讨手机制造商魅族在软件开发过程中的实践与探索的文档。这份资料主要围绕两个核心概念:持续集成(Continuous Integration, CI)和云端交付(Cloud Delivery),旨在阐述...
在上一篇中,和大家一起讨论了传统软件交付的问题、持续交付的难点、以及为什么云端的容器交付可以协助大家快速的持续交付。但是当真正的将一个系统通过云端容器交付的时候会发现不能单纯的将Docker作为一种交付工具...
### 软件工程中的持续集成与交付技术 #### 第1章:软件工程概述 - **定义**:软件工程作为一门学科,涵盖了软件从概念到完成的整个生命周期,包括需求分析、设计、编码、测试、部署及后续维护等多个环节。 - **...
02-5持续部署与发布-3容器技术概述 40. 02-5持续部署与发布-4自动化的实现“一切即代码” 41. 02-5持续部署与发布-5自动化编译构建 42. 02-5持续部署与发布-6制品和包管理 43. 02-5持续部署与发布-7自动化部署 ...
随着应用向云端迁移,持续集成与交付成为一项核心技能。然而,云原生 CI/CD 技术与工具繁多,跨项目迁移难度大,对于缺乏经验技术人员来说,学习曲线陡峭。本文从零带大家掌握CI/CD工具与平台,模拟企业项目流程,...
为了解决这些挑战,企业级微服务平台通常会结合Platform-as-a-Service (PaaS) 平台,以提供访问控制、服务路由、服务注册发现、负载均衡、消息队列、持续集成/持续部署(CI/CD)、运维监控和统一身份验证等功能。...
5. **持续集成/持续部署(CI/CD)**:云端系统可能集成了CI/CD流程,如Jenkins、GitLab CI/CD等,以自动化代码构建、测试和部署,确保快速响应变化和高质量交付。 6. **安全性与隐私保护**:云端系统需要考虑数据加密...
- **持续交付(Continuous Delivery)**:通过自动化测试和部署流程,确保新功能可以快速、安全地集成到生产环境中。 - **微服务架构**:将大型应用程序分解为一系列小型、独立的服务,每个服务都可以独立开发、部署...
灵雀云以容器这个新一代应用交付件为中心,全方位支持云端应用创建、编译、集成、部署、运行的每一个环节。灵雀云采用Docker技术,提供多环境下开发,测试到部署的一站式解决方案,让用户实现持续集成、持续部署,...
### 基于分布式缓存加速容器化深度学习的优化方法 #### 一、引言与背景 近年来,深度学习技术及其应用场景...未来的研究方向可以进一步探索如何优化分布式缓存系统与容器化环境的集成,以应对更多复杂的场景和需求。
- **CI/CD 集成**:集成持续集成/持续交付 (CI/CD) 管道,实现快速、可靠的部署过程。 - **人工智能整合**: - **算法增强**:利用机器学习和深度学习算法增强人体识别技术的准确性和效率。 - **高级生物识别...
4. **持续集成/持续部署(CI/CD)**:Dory-Engine支持与常见的CI/CD工具集成,如Jenkins、GitLab CI等,实现自动化测试、构建和部署流程,加速软件交付周期。 5. **监控与日志管理**:为了提供全面的运维支持,Dory-...
云开发(CloudBase)是腾讯云推出的一种基于云原生技术的一体化服务平台,旨在为开发者提供高效、便捷、安全的云端开发环境。它整合了多种云服务,包括计算、存储、数据库、网络等,将传统的软件开发模式转变为更加...
1. Azure DevOps Services:这是微软提供的一个全方位的云端服务,包括代码管理、版本控制(如Git)、敏捷项目管理、持续集成/持续交付(CI/CD)、测试管理和协作工具等。 2. Azure Repos:用于源代码管理,支持Git...
9. **持续集成/持续部署CI/CD**:阿里云CodePipeline为开发者提供了一站式持续集成和持续部署解决方案,加速软件交付流程,提升团队协作效率。 10. **DevOps工具链**:包括代码托管(CodeHub)、项目管理...
- **微软公司**:全球领先的软件、服务、设备和解决方案供应商,自1975年成立以来持续引领技术创新与变革。 - **合作目的**:响应“大众创业、万众创新”号召,推动长沙市“互联网+”与产业融合,吸引更多科技型创业...
Pivotal将其定义为DevOps加上持续交付、微服务和容器,而CNCF(云原生计算基金会)则强调容器、服务网格、微服务、不可变基础设施和声明式API。阿里云认为,云原生意味着定义云操作系统的API 2.0,重点关注如何构建...