Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >​DevOps 视角的前后端分离与实战

​DevOps 视角的前后端分离与实战

原创
作者头像
腾讯云 CODING
发布于 2020-11-03 09:31:57
发布于 2020-11-03 09:31:57
1.2K0
举报
文章被收录于专栏:CODING DevOpsCODING DevOps

本文作者:CODING - 廖红坤

前言

随着微前端、微服务等技术理念和架构的蓬勃发展,我们已经没必要去讨论为什么要前后端分离这种话题,前后端分离已成为互联网项目开发的标准模式。前后端在各自的领域发展越来越纵深。

1
1

DevOps 视角的前后端分离

今天我们换个视角,从 DevOps 的角度来聊聊前后端分离。

项目协同

DevOps 体系中包含了敏捷开发方法论,而前后端分离前的开发模式无法做到敏捷。开发过程中前后端强依赖,需多次反复集成才能发布可用版本,违背了敏捷开发“适应性”的特点(适应性即欢迎变化)。此外,前后端串行工作的方式拉长了版本发布周期,违背了敏捷开发“快速发布小版本”的理念。

  • 前后端分离前的协作模式:
  1. 产品经理根据需求出原型
  2. UI 出设计图
  3. 前端做 html 页面
  4. 后端将 html 页面套成 jsp 页面(前后端强依赖,后端必须要等前端的 html 做好才能套 jsp。如果过程中 html 发生变更,后端也要被迫调整,开发效率低)
  5. 集成出现问题
  6. 前端返工
  7. 后端返工
  8. 二次集成
  9. 集成成功
  10. 交付
2
2
  • 分离后的协作模式:
  1. 产品经理根据需求出原型
  2. UI 出设计图
  3. 前后端约定接口、数据和参数
  4. 前后端并行开发(无强依赖,可前后端并行开发,如果需求变更,只要接口和参数不变,就不用两边都修改代码,开发效率高)
  5. 后端 API 自动化测试
  6. 前后端集成
  7. 前端页面调整
  8. 集成成功
  9. 交付
3
3

代码管理

前后端分离后,前后端代码分开管理,后端不需要合并前端代码,减少代码合并冲突问题。此外,前后端分离后,后端可以根据业务类型自由选用编程语言开发不同的组件,实现松耦合,与微服务架构不谋而合。

4
4

测试管理

前后端分离后,对应的测试也分离了。由于后端只输出 api 接口,于是可以很方便的进行自动化测试,提早暴露问题,并且测试成本很低。而前端可以不依赖后端,自己本地 mock 数据,待前后端接口对接后,测试可以开始功能测试。

5
5

交付部署

1913 年,福特汽车开发了世界上第一条流水线,大幅提高了汽车的生产效率,每 24 秒流水线就能制造一辆汽车,实现了汽车的规模化生产,福特也因此成了美国最大的汽车制造商。

交付部署包含持续集成和持续部署,其核心就是流水线。从代码分离开始,前后端就形成了两条并行的流水线,各自独立编译,构建,打包,发布。发布过程中不需要对方在场,出现了问题各自回退。

6
6

从项目协同、代码管理、测试到交付部署,需要一套完整的 DevOps 工具链支撑,比较典型的如 Jira + GitLab + Jenkins + Nexus + Kubernetes,但这些工具之间账户体系、操作习惯互不相通,试想团队每加入一个新成员管理者都要在每个工具平台为其添加账户,新成员也要花时间去逐一熟悉。这对管理者和新人都是不必要的负担。这样的背景下,我们可以采用 CODING 提供的一站式 DevOps SaaS 服务,快速实现前后端分离的 DevOps 最佳实践。

快速实践 DevOps

本文以信奉敏捷开发理念的互联网团队 突突突小分队 为例,基于 CODING DevOps,以项目管理为起点,持续部署为终点演示快速实现前后端分离项目的 DevOps 最佳实践。相关人员:

  • 团队 Leader: 老李
  • 运维:小胖
  • 测试:小莉
  • 后端:大熊
  • 前端:阿强

技术栈:

前提准备

