DevOps 概述
目录
¶DevOps 概述
目前常用的 DevOps 四大平台:代码托管(gitlab/svn)、项目管理(jira)、运维平台(腾讯蓝鲸/开源平台)、持续交付 ( Jenkins/gitlab)
DevOps 强调团队协作、相互协作、持续发展,然而传统的模式是开发人员只顾开发程序,运维人员只负责基础环境管理和代码部署以及监控等,其并不是为了一个共同的目标而共同实现最终的目的,而 DevOps 则实现团队作战,即无论是开发、运维还是测试,都是为了最终的代码发布、持续部署和业务稳定而付出各自的努力,从而实现产品设计、开发、测试和部署的良性循环,实现产品的最终持续交付
✨ DevOps 的优势:
¶DevOps 的目标是什么?
DevOps 意味着在业务中建立一条 IT 服务供应链,与其它产品的供应链嵌入业务的方式相同。这种从提供软件交付到供给 IT 服务的模式转变是巨大的。
从架构的角度看,DevOps 需要建立一个自动快速部署系统,有很多方法论和工具可以利用。DevOps 没有统一的实施模板,每个组织都不得不自己考虑并建立 DevOps 流程来提高业务。因此,真正理解 DevOps 的概念,对员工遵循正确的流程有效执行来说是至关重要的。
¶持续集成(CI-Continuous Integration)
¶持续部署(CD-Continuous Deployment)
¶持续交付(CD-Continuous Delivery)
持续交付是在持续部署的基础之上,将产品交付到线上环境,因此持续交付是产品价值的一种交付,是产品价值的一种盈利的实现
¶CI/CD 总结
使用 Jenkins 进行软件部署的流程如下,分别需要经过测试环境、预发布环境和生产环境。其中,测试环境比较单一,数据量比较简单;预发布环境:正规的代码流程,还有正规的测试人员进行测试,数据和生产环境几乎一致
¶常见的部署方式
- 最原始的方案:开发自己上传
- 运维自动手动部署:开发给运维,随后运维手动部署
- 半自动化:运维使用脚本复制部署
- 自动化:结合 Web 界面一键部署
DevOps 就是希望越来越多的软件产品能够做到自动化的部署,这样可以加速软件迭代,快速完成软件需求
¶部署策略
软件最终都是要进行发布,随后部署在某台服务器上,但是不同的部署策略将严重影响到软件开发周期等因素,所以追求更短的迭代周期、更高频的发布,就需要发展出适应的 DevOps 要求的发布策略
¶停机发布
✨ 停机发布的特点:
停机发布并不适合互联网公司,因为两次发布的间隔很久,从功能特性提出到进入市场的时间太长,对市场反应不敏感,会在充分竞争的市场里处于下风。每次发布因为要停机,也会带来经济损失
停机发布的最大优势就是部署简单,不需要考虑新旧版本共存时的兼容性问题;但是仍然存在许多劣势:发布过程中。服务不可用;只能在业务低峰期(往往是夜间)发布,并且需要很多团队在一起工作;这种发布出现错误之后很难进行回滚
¶金丝雀发布
金丝雀发布对用户体验影响较小,再金丝雀发布过程中,只有少量用户会受到影响,发布安全能够得到保障;但是由于金丝雀的机器数量比较少,有一些问题并不能有效的暴露出来
¶灰度/滚动发布
灰度发布可以减小发布风险,是一种零宕机时间的发布策略。它通过切换线上并存版本之间的路由权重,逐步从一个版本切换为另一个版本。整个发布过程会持续比较长的时间, 在这段时间内,新旧代码共存,所以在开发过程中,需要考虑版本之间的兼容性,新旧代码共存不能影响功能可用性和用户体验。当新版本代码出现问题时,灰度发布能够比较快的回滚到老版本的代码上
结合特性开关等技术,灰度发布可以实现更复杂灵活的发布策略
- 准备好部署各个阶段的工件,包括:构建工件,测试脚本,配置文件和部署清单文件
- 从负载均衡列表中移除掉「 金丝雀 」服务器
- 升级「 金丝雀 」应用(排掉原有流量并进行部署)
- 对应用进行自动化测试
- 将 「 金丝雀 」服务器重新添加到负载均衡列表中(连通性和健康检查)
- 如果 「 金丝雀 」在线使用测试成功,升级剩余的其他服务器。(否则就回滚) 灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。
灰度发布对用户体验影响比较小, 不需要停机发布、并且能够控制发布风险。但是发布时间会比较长,需要复杂的发布系统和负载均衡器。在发布完成之后还需要考虑新旧版本共存时的兼容性
¶蓝绿发布
👍 蓝绿发布优势:
- 升级切换和回退速度非常快
- 零停机时间
😣 蓝绿发布的不足
- 一次性的全量切换,如果发布出现问题, 会对用户产生比较大的影响
- 需要两倍的机器资源
- 需要中间件和应用自身支持热备集群的流量切换
¶A/B 测试
举个例子,某功能有两个实现版本 A 和 B,通过细粒度的流量控制,把 50% 的用户总是引导到 A 实现上,把剩下的 50% 用户总是引导到 B 实现上,通过比较 A 实现和 B 实现的转化率,最终选择转化率较高的 A 实现作为功能的最终版本
👍 AB 测试发布的优势:
快速实验能力
用户体验影响小
可以使用生产环境流量做测试
可以针对某些特定用户做测试
😣 AB 测试发布的不足:需要较为复杂的业务流量识别和控制能力
需要考虑较为复杂的新旧版本兼容性问题
¶流量隔离环境发布
如下图左侧的灰度发布,App1 的所有机器都有一定概率会路由到出现问题的红色 App2 机器上。而右侧的隔离环境发布中,新版本的代码会先发布在全链路隔离环境中,即使发布中出现问题,也只会影响少量用户。
👍 流量隔离环境发布优势:
- 能够发现一些复杂的, 涉及到多应用的问题
- 出现故障时, 只会影响很小一部分用户
😣 流量隔离环境发布的不足:
- 需要对流量隔离环境进行独立监控
- 系统设计复杂, 需要中间件和链路上的所有应用能够识别业务流量