Dante Cloud 是国内首个支持阻塞式和响应式融合的微服务。以「高质量代码、低安全漏洞」为核心,采用领域驱动模型(DDD)设计思想,完全基于 Spring 生态全域开源技术和 OAuth2.1 协议,支持智能电视、IoT等物联网设备认证,满足国家三级等保要求、支持接口国密数字信封加解密、防刷、高防XSS和SQL注入等一系列安全体系的多租户微服务解决方案。
[一] 发布背景
Dante Cloud 一直秉承着“简洁、高效、包容、务实”的理念,使用微服务领域及周边相关的各类新兴技术或主流技术进行建设,不断地深耕细作、去粗取精、用心打造。目标是构建一款代码质量高、维护投入低、安全防护强
的,可以帮助用户快速跨越架构技术选型、技术研究探索阶段,降低传统项目中因安全漏洞、技术负债、低质代码等潜在隐患所产生的高维护投入,期望像项目名字寓意一样,在行业变革的时期承上启下,助力企业信息化建设和变革的产品。
Dante Cloud 在之前的版本中,一直采用的是传统的阻塞式开发方式,使用的也是业界主流的技术和组件。虽然,有很多自身独有的亮点功能,但与业界中同类型的产品并没有太大差别。 2023年年底,一网友建议:希望Dante Cloud支持GRPC和WebFlux容器以拉开跟同类型开源框架性能差异。这个建议打开了一个新的思路,因此,进入2024年以后,Dante Cloud 将响应式版本的设计和开发作为重点,努力将响应式相关的一些新的技术融入到产品中来。
经过几个月的不懈努力,终于不负所望,在开源三周年之际,同时支持阻塞式
和响应式
融合生的版本发布了。
[二] 新版本特性
Spring Boot
已升级至 3.3.0Spring Authorization Server
已升级至 1.3.0- 全面采用 Java 21,默认开启虚拟线程,以改善阻塞操作的处理降低系统资源的消耗
- 支持传统的
阻塞式
微服务与基于Reactor
和WebFlux
的响应式
微服务同时运行在一套系统之中 - 不强制使用
响应式
方式开发,可根据自身项目对资源吞吐量、资源消耗、特殊功能性能保障的需求,灵活的选择是采用响应式
还是阻塞式
来开发对应的服务。 - 在保持 Dante Cloud 原有
Spring Authorization Server
深度扩展的各种特性的前提下,实现响应式
服务的动态鉴权与现有体系的完全融合(无需在代码中使用@PreAuthorize
写死权限,全部通过后台动态管理) - 向“响应式编程”转变,基于
Reactor
重构大量核心代码,进一步提升本系统代码质量和运行效能 - 重新架构所有核心组件模块,进一步降低各模块的耦合性,减少第三方组件依赖深度,简化各模块使用的复杂度,使用更贴近 Spring Boot 生态官方写法,提升模块组件的可插拔性以及
响应式
和阻塞式
不同环境下自动配置的适配能力 - 实现
响应式
和阻塞式
不同类型服务,Session 共享体系以及自定义 Session 体系的完美融合(谁说微服务就一定用不到 Session :))。 - 新增
GRPC
服务间调用和通信方式,系统核心服务间调用支持OpenFeign
和GRPC
两种方式,可通过修改配置实现两种方式的切换。 - 基于
RSocket
全面重写 WebSocket 消息系统,实现 WebSocket 的响应式
改造以及与 Spring Security 体系的全面集成。支持多实例、跨服务的私信和广播 - 新增 OAuth2 独立客户端,可用于客户端动态注册以及授权码模式
- 新增基于 Grafana 生态的轻量级日志中心和链路追踪解决方案,使用 OSS 作为数据存储,极大地降低资源需求,可作为原有 Skywalking 和 ELK 重量级体系的备选方案,根据实际需要切换。
- 开放纯手写动态表单功能。可实现BPMN、动态表单、Camunda 流程引擎的串联,实现工作流程运转(目前仅支持简单工作流)
- 开放包含自定义属性面板的 BPMN 在线设计器功能。
- 开放物联网设备认证和管理模块,支持基于 Emqx 的物联网设备通信和管理。
- 开放阿里云内容审核、百度 OCR、环信、Emqx、天眼查、Nacos、PolarisMash等第三方 OpenApi 封装模块
- 前端工程支持 Docker 运行,相关参数可通过配置环境变量修改。已上传至 Docker Hub,可以直接下载运行。
[三] 设计答疑
1. 为什么不做“纯血”响应式
响应式固然有其优势所在,但是使用响应式也不得面对一些现实问题:
- 要做纯血响应式,首先要有生态的保证。目前响应式的接受度还并不是很高,很多组件还都不支持响应式。除非有精力将所有用到的不支持的组件改写一遍,否则很难做到纯血,特别是对于微服务系统来说。
- 绝大多数应用都是需要使用数据库的,Java 领域现有的 orm 组件,要么不支持响应式(比如 JPA)、要么支持的不是特别好(比如 Hibernate)、要么需要自己编写的内容太多(比如 R2DBC),所以从投入产出比的角度说目前在数据层面做响应式并不“划算”
所以,还是要具体看应用系统的类型,在条件不具备的情况下没有必要做到纯血响应式
。
2. 响应式可以带来哪些好处
响应式
对阻塞式
的好处,网上有大把的文章介绍,具体就不赘述了。对于实际应用中比较明显的优势:
响应式
资源的利用效能更高,对于高资源消耗的功能,响应式
的优势更突出- 微服务系统往往会需要集成更多内容,特别在数据层面,可能会存在同时使用多种类型数据存储以及数据的流转和迁移,常规事件驱动与响应式的“流”式思维比传统阻塞式更为契合。
- 响应式可以与事件驱动更好的配合。在 Spring 生态中在多个方面都大量使用了事件驱动,而响应式的核心设计思想也与事件驱动殊途同归。
正因为 Dante Cloud 用了很多 Spring Integration 的内容,传统阻塞式方式越用越别扭,才越来越觉得有必要做响应式支持。如果有时间可以好好看看 Spring Integration,也许会为你打开一个新的世界。
3. 学习响应式编程有哪些难点
- 如果基于 Reactor 学习响应式编程,难点和突破点就在于
Flux
和Mono
两个类。把这两个类的方法用透、弄明白,基本上就可以消除所有开发阻碍了。 - 响应式编程最大的难点就是编程思维的转换,因为习惯了阻塞式编程,一时会很难适应
响应式
的流
式开发思维
世上无难事只怕有心人
[四] Dante Cloud 大事记
总结过往,走向未来!
- 2021.05.15 Dante Cloud 正式开源
- 2021.08.04 完成软件著作权登记
- 2022.02.10 对 Dante Cloud 来了一次“庖丁解牛”,拆解出 Dante Engine 组件库出,为从 Spring Security OAuth2 迁移至 Spring Authorization Server 做前序铺垫。
- 2022.05.20 首个基于 Spring Authorization Server 的、全新架构的 Dante Cloud 版本发布
- 2022.07.01 基于 Vue3、Vite2、Pinia、Quasar2、Typescript、Hooks 等最新技术栈全新构建前端工程正式发布
- 2022.07.30 正式加入 Dromara 开源社区,项目名称由 Eurynome Cloud 更名为 Dante Cloud
- 2022.08.15 Dante Cloud Star 数突破 1K。
- 2022.08.18 陆续迎来 Dante Cloud 首批 Committer (狂练胸肌李大懒、jokeway、未来、Looo、我问这瓜保熟吗、Ymind、tao), 感谢有你,作者从此不再孤单。
- 2022.10.08 基于 pnpm 的 monorepo 模式新版前端上线
- 2022.12.20 发布首个适配 Spring Boot 3 的正式版。
- 2023.04.12 Dante Cloud Star 数突破 1.5K。
- 2023.05.25 全新适配 Spring Boot 3.1.0,开源两周年纪念版本发布
- 2023.12.07 首个适配 Spring Boot 3.2.0 和 Spring Cloud 2023.0.0 的版本发布
- 2023.12.15 陆续迎来 Dante Cloud 新的 Committer(Kaiser_Li、James7、leven-space)
- 2023.12.20 着手规划响应式版本的设计和开发
- 2024.01.01 Dante Cloud Star 数突破 2K
- 2024.04.20 响应式版本首个 RC 版本发布
- 2024.05.23 Dante Cloud 3.1.X 版本停止维护
- 2024.05.28 Dante Cloud 响应式版本正式发布
[五] 其它说明
1. 分支说明
分支名称 | 对应 Spring 生态版本 | 对应 JDK 版本 | 用途 | 现状 |
---|---|---|---|---|
master | Spring Boot 3.3 和 Spring Cloud 2023.0.1 | JDK 17 | 主要发布分支 | 推荐使用代码分支 |
develop | Spring Boot 3.3 和 Spring Cloud 2023.0.1 | JDK 17 | Development 分支 | 新功能、ISSUE 均以此分支作为开发,发布后会 PR 至 master 分支。开发分支不保证可用 |
reactive-master | Spring Boot 3.3 和 Spring Cloud 2023.0.1 | JDK 21 | 响应式主要发布分支 | 推荐使用的响应式代码分支 |
reactive-develop | Spring Boot 3.3 和 Spring Cloud 2023.0.1 | JDK 21 | 响应式 Development 分支 | 下一代响应式微服务版本开发分支。开发分支不保证可用 |
3.1.X | Spring Boot 3.1 和 Spring Cloud 2022.0.X | JDK 17 | 历史代码,不再维护 | 基于 Spring Boot 3.1 时代开发的代码分支,稳定可用,不再维护 |
2.7.X | Spring Boot 2.7 和 Spring Cloud 2021.0.X | JDK 8 | 历史代码,不再维护 | 基于 Spring Boot 2.7 时代开发的代码分支,稳定可用,不再维护 |
spring-security-oauth2 | Spring Boot 2.6 和 Spring Cloud 2021.0.X | JDK 8 | 历史代码,不再维护 | 基于原 Spring Security OAuth2 实现的微服务,稳定可用,因相关组件均不在维护,所以该版本不再维护 |
2. 系统文档
为了更好的帮助大家理解学习 Dante Cloud,新增文档站点 https://www.herodotus.vip 。 该站点目前包含矫正和重新梳理后的系统部署相关内容,后续计划根据系统涉及的详细知识点和模块陆续补充对应设计实现和认知理解相关文章。 原有站点如无特殊原因,仍旧会保留。
欢迎 Star 一波来支持我们!
Gitee:https://gitee.com/dromara/dante-cloud
Github:https://github.com/dromara/dante-cloud