3.愛收藏——系統(tǒng)架構(gòu)
1.簡介
愛收藏系統(tǒng)咒彤,以微服務(wù)為主要技術(shù),系統(tǒng)按照業(yè)務(wù)來劃分模塊咒精,前后端分離镶柱。存儲以關(guān)系型數(shù)據(jù)庫mariadb為主,redis存儲登錄相關(guān)數(shù)據(jù)模叙。前端使用vue開發(fā)歇拆,nginx作為靜態(tài)文件服務(wù)器。使用docker部署,容器按照功能分為基礎(chǔ)服務(wù)故觅、初始化服務(wù)厂庇、后端服務(wù)、前端服務(wù)输吏。使用portainer作為docker管理工具权旷。github作為代碼倉庫。鏡像的構(gòu)建和運維贯溅,使用shell腳本拄氯。
2.架構(gòu)說明
系統(tǒng)分為4大模塊:數(shù)據(jù)層、處理層它浅、展示層译柏、效率工程。整體架構(gòu)圖如下:
2.1數(shù)據(jù)層
數(shù)據(jù)層姐霍,是系統(tǒng)所有數(shù)據(jù)存儲中心鄙麦,使用Mariadb和Redis。
Mariadb邮弹,存儲各個業(yè)務(wù)需要持久化的數(shù)據(jù)黔衡,業(yè)務(wù)包括包括用戶信息、網(wǎng)址信息腌乡。提供一個數(shù)據(jù)庫實例盟劫,有用戶信息、網(wǎng)址信息兩個數(shù)據(jù)庫与纽。
Redis侣签,存儲用戶模塊登錄用戶的信息、其他模塊需要緩存的信息急迂,包括用戶token影所、用戶角色權(quán)限關(guān)系,以及各個模塊需要暫存的信息僚碎。
2.2處理層
按照業(yè)務(wù)來劃分微服務(wù)猴娩,每個微服務(wù)負(fù)責(zé)一個業(yè)務(wù)內(nèi)容。使用spring Cloud技術(shù)實現(xiàn)微服務(wù)勺阐。
微服務(wù)實例包括:
注冊中心:使用Eureka實現(xiàn)注冊中心卷中,用于各個微服務(wù)進(jìn)行服務(wù)注冊和服務(wù)發(fā)現(xiàn)。其他微服務(wù)都需要向注冊中心注冊渊抽,各個微服務(wù)之間的調(diào)用使用FeignClient蟆豫,從注冊中心發(fā)現(xiàn)需要調(diào)用的服務(wù)實例。
認(rèn)證中心:實現(xiàn)用戶懒闷、角色十减、權(quán)限管理栈幸,提供用戶、角色帮辟、權(quán)限的增刪改查接口速址。實現(xiàn)用戶認(rèn)證、鑒權(quán)织阅,提供用戶登錄壳繁、注銷,以及權(quán)限校驗接口荔棉。作為各個微服務(wù)的資源訪問鑒權(quán)中心闹炉,用戶訪問系統(tǒng)資源,會被攔截润樱,再去請求認(rèn)證中心渣触,判斷當(dāng)前用戶是否有訪問該資源的權(quán)限。
網(wǎng)址管理服務(wù):實現(xiàn)首頁網(wǎng)址壹若、個人網(wǎng)址管理嗅钻。提供首頁網(wǎng)址、個人網(wǎng)址的增刪改查接口店展。
系統(tǒng)管理服務(wù):實現(xiàn)訂閱功能养篓,定時發(fā)送訂閱郵件
2.3展示層
使用vue實現(xiàn),界面元素使用ElmentUI赂蕴。主要功能是調(diào)用后端接口柳弄,展示數(shù)據(jù)。
nginx作為前端靜態(tài)文件的服務(wù)器概说,同時作為后端接口的轉(zhuǎn)發(fā)代理和負(fù)載均衡
集成了github登錄功能碧注。
集成了github留言功能,使用github的issue功能實現(xiàn)糖赔。
五萍丐、效率工程
1、docker
鏡像劃分為3類:基礎(chǔ)服務(wù)鏡像放典、初始化鏡像莫湘、后端服務(wù)鏡像逛绵。
基礎(chǔ)服務(wù)鏡像:為系統(tǒng)提供基本服務(wù)的組件漓拾,不包含業(yè)務(wù)數(shù)據(jù)重贺。組件包括Mariadb、Redis声怔、Nginx。
初始化鏡像:系統(tǒng)初始運行需要執(zhí)行的操作舱呻。包括認(rèn)證中心建庫建表sql腳本醋火、網(wǎng)址管理服務(wù)建庫建表sql腳本悠汽、前端靜態(tài)文件。初始化鏡像只需要運行一次芥驳。
后端服務(wù)鏡像:后端各個微服務(wù)柿冲。
docker默認(rèn)是沒有非常友好的可視化界面,為了方便操作和管理鏡像兆旬、容器假抄,使用portainer系統(tǒng)。通過portainer丽猬,可以在界面上管理鏡像宿饱、容器,查看系統(tǒng)運行狀態(tài)脚祟,查看各個容器的日志等操作谬以,替代了在docker中使用命令操作的方式。
2由桌、shell
為了更方便的解決系統(tǒng)開發(fā)部署過程中为黎,一系列的手動操作,使用shell腳本來實現(xiàn)自動化操作行您。shell腳本分為以下幾類:
∶(1)鏡像制作
鏡像制作分為后端服務(wù)鏡像的制作、前端鏡像的制作娃循、mariadb初始化鏡像的制作炕檩。
后端服務(wù)鏡像的制作,shell腳本中先調(diào)用mvn的構(gòu)建方法淮野,將java項目構(gòu)建生成jar包捧书,再使用Dockerfile將jar包打成鏡像。
前端鏡像的制作骤星,shell腳本先調(diào)用npm的構(gòu)建方法经瓷,將前端項目構(gòu)成生成靜態(tài)文件,再使用Dockerfile將靜態(tài)文件打成鏡像洞难。
mariadb初始化鏡像的制作舆吮,shell腳本拷貝sql語句到一個文件夾中,Dockerfile中再將sql拷貝到鏡像中队贱。
再在shell腳本中使用docker save命令將鏡像生成tar包色冀。
(2)系統(tǒng)部署
系統(tǒng)部署shell柱嫌,先加載tar包锋恬,再刪除之前的容器,再部署鏡像编丘。
∮胙А(3)鏡像更新
將本地鏡像打成tar包彤悔,上傳至服務(wù)器,在服務(wù)器上加載鏡像索守。
≡我ぁ(4)系統(tǒng)清除
清除掉系統(tǒng)相關(guān)的容器、鏡像卵佛、掛載文件杨赤。
(5)服務(wù)器登錄
遠(yuǎn)程登錄服務(wù)器截汪。
3.數(shù)據(jù)流程
整個系統(tǒng)的數(shù)據(jù)流程圖如下:
1疾牲、用戶通過瀏覽器訪問愛收藏系統(tǒng)
2、靜態(tài)資源由nginx直接挫鸽,需要請求后端接口由nginx做代理轉(zhuǎn)發(fā)
3说敏、根據(jù)不同url,nginx轉(zhuǎn)發(fā)不同請求到不同服務(wù)上
4丢郊、各個服務(wù)訪問mariadb或者redis請求數(shù)據(jù)
5盔沫、各個服務(wù)會注冊到注冊中心,其他服務(wù)會先從注冊中心找到需要請求的服務(wù)枫匾,再調(diào)用具體服務(wù)