加入收藏 | 设为首页 | 会员中心 | 我要投稿 好传媒网 (https://www.haochuanmei.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 网站设计 > 教程 > 正文

Spark灰度发布在十万级节点上的实践

发布时间:2018-10-13 21:16:10 所属栏目:教程 来源:技术小能手
导读:【新产品上线啦】51CTO播客,随时随地,碎片化学习 本文介绍了顶级互联网公司数万节点下 Spark 的 CI 与 CD CD 灰度发布实践。包含如何维护源代码,如何维护 Release 多版本,开发版与正式版,以及如何实现灰度发布,如何进行 hotfix 等。为了提高本文内容

如下图所示,基于多分支的 Spark 持续交付方案如下

  • 正常开发在 spark-src.git/master 上进行
  • 每周一通过 fast-forward merge 将 spark-src.git/master 最新代码合并到 spark-src.git/dev。如下图中,第 2 周将 commit 4 及之前所有 commit 合并到 spark-src.git/dev
  • 将 spark-src.git/dev 打包生成 release 并提交到 spark-bin.git/dev 的 spark-${ build # }(如下图中第 2 周的 spark-2) 文件夹内。spark 作为 symbolic,指向该 spark-${ build # }
  • 每周一通过 fast-forward merge 将 spark-src.git/master 一周前最后一个 commit 合并到 spark-src.git/prod。如第 3 周合并 commit 4 及之前的 commit
  • 上一步中,如果 commit 4 后紧临有一个或多个 bugfix commit,均需合并到 spark-src.git/prod 中,因为它们是对 commit 4 进行的 bug fix。后文介绍的 bug fix 流程保证,如果对 commit 4 后发布版本有多个 bug fix,那这多个 bug fix commit 紧密相连,中间不会被正常 commit 分开
  • 将 spark-src.git/prod 打包生成 release 并提交到 spark-bin.git/prod 的 spark-${ build # }(如下图中第 2 周的 spark-2) 文件夹内。spark 作为 symbolic,指向该 spark-${ build # } 

Spark灰度发布在十万级节点上的实践

Continuous Delivery Solution 3

bug fix

在 Staging 环境中发现了 dev 版本的 bug 时,修复及集成和交付方案如下:

  • 如下图中,第 2 周与第 3 周之间在 Staging 环境中发现 dev 版本的 bug,在 spark-src.git/dev(包含 commit 1、2、3、4) 上提交一个 commit(如图中黑色的 commit 9),且 commit message 中包含 bugfix 字样
  • Jenkins 发现该 bugfix 的 commit 后立即执行构建,将 spark-src.git/dev 打包生成 release 并提交到 spark-bin.git/dev 的 spark-${ build # }(如图中的 spark-3) 文件夹内,spark 作为 symbolic,指向该 spark-${ build # }
  • 通过 git checkout master 切换到 spark-src.git/master ,再通过 git rebase dev 将 bugfix 的 commit rebase 到 spark-src.git/master,如果 rebase 发生冲突,通过告警通知开发人员人工介入处理冲突
  • 在一个 release 周期内,如发现多个 dev 版本的 bug,都可按上述方式进行 bug fix,且这几个 bug fix 的 commit 在 spark-src.git/dev上顺序相连。因此它们被 rebase 到 spark-src.git/master 后仍然顺序相连 

Spark灰度发布在十万级节点上的实践

Continuous Delivery Solution 3 bugfix

hot fix

在生产环境中发现了 prod 版本的 bug 时,修复及集成和交付方案如下

  • 在 spark-src.git/prod 中提交一个 commit,且其 commit message 中包含 hotfix 字样
  • Jenkins 发现该 commit 为 hotfix,立即执行构建,将 spark-src.git/prod 打包生成 release 并提交到 spark-bin.git/prod 的 spark-${ build # }(如图中的 spark-3) 文件夹内,spark 作为 symbolic,指向该 spark-${ build # }
  • 通过 git checkout master 切换到 spark-src.git/master,再通过 git rebase prod 将 hotfix rebase 到 spark-src.git/master
  • 在一个 release 周期内,如发现多个 prod 版本的 bug,都可按上述方式进行 hot fix 

Spark灰度发布在十万级节点上的实践

Continuous Delivery Solution 3 hotfix

灰度发布

本文介绍的实践中,不考虑多个版本(经实践检验,多个版本维护成本太高,且一般无必要),只考虑一个 prod 版本,一个 dev 版本

上文介绍的持续发布中,可将 spark-bin.git/dev 部署至需要使用最新版的环境中(不一定是 Staging 环境,可以是部分生产环境)从而实现 dev 版的部署。将 spark-bin.git/prod部署至需要使用稳定版的 prod 环境中

回滚机制

(编辑:好传媒网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读