创建项目和代码仓库

2020 年 10 月 26 日早上 11:00 整,突突突小分队 Leader 老李在周会上召开了新项目启动大会,由于是新项目,老李引进了 CODING DevOps 产品,目的是将 DevOps 理念和工作流贯彻到团队实际工作中,规范团队的开发、测试和运维流程,并进一步提升产品发布效率。散会前老李当场创建两个项目分别为 front-backend-cdk8s-yaml,并表示给大家一天的时间了解 CODING DevOps 产品。

7
7

突突突小分队 成员之间配合已经有相当的默契,在了解了 CODING DevOps 产品后,第二天(10 月 27 日)各自开始了有条不紊的工作:

  • 后端大熊在项目 front-backend-cd 中创建后端代码仓库 flask-backend
  • 前端阿强在项目 front-backend-cd 中创建前端代码仓库 react-frontend
  • 运维小胖在项目 k8s-yaml 中创建代码仓库 k8s-yaml
  • 测试小莉整理测试用例,根据 Leader 老李提供的接口文档编写后端 API 自动化测试代码

k8s-yaml 作为独立项目维护的原因是除了 front-backend-cd 项目,k8s-yaml 也管理着其他项目的 Kubernetes yaml 文件,单独建库的目除了方便对 yaml 文件做版本控制,也便于开发和运维职责分明,开发不需要关注太多的运维基础设施(Kubernetes),主要精力放在编码、编译和构建镜像。

持续集成

代码仓库初始化后,后端大熊和前端阿强开始了愉快的编码,同时在完成第一次代码提交前,Leader 老李已经为团队搭建好持续集成,并分别交由大熊和阿强维护。在下班前大熊和阿强完成了脚手架代码,提交了代码合并请求(MR,Merge Request)。

细心的前端阿强发现合并请求详情页正运行一个叫 合并状态检查 的任务,请教 Leader 老李后得知是合并请求触发的自动构建计划, 其作用是:自动构建源分支与目标分支合并后的结果,能够尽可能早地发现集成中的错误。如果合并状态检查失败,评审者不用过早介入代码 review 流程,开发者可以自行检查代码

8
8

合并状态检查处点击 详情 可查看构建计划的执行详情:

9
9

果然,第一次合并状态检查失败,前端阿强根据构建日志,发现了一个低级的字符拼写错误,在内心深深的对自己鄙视一番后,立即修复,再次提交合并请求。

前后端代码经 Leader 老李 review 合并到 release 后,会触发相应的构建计划,其起点都是代码检出,终点是将镜像推送到制品库。

10
10
11
11

持续部署

在后端大熊、前端阿强忙得热火朝天的同时,运维小胖也没有闲着,老李将小胖添加到团队的【运维】用户组,并授予【运维】用户组部署设置权限,小胖跟着 CODING 持续部署的文档开始一步步配置。

阅读更多:CODING CD 帮助文档

12
12
添加云账号

作为云原生的先行团队,突突突小分队很早就采用腾讯云 TKE 作为生产环境,于是运维小胖添加了 TKE 类型的云账号。

13
13
配置应用和部署流程

添加完云账号后,运维小胖根据使用引导跳转到 CODING 部署控制台,分别创建了应用 flaskBackendreactFrontend

14
14

接着配置部署流程,运维小胖将 k8s-yaml 项目中的 manifest 文件以及制品库中的 docker 镜像配置为部署流程制品,并在 Kubernetes 资源部署阶段(Deploy(Manifest)-Deployment)引用。

如图只有以 release- 为前缀的 docker 镜像才会成功匹配为发布制品

15
15

在人工确认阶段,运维小胖将自己设置为确认人,并将测试小莉加入通知人列表。

测试小莉也会接收到人工确认通知,虽然没有权限进行确认操作,但可以对发布过程 review,以降低发布故障率。

16
16
将应用与项目关联

配置部署流程的过程中,由于对 CODING 部署控制台不够熟悉,一些小差错让运维小胖有点烦躁,但这些繁琐的步骤不过是第一次麻烦点,接下来将应用与项目关联后,发布过程就可以交给开发同学提交了,想到这儿小胖露出邪魅的微笑。

