主頁 > 軟體工程 > DevOps 視角的前后端分離與實戰

DevOps 視角的前后端分離與實戰

2020-11-03 16:20:11 軟體工程

本文作者:CODING - 廖紅坤

前言

隨著微前端、微服務等技術理念和架構的蓬勃發展,我們已經沒必要去討論為什么要前后端分離這種話題,前后端分離已成為互聯網專案開發的標準模式,前后端在各自的領域發展越來越縱深,

1

DevOps 視角的前后端分離

今天我們換個視角,從 DevOps 的角度來聊聊前后端分離,

專案協同

DevOps 體系中包含了敏捷開發方法論,而前后端分離前的開發模式無法做到敏捷,開發程序中前后端強依賴,需多次反復集成才能發布可用版本,違背了敏捷開發“適應性”的特點(適應性即歡迎變化),此外,前后端串行作業的方式拉長了版本發布周期,違背了敏捷開發“快速發布小版本”的理念,

  • 前后端分離前的協作模式:
  1. 產品經理根據需求出原型

  2. UI 出設計圖

  3. 前端做 html 頁面

  4. 后端將 html 頁面套成 jsp 頁面(前后端強依賴,后端必須要等前端的 html 做好才能套 jsp,如果程序中 html 發生變更,后端也要被迫調整,開發效率低)

  5. 集成出現問題

  6. 前端返工

  7. 后端返工

  8. 二次集成

  9. 集成成功

  10. 交付

2

  • 分離后的協作模式:
  1. 產品經理根據需求出原型

  2. UI 出設計圖

  3. 前后端約定介面、資料和引數

  4. 前后端并行開發(無強依賴,可前后端并行開發,如果需求變更,只要介面和引數不變,就不用兩邊都修改代碼,開發效率高)

  5. 后端 API 自動化測驗

  6. 前后端集成

  7. 前端頁面調整

  8. 集成成功

  9. 交付

3

代碼管理

前后端分離后,前后端代碼分開管理,后端不需要合并前端代碼,減少代碼合并沖突問題,此外,前后端分離后,后端可以根據業務型別自由選用編程語言開發不同的組件,實作松耦合,與微服務架構不謀而合,

4

測驗管理

前后端分離后,對應的測驗也分離了,由于后端只輸出 api 介面,于是可以很方便的進行自動化測驗,提早暴露問題,并且測驗成本很低,而前端可以不依賴后端,自己本地 mock 資料,待前后端介面對接后,測驗可以開始功能測驗,

5

交付部署

1913 年,福特汽車開發了世界上第一條流水線,大幅提高了汽車的生產效率,每 24 秒流水線就能制造一輛汽車,實作了汽車的規模化生產,福特也因此成了美國最大的汽車制造商,

交付部署包含持續集成和持續部署,其核心就是流水線,從代碼分離開始,前后端就形成了兩條并行的流水線,各自獨立編譯,構建,打包,發布,發布程序中不需要對方在場,出現了問題各自回退,

6

從專案協同、代碼管理、測驗到交付部署,需要一套完整的 DevOps 工具鏈支撐,比較典型的如 Jira + GitLab + Jenkins + Nexus + Kubernetes,但這些工具之間賬戶體系、操作習慣互不相通,試想團隊每加入一個新成員管理者都要在每個工具平臺為其添加賬戶,新成員也要花時間去逐一熟悉,這對管理者和新人都是不必要的負擔,這樣的背景下,我們可以采用 CODING 提供的一站式 DevOps SaaS 服務,快速實作前后端分離的 DevOps 最佳實踐,

快速實踐 DevOps

本文以信奉敏捷開發理念的互聯網團隊 突突突小分隊 為例,基于 CODING DevOps,以專案管理為起點,持續部署為終點演示快速實作前后端分離專案的 DevOps 最佳實踐,相關人員:

  • 團隊 Leader: 老李
  • 運維:小胖
  • 測驗:小莉
  • 后端:大熊
  • 前端:阿強

技術堆疊:

  • 后端(Python + Flask):https://linrp.coding.net/p/front-back-cd/d/flask-backend/git
  • 前端(React):https://linrp.coding.net/p/front-back-cd/d/react-frontend/git
  • 運維(Docker + Kubernetes):https://linrp.coding.net/p/k8s-yaml/d/k8s-yaml/git

前提準備

  • 使用騰訊云 TKE 創建一個 Kubernetes 集群: https://cloud.tencent.com/document/product/457/11741

創建專案和代碼倉庫

2020 年 10 月 26 日早上 11:00 整,突突突小分隊 Leader 老李在周會上召開了新專案啟動大會,由于是新專案,老李引進了 CODING DevOps 產品,目的是將 DevOps 理念和作業流貫徹到團隊實際作業中,規范團隊的開發、測驗和運維流程,并進一步提升產品發布效率,散會前老李當場創建兩個專案分別為 front-backend-cdk8s-yaml,并表示給大家一天的時間了解 CODING DevOps 產品,

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

合并狀態檢查處點擊 詳情 可查看構建計劃的執行詳情:

9

