项目分布式部署架构
分布式部署架构总结
架构中核心中间件说明:
Spring Cloud Gateway: 前端(thymeleaf, vue.js, app, weixin h5)该用服务都必须经过网关,这样便于实现统一鉴权,限流,金丝雀发布等,消除以前没有网关时的代码冗余等相关问题。
OpenFeign: 用于实现不同模块之间服务互相调用(sevice-to-service call)
Spring Cloud Consul(类似eureka, zookeeper等): 注册中心
Skywalking: 实现分布式链路跟踪
FastDFS: 分布式文件系统用于实现图片,视频,文档等上传下载。
ElasticJobLite: 实现定时作业调度
Kubernetes集群:现在应用容器化部署
8.RabbitMQ集群:实现分布式消息中心,用于业务解放耦合,异步化等。ELK、Sentry: 日志平台
Maven Nexus: maven私服,用于Java构件,npm包, .net nuget包管理。
项目分层结构
项目分层v2.png
基本原则
前端会用到Vue.js, Thymeleaf
Vue.js前端和后端完全分离
项目分层详细说明
对外接口层:包含dto, enums, @FeignClient,用于其它模块调用
单体应用层:包含内部使用的dto, do(通常也可以叫做entity,或者叫做model),dao, bizinteract, serviceImpl, publicServiceImpl
2.1 dto 定义前端使用到的信息,原则是尽量少地暴露信息,减少前端和后端交互的逻辑。注意:整个领域用到的枚举定义在对外接口层
2.2 do: 定义领域对象,不拘泥于必须和表结构一一对应。
2.3 dao&bizinteract: 这两个其实可以合并为一层,用于访问数据库,redis缓存,es索引,mq队列,甚至是文件系统等等,都需要定义接口和实现,便于代码维护和单元测试。注意:mybatis 访问DB这种情况只有接口。
2.4: mapper: mybatis 访问DB需要的xml mapper。