单体版运行
[一]简介
Dante Cloud 除了提供一套完整的微服务架构以外,还支持以单体架构运行。这里的微服务架构和单体架构并不是分离的两套代码,也不是分离的两个项目。而是完全融合的一整套代码,使用时可以根据需要选择是以微服务模式或者单体模式运行。这是 Dante Cloud 微服务最大的特色之一:“一套代码、两种架构”。
重要
自 v3.3.4.2 版本起,为了减少误解,单体版不再采用独立的代码仓库,相关模块和配置统一合并至微服务版本工程中。在同一工程中,就可以选择启动单体版本或者微服务版。解决原有模式下,需要单独编译微服务版,再开启另一个工程中启动单体版。提升开发和使用的便捷性。
[1]背景
之所以会衍生出 Dante Cloud 单体版(Athena),主要是出于以下两方面考虑:
- 一方面,不管是单独搭建单体后台管理脚手架,还是构建基于 Spring Cloud 的分布式微服务架构,只要是前后端分离并且是基于
Spring Authorization Server
和Spring Security
等 Spring 生态组件构建的系统,使用方式以及大部分代码都是相同的,完全可以通用,没有必要编写两套增加维护工作。 - 另一方面,基于
Spring Boot
和Spring Cloud
的微服务架构,已经成为应用建设的主流方案。但不可否认的是,搭建一套微服务架构所需的基础设施越来越多,也越来越复杂,所需的配套资源也越来越庞大。仅仅是在开发电脑上搭建一套运行开发调试环境,其复杂度和所需的资源也不容小觑。而很多应用特别是小型应用,在早期开发中或者用户量不大的前期,很多情况下一套单体的,前后端分离的后台就足以满足。完全没有必要上一整套微服务,额外增加复杂度。
Dante Cloud 单体版具体以下特点:
- 不需要搭建 Nacos,ELK,Sentinel,Skywalking 等诸多基础设施,只要一个数据库和Redis就可以独立运行,具备微服务架构除分布式以外的所有功能。
- 代码开发调试以及系统运行速度,相较于微服务版本有几倍的提升。
- 只要自己开发的业务代码规范,子模块划分合理,可以快速无缝的从单体架构迁移到微服务架构。
这些特点助于在项目早期快速建设项目、方便开发人员在本地进行开发以及新技术研究。在项目后期随着用户规模增大以及并发需求提升时,快速迁移至微服务模式。
[2]结构
在项目主工程中,模块 dante-monomer-application
就是 Dante Cloud 单体版应用。在 IDEA 中,运行名为 AthenaApplication
的 服务
就可以启动单体版本。
本质上就是搭建了一个标准的 Spring Boot 工程,依赖了 authentication-spring-boot-starter
模块就形成了 Dante Cloud 单体版本的主体结构和主要功能。authentication-spring-boot-starter
模块也是 Dante Cloud 微服务版本中,UAA 服务的核心依赖组件。
通过调整和增减所依赖的核心库中的组件,就可以在单体版本中增加或者删减相关的功能。例如:系统中的对象存储支持,就是通过依赖平台提供的 oss-spring-boot-starter
模块的实现的。
由此可以看出,Dante Cloud 单体版(Athena)是与 Dante Cloud 微服务系统完全融合在一起的,是通过代码的高度抽象和通用化,加上高度策略化的定制自然而然形成的。这也从另外的角度证明了 Dante Cloud 代码的质量和水平
注意
Dante Cloud 单体版(Athena),仍旧是前后端分离的架构。这里为什么强调 前后端分离
?因为,前后端不分离的架构(也就是我们常说的前端页面和后端代码混合在一起的传统单体架构),核心功能均是围绕 Session 进行开发和设计的。这与基于 Token 的、前后端分离架构,在功能设计和开发思维方式方面有较大差异。切记 生搬硬套
[二]后端运行
单体版本后端需要的基础设施组件非常简单,仅需要数据库和Redis即可。这里就略过具体的安装和部署说明,需要了解相关的内容,可以查阅 【环境部署】 章节
[1]创建数据
这里以 PostgreSQL 为例,在 PostgreSQL 自带的命令行工具中,执行以下命令:
// 创建用户 athena 密码是 athena
CREATE USER athena WITH PASSWORD 'athena';
// 创建数据库 athena, 并将用户 athena 分配给该数据
CREATE DATABASE athena OWNER athena;
// 将数据库 athena 的所有权限分配给 athena
GRANT ALL PRIVILEGES ON DATABASE athena TO athena;
[2]编译代码
检出工程代码,进行编译。这里与微服务版本相关操作相同,需要了解相关的内容,可以查阅 【检出代码创建工程章节】 章节
提示
自 3.3.5.0 版本起,为了提升使用的便捷性,单体版代码已经合并至 Herodotus Cloud 工程中。无需再像原来一样,需要检出两个工程,要先编译 Herodotus Cloud 工程代码,才能使用单体版本。
[3]创建数据表
代码检出后,在工程中找到 dante-monomer-application
, 修改工程下 appliation.yml
中相关的配置信息。主要修改数据库连接和Redis连接即可。
然后,启动 AthenaApplication
应用。AthenaApplication
正常启动之后,会自动创建数据表以及自动完成基础信息的采集。
如果看到有数据库表创建,同时
sys_authority
、sys_interface
、sys_attribute
等表中有数据,证明数据库表创建成功。
[4]数据库初始化
在工程中 herodotus-monomer-application
模块下,找到数据库初始化脚本,初始化数据。这里原理与微服务版本相同,如果想要使用自动初始化操作,可以查阅 【数据库初始化】 章节
[5]重置缓存
原理和设计与微服务版本完全想通,可以查阅 【重置缓存】 章节
[6]启动服务
以上步骤操作完成之后,再次启动 AthenaApplication
应用即可以使用。整个安装部署工作就完成了。
[三]前端运行
[1]部署编译
Dante Cloud Athena(单体版)前端与 Dante Cloud(微服务版)前端,使用的是同一套代码。所以,部署方式和运行方式,与微服务版本完全相同,具体可以查阅 前端系统运行 章节。
重要
这里唯一需要注意的是,前端工程有一个参数 VITE_PROJECT
需要进行特别的修改。
VITE_PROJECT
的值,如果是 herodotus
则表示是微服务版,其它任意字符串或者空值指定是单体版
[2]运行验证
Dante Cloud Athena(单体版)前端的运行验证方式也与 Dante Cloud(微服务版)前端完全相同,具体可以查阅 前端系统运行 章节。