果然,第一次合并狀態檢查失敗,前端阿強根據構建日志,發現了一個低級的字符拼寫錯誤,在內心深深的對自己鄙視一番后,立即修復,再次提交合并請求,

前后端代碼經 Leader 老李 review 合并到 release 后,會觸發相應的構建計劃,其起點都是代碼檢出,終點是將鏡像推送到制品庫,

10

11

持續部署

在后端大熊、前端阿強忙得熱火朝天的同時,運維小胖也沒有閑著,老李將小胖添加到團隊的【運維】用戶組,并授予【運維】用戶組部署設定權限,小胖跟著 CODING 持續部署的檔案開始一步步配置,

閱讀更多:CODING CD 幫助檔案

12

添加云賬號

作為云原生的先行團隊,突突突小分隊很早就采用騰訊云 TKE 作為生產環境,于是運維小胖添加了 TKE 型別的云賬號,

13

配置應用和部署流程

添加完云賬號后,運維小胖根據使用引導跳轉到 CODING 部署控制臺,分別創建了應用 flaskBackendreactFrontend

14

接著配置部署流程,運維小胖將 k8s-yaml 專案中的 manifest 檔案以及制品庫中的 docker 鏡像配置為部署流程制品,并在 Kubernetes 資源部署階段(Deploy(Manifest)-Deployment)參考,

如圖只有以 release- 為前綴的 docker 鏡像才會成功匹配為發布制品

15

在人工確認階段,運維小胖將自己設定為確認人,并將測驗小莉加入通知人串列,

測驗小莉也會接收到人工確認通知,雖然沒有權限進行確認操作,但可以對發布程序 review,以降低發布故障率,

16

將應用與專案關聯

配置部署流程的程序中,由于對 CODING 部署控制臺不夠熟悉,一些小差錯讓運維小胖有點煩躁,但這些繁瑣的步驟不過是第一次麻煩點,接下來將應用與專案關聯后,發布程序就可以交給開發同學提交了,想到這兒小胖露出邪魅的微笑,

17

版本發布

新專案啟動的第三天(10 月 28 日),測驗小莉上班第一件事是查看后端 API 自動化測驗報告,中午飯點前前后端完成介面聯調,下午小莉在測驗環境上完成了功能測驗,是時候開始激動人心的 Staging(預發布) 發布了,

Staging 雖然不是最終的生產環境,但在 DevOps 實踐中其代碼、制品、應用配置等跟生產環境都是保持一致的,除了意外情況,Staging 發布驗證無誤后,就可以隨時發布到生產壞境,

老李新建了一個版本發布,命名為 release-20200428.1(相應地創建了同名的 tag),表示 2020 年 10 月 28 日的第一次發布:

18

此 tag 會觸發 CI 構建,在 Jenkinsfile 中獲取此 tag 的名稱并應用到 docker 鏡像,

19

在專案內提交發布

后端大熊和前端阿強在專案內提交發布單,選擇部署流程執行必需的制品(docker 鏡像選擇最新的版本 release-20200428.1),

20

人工確認

部署流程執行到 人工確認 階段,Leader 老李和運維小胖收到了人工確認通知,小胖點擊部署詳情跳轉到發布單詳情頁,確認制品資訊無誤后點擊 繼續執行

21

2 分 43 秒后,發布成功!

查看發布資訊

在【基礎設施】->【集群】中查看發布成功的 Deployment 資訊,可看到鏡像版本與代碼版本一致,如果生產環境出現故障,可快速追蹤到對應的代碼版本,進行修復作業,

22

測驗小莉早已在運維小胖的提示下本地配置了 hosts,打開瀏覽器輸入 http://react-frontend.com 即可查看發布內容,這樣的版本肯定是不能發布到線上的,不過作為前后端分離的 DevOps 最佳實踐 Demo,它成功的完成了使命,

23

結語

突突突小分隊成功在五一勞動節前發布了第一個小版本,這次發布程序中,大家都感覺比以前舒心多了,

  • 后端大熊和前端阿強不需要自己寫 k8s manifest,可以將時間和精力專注在業務代碼;
  • 而運維小胖也不用像以前和女朋友約會時,還擔心開發請自己在測驗環境拉取更新鏡像,現在他們可以實作自助發布,小胖想如果以后 CODING 開發了 APP,打開手機即可一鍵完成人工確認操作,那小日子不要太爽;
  • Leader 老李則表示對 CODING DevOps 是相見恨晚吶,早些年手工停服、ftp 上傳代碼、手工啟服的騷操作一去不復返了,

本文涉及的最佳實踐要點

  • 前后端代碼倉庫分離:如本文中的 flask-backendreact-frontend
  • 開發和運維職責分離:運維配置云賬號、應用和部署流程,開發提交發布單
  • 從代碼管理到制品發布,保持一致的版本規則,生產環境發現故障時可及時追溯相應的代碼版本
  • Docker 作為交付標準,保證開發、測驗、生產環境依賴一致
  • 運維人員使用獨立的 Git 倉庫管理 yaml 檔案,方便對 yaml 檔案做版本控制,開發不需要關心云基礎設施