17
17

版本发布

新项目启动的第三天(10 月 28 日),测试小莉上班第一件事是查看后端 API 自动化测试报告,中午饭点前前后端完成接口联调,下午小莉在测试环境上完成了功能测试。是时候开始激动人心的 Staging(预发布) 发布了。

Staging 虽然不是最终的生产环境,但在 DevOps 实践中其代码、制品、应用配置等跟生产环境都是保持一致的,除了意外情况,Staging 发布验证无误后,就可以随时发布到生产坏境。

老李新建了一个版本发布,命名为 release-20200428.1(相应地创建了同名的 tag),表示 2020 年 10 月 28 日的第一次发布:

18
18

此 tag 会触发 CI 构建,在 Jenkinsfile 中获取此 tag 的名称并应用到 docker 镜像。

19
19
在项目内提交发布

后端大熊和前端阿强在项目内提交发布单,选择部署流程执行必需的制品(docker 镜像选择最新的版本 release-20200428.1)。

20
20
人工确认

部署流程执行到 人工确认 阶段,Leader 老李和运维小胖收到了人工确认通知,小胖点击部署详情跳转到发布单详情页,确认制品信息无误后点击 继续执行

21
21

2 分 43 秒后,发布成功!

查看发布信息

在【基础设施】->【集群】中查看发布成功的 Deployment 信息,可看到镜像版本与代码版本一致,如果生产环境出现故障,可快速追踪到对应的代码版本,进行修复工作。

22
22

测试小莉早已在运维小胖的提示下本地配置了 hosts,打开浏览器输入 http://react-frontend.com 即可查看发布内容。这样的版本肯定是不能发布到线上的,不过作为前后端分离的 DevOps 最佳实践 Demo,它成功的完成了使命。

23
23

结语

突突突小分队成功在五一劳动节前发布了第一个小版本,这次发布过程中,大家都感觉比以前舒心多了。

  • 后端大熊和前端阿强不需要自己写 k8s manifest,可以将时间和精力专注在业务代码;
  • 而运维小胖也不用像以前和女朋友约会时,还担心开发请自己在测试环境拉取更新镜像,现在他们可以实现自助发布,小胖想如果以后 CODING 开发了 APP,打开手机即可一键完成人工确认操作,那小日子不要太爽;
  • Leader 老李则表示对 CODING DevOps 是相见恨晚呐,早些年手工停服、ftp 上传代码、手工启服的骚操作一去不复返了。

本文涉及的最佳实践要点

  • 前后端代码仓库分离:如本文中的 flask-backendreact-frontend
  • 开发和运维职责分离:运维配置云账号、应用和部署流程,开发提交发布单
  • 从代码管理到制品发布,保持一致的版本规则,生产环境发现故障时可及时追溯相应的代码版本
  • Docker 作为交付标准,保证开发、测试、生产环境依赖一致
  • 运维人员使用独立的 Git 仓库管理 yaml 文件,方便对 yaml 文件做版本控制,开发不需要关心云基础设施

DevOps 泳道图

24
24

参考资料

1、前端开发的历史和趋势:https://github.com/ruanyf/jstraining/blob/master/docs/history.md

2、DevOps 的分与合:https://cloud.tencent.com/developer/article/1610668

3、《凤凰项目:一个 IT 运维的传奇故事》:https://book.douban.com/subject/34820436

4、《DevOps 实践指南》:https://book.douban.com/subject/30186150

