以前寫過一篇《搭建ASP.NET Core 2.1與Vue.js結(jié)合開發(fā)的模板》的文章,是以后端渲染的方式的web應用解決方案转培,當時受限于了解的技術不夠谷市,所以解決方案比較局限。隨著項目的深入和團隊技術的發(fā)展狐树,逐漸找到了用的比較順手的方案作谚,在此簡單記錄一下三娩。
前后端分離
前后端分離,簡單來講就是前端和后端的代碼分離妹懒,也就是技術上做分離雀监,更徹底的就是直接采用物理分離的方式部署。而采用服務端模板技術,比如cshtml 会前,把C# 好乐、JavaScript 、html瓦宜、 css都寫到一個頁面里蔚万,稍復雜的頁面就無法維護。
這種分離有幾個好處:
前后端技術分離临庇,可以由專注前端的開發(fā)人員進行開發(fā)優(yōu)化反璃,這樣前端的用戶體驗會更好。
分離開發(fā)的情況下假夺,前后端的交互更加清晰淮蜈,后端的接口簡潔,更容易維護已卷。
后端服務不變的情況下梧田,使用一套后端服務,可以支持前端的web頁面侧蘸、移動端App裁眯、小程序等訪問。
部署
服務器是Linux的centos系統(tǒng)
前端web頁面
前端頁面用的是vue框架闺魏,Vue CLI 是一個基于 Vue.js 進行快速開發(fā)的完整系統(tǒng),vue cli 3已經(jīng)出來有一段時間了俯画,比較成熟析桥,文檔也已經(jīng)比較詳細了,所以果斷換成vue cli3開發(fā)艰垂。
vue cli 3的文檔https://cli.vuejs.org/zh/guide/
用vue cli開發(fā)完頁面后泡仗,可以構(gòu)建發(fā)布部署了。
我們部署在centos7系統(tǒng)的服務器上猜憎,nginx 是一個高性能的HTTP和反向代理服務器娩怎,常用于分布式服務器管理。web頁面以靜態(tài)文件的方式放在服務器胰柑,nginx當作服務器截亦,靜態(tài)文件傳輸會更快,訪問量大的情況下柬讨,還可以做負載均衡崩瓤。
Asp.net Core WebAPI
api的開發(fā)使用.Net Core 2.2(3.0也即將發(fā)布)。
Restful API 踩官,可視化api管理工具是swagger却桶。
ORM框架是EF Core(MySql.Data.EntityFrameworkCore),ASP.NET Core 2.0 通過EF Core使用MySQL數(shù)據(jù)庫
前后端分離的情況下,跨域問題在asp.net core中可以很好的解決颖系。
api開發(fā)完成以后嗅剖,利用Dockerfile構(gòu)建Docker鏡像,push到倉庫嘁扼,在服務器pull鏡像信粮,運行容器。
數(shù)據(jù)庫方案
數(shù)據(jù)庫使用MySQL偷拔,由于單庫單表無法支持項目的大量數(shù)據(jù)蒋院,采用了mycat進行分庫分表×拢可以參考Mycat單庫分表欺旧。
mycat構(gòu)建鏡像會比較復雜一點,如果不會可以去Docker Hub找現(xiàn)成的鏡像蛤签。
現(xiàn)階段辞友,mycat和MySQL8.0不太兼容,需要進行比較復雜的調(diào)整(主要是jdbc版本和mysql8.0的密碼驗證方式)震肮,不熟悉的可能無法配置成功可以用mysql5.7称龙,或者等mycat更新(mycat1.6版本還是2016年發(fā)布)。
Docker
在服務器上安裝Docker(《Docker的簡單使用》)戳晌,大部分程序都以容器化方式部署運行鲫尊。包括Nginx,WebAPI沦偎,Mysql疫向,mycat ...
微服務方向
單機的 Docker 引擎和單一的容器鏡像只能解決單一服務的打包和測試問題。而要運行生產(chǎn)級的企業(yè)級應用豪嚎,就需要容器調(diào)度管理系統(tǒng)搔驼,K8S就是其中一種容器調(diào)度管理系統(tǒng)。
Docker與K8S的結(jié)合也是微服務開發(fā)的一種方向侈询,但是K8S上手難度太高舌涨,不是短時間就能夠熟練運用的。Java技術棧有強大的spring Cloud開發(fā)微服務扔字,asp.net core 也可以與spring Cloud結(jié)合開發(fā)微服務囊嘉。