從零開始設(shè)計(jì)和搭建你的體育賽事比分網(wǎng)站 (6) - 部署與運(yùn)維
時(shí)間:2022-08-27 05:45:01 | 來源:網(wǎng)站運(yùn)營
時(shí)間:2022-08-27 05:45:01 來源:網(wǎng)站運(yùn)營
上一篇:從零開始設(shè)計(jì)和搭建你的體育賽事比分網(wǎng)站 (5) - 前后端分離
上一個(gè)模塊中,我們分別認(rèn)識(shí)前后端分離、如何進(jìn)行前后端分離這兩方面進(jìn)行了體育賽事比分網(wǎng)站的前后端分離開發(fā)體系。在本模塊中,我們將從部署與運(yùn)維這方面進(jìn)行如下三個(gè)模塊的介紹。
6 部署與運(yùn)維6.1 Docker 環(huán)境下的前后端分離部署模式首先來介紹一下利用 docker 虛擬機(jī)的容器技術(shù),采用分布式集群部署,達(dá)到高性能、高負(fù)載、高可用的部署方案。包括了 MySQL 集群、Redis 集群、負(fù)載均衡、雙機(jī)熱備等等。其大概的部署模式可見下圖:
其中:
- 項(xiàng)目的持久層可以選擇數(shù)據(jù)庫集群,采用 MySQL 領(lǐng)域中成熟可靠的 PXC(Percona XtraDB Cluster)集群方案;
- 減少數(shù)據(jù)庫 IO 壓力,可以通過 Redis 的 Cluster 集群實(shí)現(xiàn)高速緩存,一般在秒殺、搶購等業(yè)務(wù)中經(jīng)常用到;
- 實(shí)現(xiàn)高性能、高負(fù)載和高可用可以通過將前后端分離項(xiàng)目以集群的方式部署在 Docker 容器中;
- 解決負(fù)載均衡的方案可以考慮 Haproxy 和 Nginx;
- 組建多主機(jī)多容器分布式部署的運(yùn)營平臺(tái),可以通過 Swarm 技術(shù)組件 Docker 集群。
6.2 前后端分離部署可能出現(xiàn)的問題6.2.1 請(qǐng)求跨域前后端分離部署之后,前端只需要 Server 端提供 API URL,這時(shí)候會(huì)產(chǎn)生一個(gè)問題:Ajax 跨域。這時(shí)候就不能使用一般的解決跨域的方法,比如:jsonp,iframe 信使等等,因?yàn)槲覀冞€有 POST 請(qǐng)求。
我們可以使用 Http Proxy 工具類,在 BrowserSync 加入中間件判斷每一個(gè)請(qǐng)求,如果是 /api 前綴就會(huì)代理到 API Server 端,Server 端收到數(shù)據(jù)后再返回給 BrowserSync ,最后由 BrowserSync 返回給瀏覽器,從而解決跨域請(qǐng)求問題。部署時(shí)在前端 WebServer 處理端加入轉(zhuǎn)發(fā)規(guī)則,Nginx 和 Apache 都支持。
6.2.2 靜態(tài)資源路徑如果項(xiàng)目存在用戶上傳資源的功能,比如上傳頭像等。這時(shí)候的用戶資源可以與后端項(xiàng)目放在一起,后端處理完后返回一個(gè)相對(duì)路徑給前端。如果資源較多,需要一臺(tái)單獨(dú)的服務(wù)器,那返回資源的絕對(duì)路徑即可。
6.2.3 會(huì)話問題Web項(xiàng)目中最令人頭疼的問題是無狀態(tài)導(dǎo)致的會(huì)話問題,傳統(tǒng)項(xiàng)目都是用 Session/Cookie,但在前后端分離集群部署模式下存在缺陷。我們可以選擇主流的解決方式:Token,解決這個(gè)問題。
6.3 利用 Jenkins 實(shí)現(xiàn)自動(dòng)化部署與持續(xù)交付 6.3.1 Jenkins 介紹Jenkins 是一個(gè)開源軟件項(xiàng)目,是基于Java開發(fā)的一種可拓展持續(xù)集成工具,主要用于持續(xù)、自動(dòng)地構(gòu)建 / 測(cè)試 / 集成軟件項(xiàng)目以及監(jiān)控一些定時(shí)執(zhí)行的任務(wù)。其前身是 Hudson,它可以方便以下人員:
- 開發(fā)人員:寫好代碼,不需要自己進(jìn)行源碼編譯、打包等工作,直接將代碼分支存放在SVN、GIT 倉庫即可;
- 運(yùn)維人員:減輕人工干預(yù)的錯(cuò)誤率,同時(shí)解放運(yùn)維人員繁雜的上傳代碼、手動(dòng)備份、更新;
- 測(cè)試人員:可以通過jenkins進(jìn)行簡單的代碼以及網(wǎng)站測(cè)試。
6.3.2 持續(xù)集成持續(xù)集成(Continuous integration)是一種軟件開發(fā)實(shí)踐,即團(tuán)隊(duì)開發(fā)成員經(jīng)常集成他們的工作,通過每個(gè)成員每天至少集成一次,也就意味著每天可能會(huì)發(fā)生多次集成。每次集成都通過自動(dòng)化的構(gòu)建(包括編譯,發(fā)布,自動(dòng)化測(cè)試)來驗(yàn)證,從而盡快地發(fā)現(xiàn)集成錯(cuò)誤。一個(gè)標(biāo)準(zhǔn)的持續(xù)集成系統(tǒng)能做到
部署一個(gè) CI 系統(tǒng)需要的最低要求是,一個(gè)可獲取的源代碼的倉庫,一個(gè)包含構(gòu)建腳本的項(xiàng)目。下圖概括了CI系統(tǒng)的基本結(jié)構(gòu):
該系統(tǒng)的各個(gè)組成部分是按如下順序來發(fā)揮作用的:
- 1、開發(fā)者檢入代碼到源代碼倉庫;
- 2、CI 系統(tǒng)會(huì)為每一個(gè)項(xiàng)目創(chuàng)建了一個(gè)單獨(dú)的工作區(qū)。當(dāng)預(yù)設(shè)或請(qǐng)求一次新的構(gòu)建時(shí),它將把源代碼倉庫的源碼存放到對(duì)應(yīng)的工作區(qū);
- 3、CI 系統(tǒng)會(huì)在對(duì)應(yīng)的工作區(qū)內(nèi)執(zhí)行構(gòu)建過程;
- 4、(配置如果存在)構(gòu)建完成后,CI 系統(tǒng)會(huì)在一個(gè)新的構(gòu)件中執(zhí)行定義的一套測(cè)試。 完成后觸發(fā)通知(Email,RSS 等等)給相關(guān)的當(dāng)事人;
- 5、(配置如果存在)如果構(gòu)建成功,這個(gè)構(gòu)件會(huì)被打包并轉(zhuǎn)移到一個(gè)部署目標(biāo)(如服務(wù)器)或存儲(chǔ)為軟件倉庫中的一個(gè)新版本。軟件倉庫可以是 CI 系統(tǒng)的一部分,也可以是一個(gè)外部的倉庫,諸如一個(gè)文件服務(wù)器或者像 http://Java.net、?SourceForge 之類的網(wǎng)站;
- 6、CI 系統(tǒng)通常會(huì)根據(jù)請(qǐng)求發(fā)起相應(yīng)的操作,諸如即時(shí)構(gòu)建、生成報(bào)告,或者檢索一些構(gòu)建好的構(gòu)件。
而 Jenkins 就是這樣一個(gè) CI 系統(tǒng)。
在本模塊中,我們分別從部署模式、部署問題、自動(dòng)化部署三個(gè)部分介紹了如何進(jìn)行網(wǎng)站部署與運(yùn)維。到此我們的《
從零開始設(shè)計(jì)和搭建你的體育賽事比分網(wǎng)站》這一系列就結(jié)束啦。本系列從以下六個(gè)部分介紹了一個(gè)網(wǎng)站項(xiàng)目從設(shè)計(jì)到搭建的完整過程:
- 項(xiàng)目構(gòu)思
- 需求整理
- 原型與架構(gòu)設(shè)計(jì)
- 建表優(yōu)化
- 前后端分離
- 部署與運(yùn)維
筆者沒有選擇過多的從代碼方面上講解網(wǎng)站的搭建,而使從一個(gè)宏觀的角度去介紹整個(gè)流程,讓大家能最直觀的感受到一個(gè)網(wǎng)站是如何設(shè)計(jì)與搭建的,如果大家腦海里還沒有形成網(wǎng)站搭建后的樣子,我在這里可以舉個(gè)相似的 ,大家可以這個(gè)為模板進(jìn)行網(wǎng)站的設(shè)計(jì)和搭建哦。
飛鯨體育數(shù)據(jù) 飛鯨體育數(shù)據(jù) —— 球探網(wǎng)12年匠心打造,實(shí)時(shí)、海量、可靠的體育數(shù)據(jù)服務(wù)
更多技術(shù)干貨敬請(qǐng)關(guān)注:
飛鯨體育數(shù)據(jù)-本站