点击立即体验高效云上研发工作流

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
​DevOps VS 职责分离
在国内不少的研发组织依然通过职责分离的方式来管理研发团队,这种情况下就会造成团队之间合作效率低下、责任互相推诿等问题。我们翻译了以下这篇文章来与读者们一起探讨 DevOps 与职责分离究竟该如何结合在一起,从而更好地提高研发团队的效率。
腾讯云 CODING
2019/08/08
1.5K0
​DevOps VS 职责分离
​使用 CODING DevOps 全自动部署 Hexo 到 K8S 集群
如何做团队技术文章分享和沉淀?这是一个老生常谈的话题。常见的技术选型可以是 Confluence、Dokuwiki、Gitbook 等。
腾讯云 CODING
2020/07/06
1.9K0
​使用 CODING DevOps 全自动部署 Hexo 到 K8S 集群
​DevOps - 从渐进式交付说起(含实践 Demo)
如果让你主导一款千万、甚至亿级用户产品的功能迭代,你会怎么做?你需要面对的挑战可能来自于:
腾讯云 CODING
2020/06/04
1.2K0
​DevOps - 从渐进式交付说起(含实践 Demo)
​CODING 2.0:为什么我们需要 DevOps
CODING 在前两天的 Kubecon 2019 大会上发布了 CODING 2.0。这背后是 CODING 对研发管理和研发团队组建的思考。从 CODING 成立以来,我们一直在探索“让开发更简单”的方式。把“让开发更简单”这个大愿景进行拆分,具体到可量化的产品目标上去,实际上是希望通过工具的形式,可以减轻开发过程中的重复劳动,提高软件交付的速度与质量。
腾讯云 CODING
2019/06/28
1.4K0
​CODING 2.0:为什么我们需要 DevOps
DevOps 的分与合
抽象的 DevOps “ DevOps 是使软件开发和 IT 团队之间的流程自动化的一组实践,以便他们可以更快,更可靠地构建,测试和发布软件。DevOps 的概念建立在建立团队之间协作文化的基础上,这些团队过去一直在相对孤岛中运作。” 类似于这种的 DevOps 相关的描述听起来特别抽象,非常学术,非常教科书,让人感觉无法落地,不知道该如何入手。很多团队在了解 DevOps,实践 DevOps 的时候不能很好的多维度看待 DevOps,实践的过程也很痛苦,不知道这种新型的理念如何实际提升自己团队的战斗力。
腾讯云serverless团队
2020/04/07
7200
​CODING DevOps + Nginx-ingress 实现自动化灰度发布
在 Kubernetes 上的应用实现灰度发布,最简单的方案是引入官方的 Nginx-ingress 来实现。
腾讯云 CODING
2020/07/23
2.1K1
​CODING DevOps + Nginx-ingress 实现自动化灰度发布
DevOps的分与合(下)
认真评估你的软件的交付机制以及运维团队左移和右移的程度是你选择采用何种 DevOps 分合策略,以及 DevOps 实践是否成功的关键因素。
用户1348170
2021/07/09
6270
运维前后端分离的开发流程
既然说到前后端,其实现在的前后端分离和以前的不大一样了。本来前后端分离要解决的一个痛点是多端支持(电脑端,移动端-IOS,Android等)重复造轮子的现象,这几年逐渐流行起来不是跑偏了,而是在Devops的快速发展下成为了一种新的技术开发模式。
jeanron100
2018/07/26
1.1K0
运维前后端分离的开发流程
浅谈前后端分离(下篇)
上篇主要介绍一下前后端分离的一些优缺点,本篇主要介绍一下前后端分离的一些落地,不过在介绍之前,要先阐述一下在实施前后端分离时,要考虑到一些东西
lyb-geek
2022/03/10
1.2K0
浅谈前后端分离(下篇)
云原生 DevOps,助力企业上云
7x24 小时连轴转已成为运维工程师的常态,故而每年的 7 月 24 日被视为运维日。为致敬运维人,打造开放的运维技术生态,近日 CODING、腾讯云以及 TEG 技术工程事业群联合在深圳举办了首届腾讯运维技术开放日。来自腾讯和 CODING 的运维专家,与五百余名运维爱好者一起,分享交流了云计算时代,腾讯运维的技术沉淀和实践经验。
腾讯云 CODING
2019/09/16
2.2K0
云原生 DevOps,助力企业上云
从0开始,构建前后端分离应用
最近业余时间比较充足1,想开发一个小系统。作为自己的技术积累 后端使用Spring+SpringMVC+Mybatis框架、前端使用Vue+iView作为基础开发一个前后端分离的SPA应用 目录 1、环境搭建 1.1 Maven+Nexus搭建后台构建环境 1.2 前台工程搭建 2、前端开发 2.1基于iView的组件封装 3、后端开发 3.1拦截器的使用 环境简介 由于是个人练习的小项目,因此开发环境设计也很简单。物理环境包括一台dbServer、一台配置服务器、一台应用服务器 服务器名称 服务器IP 操
用户2193479
2018/06/28
8410
为什么前后端分离项目更爱反向代理后端api?
在前后端分离的项目中,很多开发者选择通过反向代理将前端和后端接口统一到一个域名下,而不是为后端接口使用一个新域名,主要是出于以下几个原因:
创意锦囊
2025/01/19
871
为什么一定要前后端分离?
原文: http://www.cnblogs.com/rjzheng/p/9185502.html
Java学习
2018/07/25
9740
为什么一定要前后端分离?
农行 DevOps 实践:制品库对 DevOps 三大流水线的支撑
DevOps 可以提升开发和运维团队间的协作,并且通过自动化和可重复的方式将代码更快地部署到生产。有助于加快组织交付应用和服务的速度。对产品交付、测试、功能开发和维护起到了意义深远的影响。
DevOps时代
2021/05/31
3K0
【前后端分离】
它是软件技术和业务发展到一定的程度,在项目管理工作上必须进行的一种升级,它是一个必然而不是一个偶然,也可是说是公司部门架构的一种调整。前后端开发者只需要提前约定好接口文档(URL、参数、数据类型…),然后分别独立开发即可,在初期前端可以先造假数据进行测试(json),完全不需要依赖后端,后期完成前后端集成即可,实现了前后端应用的解耦合,极大的提升了开发效率。
为了伟大的房产事业
2024/03/15
1440
【前后端分离】
前后端分离及部署1
核心思想是前端html页面通过ajax调用后端的restuful api接口并使用json数据进行交互。
Freedom123
2024/03/29
3120
从Web演化史看前后端分离
前言 随着公有云产品的快速发展,产品线越来越多,功能越来越丰富。但在业务发展的同时,原有的前后端一体的开发模式与架构已经呈现出捉襟见肘的状况。为了能够更好地服务客户,提高产品交付效率,公有云产品组进行了前后端分离工作的探索与实践。在过去的几个月,已经成功实现多个产品的前后端分离交付,一方面提高了产品开发效率,另一方面,也更加明确了前后端开发工程师的职责,使得前后端开发工程师能够更专注于自身领域的技能提升。在本文中,我们主要介绍为什么要做前后端分离以及如何做前后端分离,具体的技术实践我们将在下一篇中介绍。
企鹅号小编
2018/03/01
3K0
从Web演化史看前后端分离
前后端分离实践
前后端分离并不是什么新鲜事,到处都是前后端分离的实践。然而一些历史项目在从一体化 Web 设计转向前后端分离的架构时,仍然不可避免的会遇到各种各样的问题。由于层出不穷的问题,甚至会有团队质疑,一体化好好的,为什么要前后端分离? 说到底,并不是前后分离不好,只是可能不适合,或者说……设计思维还没有转变过来…… 一体式 Web 架构示意 前后分离式 Web 架构示意 为什么要前后端分离 比为什么要前后端分离更现实的问题是什么时候需要前后端分离,即前后端分离的应用场景。 说起这个问题,我想到了 2011
企鹅号小编
2018/02/06
1.6K0
前后端分离实践
前后端分离实践
最早从Web2.0 Ajax技术开始兴起,就有提前后端分离了。从Gmail的单页应用,到现在的单页应用层出不穷。
gglinux
2019/02/23
1.3K0
你真的懂前后端分离吗?
最近这一段时间由于Nodejs的逐渐成熟和日趋稳定,越来越多的公司中的前端团队开始尝试使用Nodejs来练一下手,尝一尝鲜。
用户1093975
2018/07/20
2K0
你真的懂前后端分离吗?
相关推荐
​DevOps VS 职责分离
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档