项目概述
本项目为前后端分离的火车购票系统。前端使用 Vue 框架,后端使用 Spring Cloud 构建微服务。前端根据不同用户角色暴露出不同操作,以达到用户限权。后端将服务进行细粒度拆分,以降低模块之间的耦合程度,提高开发效率。
项目要求
前端要求
1.前端能够清晰呈现出各项功能;
2.将用户权限之外的功能进行隐藏。
后端要求
1.具有良好扩展性及可维护性;
2.能够迅速发布;
3.能够进行服务控制
项目架构
项目架构如下图所示:
前端首先访问网关,经网关处理请求之后,将请求转发到业务层。
业务层包括:系统管理,订单管理,车票服务,日志及异常处理等模块。业务层与数据库进行交互。
数据库及本项目部署在云服务中。
项目选型
前端选型
前端采用 Vue 框架 + Elment UI。
Vue 为轻量级框架,运行速度快,组件复用性较好。Element UI 具有丰富的CSS 和 JS 组件,封装较完善,能够满足大部分前端交互需求。
后端选型
后端采用 Spring Cloud 构建微服务。Spring Cloud 为目前使用最广泛的微服务构建框架。具体模块选型如下:
网关选型
网关使用 Spring Gateway。
Spring Cloud Gateway 作为 Spring Cloud 生态系统中的网关,目标是替代 Netflix Zuul,其不仅提供统一的路由方式,并且基于 Filter 的方式提供了网关基本的功能,例如:安全,监控/指标,和限流。Spring Gateway 能够较好融入 Spring Cloud 微服务中,故采用 Spring Gateway 作为本项目网关。
服务注册中心选型
服务注册中心采用 Nacos。
Nacos 能够动态配置及服务发现及管理。在 Eureka 进入维护状态之后,Nacos 受到广泛应用。本项目采用 Nacos 作为配置中心及服务注册中心。
数据访问层选型
数据访问层采用 MyBatis Plus。
MyBatis Plus是一种实现 ORM 的框架。封装了 JDBC 中的样板代码。能够实现对数据库连接的管理及JAVA对象与数据库之间的映射。MyBatis Plus 是对 MyBatis 的增强。MyBatis Plus 简化了表单操作,不需写 SQL 语句,内置通用 Mapper,通用 Service,仅通过少量配置可实现表单大部分CRUD操作。本项目采用 MyBatis 实现数据访问层选型。
数据库选型
数据库采用 MySQL。
关系数据库能够确保数据一致,数据持久化到磁盘中,没有数据丢失的风险。MySQL 为关系数据库中使用最多的数据库,性能稳定。本项目采用 MySQL 作为数据库。
云服务选型
云服务采用阿里云 ECS。
阿里云 ECS 能够实现弹性部署,并且安全性较高。本项目采用阿里云作为最终部署平台。
结论
本项目前端采用 Vue + Element UI ;后端采用 Spring Cloud 构建微服务框架。网关采用 Spring Gateway,配置与服务管理采用 Nacos,微服务各模块使用 Spring Boot 开发,数据库采用 MySQL,最终部署至阿里云。能够保证后端各模块业务隔离、单独部署。易于运维及快速迭代。