持续交付 36 讲
王潇俊
携程系统研发部总监
39682 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 42 讲
开篇词 (1讲)
结束语 (1讲)
持续交付 36 讲
15
15
1.0x
00:00/00:00
登录|注册

19 | 发布是持续交付的最后一公里

集群发布流程
单机部署流程
携程选择的发布策略
灰度发布的概念和常用方式
发布系统需求
适用于所有场景的系统设计是不存在的
发布系统的个性化
携程的实践:综合使用滚动发布和金丝雀发布
金丝雀发布
滚动发布
蓝绿发布
重要概念:版本、通知调用方、验证健康
单机部署方案和集群工作流同样重要
快速、易用、稳定、容错力强,能够迅速回滚
发布是一个慢慢滚动向前、逐步生效的过程
部署和发布的区别
总结
其他考量
几种常见的灰度方式
什么是好的发布流程?
发布的需求
发布是持续交付的最后一公里
如何解决发布这个持续交付最后一公里的难题?

该思维导图由 AI 生成,仅供参考

你好,我是王潇俊。我今天分享的主题是:发布是持续交付的最后一公里。
在开始我今天的分享之前,我们先来搞清楚一个问题:部署和发布是不是一回事儿?
有一些观点认为,部署和发布是有区别的,前者是一个技术范畴,而后者则是一种业务决策。这样的理解应该说是正确的。应用被部署,并不代表就是发布了,比如旁路运行(dark launch)方式,对于客户端产品更是如此的。
但对互联网端的产品来说,这个概念就比较模糊了,所以从英文上来看,我们通常既不用 deploy 这个词,也不用 release 这个词,而是使用 rollout 这个词。所以,从用词的选择上,我们就可以知道,发布是一个慢慢滚动向前、逐步生效的过程。
因此,我在《发布及监控》系列文章中提到的“发布”,均泛指 rollout 这样的过程。

发布,头疼的最后一步

无论是为新需求添加的代码,还是静态配置的变更,线上应用的任何变动都要经过发布这道工序才能最终落地,完成交付。通常,发布意味着应用重启、服务中断,这显然不符合如今系统高可用的需求。
同时,软件工程和经验也告诉我们,世界上不存在没有 Bug 的代码,即便经过详尽细致地测试,线下也很难百分之一百地复制线上的环境、依赖、流量,更难穷举千变万化的用户行为组合。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

发布是持续交付的最后一环,是一个技术范畴,也是一种业务决策。在互联网产品中,发布是一个逐步生效的过程,但常伴随着应用重启、服务中断等问题,对系统高可用性构成挑战。随着持续交付的兴起,发布的频繁性使得发布过程的流程化、自动化变得尤为重要。好的发布系统应该是易用、快速、稳定、容错力强,具备快速回滚的能力。在单机部署方案和集群工作流方面,版本、通知调用方、验证健康等概念成为实现目标的基石。集群层面的设计在更高的维度上实现了对单机部署理念的重复,提供了更高的控制能力和A/B测试可能性。文章介绍了蓝绿发布、滚动发布和金丝雀发布等灰度发布方式,以及携程在发布系统上的实践。最终,携程选择了综合使用滚动发布和金丝雀发布的方式。总体而言,发布系统的设计需要考虑到技术细节和业务需求,以实现持续交付的目标。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《持续交付 36 讲》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(8)

  • 最新
  • 精选
  • 衡子
    发布中,会停止服务,如何优雅的停止服务,而不会造成处理中的业务异常?

    作者回复: 优先阻断流量,然后再停止服务

    2019-06-17
    1
  • 禾子先生
    你好,请问要做到滚动和金丝雀发布,通过k8s进行多deployment也能做到吧,那和携程自研的发布系统有什么区别?

    作者回复: 发布方式上是没有区别的,区别在于实现,或者说如何应对现实,比如现实中正在往容器过度,vm将怎么办,它们可不在k8s的管理中,携程自研的好处就是可以同时兼容两者,对用户透明

    2018-08-19
  • rnn
    老师, 请问发布新版本的时候对于数据库表结构的变更如何做到快速回滚呢?
    2018-09-26
    10
  • Jimmysun
    能解释下滚动发布和金丝雀发布的详细区别么?
    2019-01-06
    1
    6
  • 不需往后看
    @cnn,正好了解一点,你想问的问题应该属于 "数据库 migration" 。 java 项目接触过一些,有一个工具叫 liquibase,专门做这个事。 这个工具支持很多功能: diff、变更脚本维护、执行变更、回滚变更等,当然,我现在也没完全搞明白,这块应该如何与持续集成、持续发布结合起来
    2018-12-17
    5
  • J.Smile
    蓝绿发布:发布和验证过程中老版本所在的服务器仍照常服务。 滚动发布:发布过程中同时会有两个版本对外提供服务。 金丝雀发布:从集群中挑选特定服务器或一小批符合要求的特征用户,对其进行版本更新及验证,随后逐步更新剩余服务器。 ----------------------------- 老师,看起来这三种都是新老版本都同时对外服务,还是没看出你说的有啥本质区别? 我只看出了这个意思:蓝绿发布废机器,滚动发布不废机器,金丝雀发布应对特殊用户。
    2020-08-31
    1
    2
  • 王丰
    存手动 原始阶段 打包 ftp 上传服务器 备份线上应用 kill -9 杀掉服务 重启服务
    2020-07-16
    1
  • 山雨淋淋
    安卓整机发布怎么理解,是指整理版本全都分发到用户了?
    2021-03-05
收起评论
显示
设置
留言
8
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部