DevOps 泳道圖

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

點擊立即體驗高效云上研發作業流

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/201099.html

標籤:其他

上一篇:DevOps 視角的前后端分離與實戰

下一篇:嵌套回圈-使用萊布尼茲公式計算圓周率python代碼怎么寫

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • Git本地庫既關聯GitHub又關聯Gitee

    創建代碼倉庫 使用gitee舉例(github和gitee差不多) 1.在gitee右上角點擊+,選擇新建倉庫 ? 2.選擇填寫倉庫資訊,然后進行創建 ? 3.服務端已經準備好了,本地開始作準備 (1)Git 全域設定 git config --global user.name "成鈺" git c ......

    uj5u.com 2020-09-10 05:04:14 more
  • CODING DevOps 代碼質量實戰系列第二課,相約周三

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。**《DevOps 代碼質量實戰(PHP 版)》**為 CODING DevOps 代碼質量實戰系列的第二課,同時也是本系列的 PHP ......

    uj5u.com 2020-09-10 05:07:43 more
  • 推薦Scrum書籍

    推薦Scrum書籍 直接上干貨,推薦書籍清單如下(推薦有順序的哦) Scrum指南 Scrum精髓 Scrum敏捷軟體開發 Scrum捷徑 硝煙中的Scrum和XP : 我們如何實施Scrum 敏捷軟體開發:Scrum實戰指南 Scrum要素 大規模Scrum:大規模敏捷組織的設計 用戶故事地圖 用 ......

    uj5u.com 2020-09-10 05:07:45 more
  • CODING DevOps 代碼質量實戰系列最后一課,周四發車

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。 **《DevOps 代碼質量實戰(Java 版)》**為 CODING DevOps 代碼質量實戰系列的最后一課,同時也是本系列的 ......

    uj5u.com 2020-09-10 05:07:52 more
  • 敏捷軟體工程實踐書籍

    Scrum轉型想要做好,第一步先了解并真正落實Scrum,那么我推薦的Scrum書籍是要看懂并實踐的。第二步是團隊的工程實踐要做扎實。 下面推薦工程實踐書單: 重構:改善既有代碼的設計 決議極限編程 : 擁抱變化 代碼整潔代碼 程式員的職業素養 修改代碼的藝術 撰寫可讀代碼的藝術 測驗驅動開發 : ......

    uj5u.com 2020-09-10 05:07:55 more
  • Jenkins+svn+nginx實作windows環境自動部署vue前端專案

    前面文章介紹了Jenkins+svn+tomcat實作自動化部署,現在終于有空抽時間出來寫下Jenkins+svn+nginx實作自動部署vue前端專案。 jenkins的安裝和配置已經在前面文章進行介紹,下面介紹實作vue前端專案需要進行的哪些額外的步驟。 注意:在安裝jenkins和nginx的 ......

    uj5u.com 2020-09-10 05:08:49 more
  • CODING DevOps 微服務專案實戰系列第一課,明天等你

    CODING DevOps 微服務專案實戰系列第一課**《DevOps 微服務專案實戰:DevOps 初體驗》**將由 CODING DevOps 開發工程師 王寬老師 向大家介紹 DevOps 的基本理念,并探討為什么現代開發活動需要 DevOps,同時將以 eShopOnContainers 項 ......

    uj5u.com 2020-09-10 05:09:14 more
  • CODING DevOps 微服務專案實戰系列第二課來啦!

    近年來,工程專案的結構越來越復雜,需要接入合適的持續集成流水線形式,才能滿足更多變的需求,那么如何優雅地使用 CI 能力提升生產效率呢?CODING DevOps 微服務專案實戰系列第二課 《DevOps 微服務專案實戰:CI 進階用法》 將由 CODING DevOps 全堆疊工程師 何晨哲老師 向 ......

    uj5u.com 2020-09-10 05:09:33 more
  • CODING DevOps 微服務專案實戰系列最后一課,周四開講!

    隨著軟體工程越來越復雜化,如何在 Kubernetes 集群進行灰度發布成為了生產部署的”必修課“,而如何實作安全可控、自動化的灰度發布也成為了持續部署重點關注的問題。CODING DevOps 微服務專案實戰系列最后一課:**《DevOps 微服務專案實戰:基于 Nginx-ingress 的自動 ......

    uj5u.com 2020-09-10 05:10:00 more
  • CODING 儀表盤功能正式推出,實作作業資料可視化!

    CODING 儀表盤功能現已正式推出!該功能旨在用一張張統計卡片的形式,統計并展示使用 CODING 中所產生的資料。這意味著無需額外的設定,就可以收集歸納寶貴的作業資料并予之量化分析。這些海量的資料皆會以圖表或串列的方式躍然紙上,方便團隊成員隨時查看各專案的進度、狀態和指標,云端協作迎來真正意義上 ......

    uj5u.com 2020-09-10 05:11:01 more
最新发布
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:41:12 more
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:35:34 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:05:44 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:00:18 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:20:31 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:55 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:18:51 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:00 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:17:55 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:12:06 more