以前写过一篇《搭建ASP.NET Core 2.1与Vue.js结合开发的模板》的文章,是以后端渲染的方式的web应用解决方案,当时受限于了解的技术不够,所以解决方案比较局限。随着项目的深入和团队技术的发展,逐渐找到了用的比较顺手的方案,在此简单记录一下。
前后端分离
前后端分离,简单来讲就是前端和后端的代码分离,也就是技术上做分离,更彻底的就是直接采用物理分离的方式部署。而采用服务端模板技术,比如cshtml ,把C# 、JavaScript 、html、 css都写到一个页面里,稍复杂的页面就无法维护。
这种分离有几个好处:
前后端技术分离,可以由专注前端的开发人员进行开发优化,这样前端的用户体验会更好。
分离开发的情况下,前后端的交互更加清晰,后端的接口简洁,更容易维护。
后端服务不变的情况下,使用一套后端服务,可以支持前端的web页面、移动端App、小程序等访问。
部署
服务器是Linux的centos系统
WX20190114-171646@2x.png
前端web页面
前端页面用的是vue框架,Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统,vue cli 3已经出来有一段时间了,比较成熟,文档也已经比较详细了,所以果断换成vue cli3开发。
vue cli 3的文档https://cli.vuejs.org/zh/guide/
用vue cli开发完页面后,可以构建发布部署了。
我们部署在centos7系统的服务器上,nginx 是一个高性能的HTTP和反向代理服务器,常用于分布式服务器管理。web页面以静态文件的方式放在服务器,nginx当作服务器,静态文件传输会更快,访问量大的情况下,还可以做负载均衡。
Asp.net Core WebAPI
api的开发使用.Net Core 2.2(3.0也即将发布)。
Restful API ,可视化api管理工具是swagger。
ORM框架是EF Core(MySql.Data.EntityFrameworkCore),ASP.NET Core 2.0 通过EF Core使用MySQL数据库
前后端分离的情况下,跨域问题在asp.net core中可以很好的解决。
api开发完成以后,利用Dockerfile构建Docker镜像,push到仓库,在服务器pull镜像,运行容器。
数据库方案
数据库使用MySQL,由于单库单表无法支持项目的大量数据,采用了mycat进行分库分表。可以参考Mycat单库分表。
mycat构建镜像会比较复杂一点,如果不会可以去Docker Hub找现成的镜像。
现阶段,mycat和MySQL8.0不太兼容,需要进行比较复杂的调整(主要是jdbc版本和mysql8.0的密码验证方式),不熟悉的可能无法配置成功可以用mysql5.7,或者等mycat更新(mycat1.6版本还是2016年发布)。
Docker
在服务器上安装Docker(《Docker的简单使用》),大部分程序都以容器化方式部署运行。包括Nginx,WebAPI,Mysql,mycat ...
微服务方向
单机的 Docker 引擎和单一的容器镜像只能解决单一服务的打包和测试问题。而要运行生产级的企业级应用,就需要容器调度管理系统,K8S就是其中一种容器调度管理系统。
Docker与K8S的结合也是微服务开发的一种方向,但是K8S上手难度太高,不是短时间就能够熟练运用的。Java技术栈有强大的spring Cloud开发微服务,asp.net core 也可以与spring Cloud结合开发微服务。
网友评论