Dante Cloud 是国内首个支持阻塞式和响应式融合的微服务

ops/2024/9/23 10:46:14/

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.0
  • Spring Authorization Server 已升级至 1.3.0
  • 全面采用 Java 21,默认开启虚拟线程,以改善阻塞操作的处理降低系统资源的消耗
  • 支持传统的阻塞式微服务与基于 ReactorWebFlux响应式微服务同时运行在一套系统之中
  • 不强制使用响应式方式开发,可根据自身项目对资源吞吐量、资源消耗、特殊功能性能保障的需求,灵活的选择是采用响应式还是阻塞式来开发对应的服务。
  • 在保持 Dante Cloud 原有 Spring Authorization Server 深度扩展的各种特性的前提下,实现响应式服务的动态鉴权与现有体系的完全融合(无需在代码中使用@PreAuthorize写死权限,全部通过后台动态管理)
  • 向“响应式编程”转变,基于 Reactor 重构大量核心代码,进一步提升本系统代码质量和运行效能
  • 重新架构所有核心组件模块,进一步降低各模块的耦合性,减少第三方组件依赖深度,简化各模块使用的复杂度,使用更贴近 Spring Boot 生态官方写法,提升模块组件的可插拔性以及响应式阻塞式不同环境下自动配置的适配能力
  • 实现响应式阻塞式不同类型服务,Session 共享体系以及自定义 Session 体系的完美融合(谁说微服务就一定用不到 Session :))。
  • 新增 GRPC 服务间调用和通信方式,系统核心服务间调用支持 OpenFeignGRPC 两种方式,可通过修改配置实现两种方式的切换。
  • 基于 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 学习响应式编程,难点和突破点就在于 FluxMono 两个类。把这两个类的方法用透、弄明白,基本上就可以消除所有开发阻碍了。
  • 响应式编程最大的难点就是编程思维的转换,因为习惯了阻塞式编程,一时会很难适应响应式式开发思维

世上无难事只怕有心人

[四] 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 版本用途现状
masterSpring Boot 3.3 和 Spring Cloud 2023.0.1JDK 17主要发布分支推荐使用代码分支
developSpring Boot 3.3 和 Spring Cloud 2023.0.1JDK 17Development 分支新功能、ISSUE 均以此分支作为开发,发布后会 PR 至 master 分支。开发分支不保证可用
reactive-masterSpring Boot 3.3 和 Spring Cloud 2023.0.1JDK 21响应式主要发布分支推荐使用的响应式代码分支
reactive-developSpring Boot 3.3 和 Spring Cloud 2023.0.1JDK 21响应式 Development 分支下一代响应式微服务版本开发分支。开发分支不保证可用
3.1.XSpring Boot 3.1 和 Spring Cloud 2022.0.XJDK 17历史代码,不再维护基于 Spring Boot 3.1 时代开发的代码分支,稳定可用,不再维护
2.7.XSpring Boot 2.7 和 Spring Cloud 2021.0.XJDK 8历史代码,不再维护基于 Spring Boot 2.7 时代开发的代码分支,稳定可用,不再维护
spring-security-oauth2Spring Boot 2.6 和 Spring Cloud 2021.0.XJDK 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


http://www.ppmy.cn/ops/47204.html

相关文章

sh发送邮件如何通过配置SMTP服务器来实现?

sh发送邮件的操作方法?如何使用Shell脚本自动发信? 在Shell脚本中实现邮件发送功能是一项常见需求,特别是在自动化任务执行或系统监控中。AokSend将介绍如何通过配置SMTP服务器来实现sh发送邮件的方法和注意事项。 sh发送邮件:安…

MySQL之创建高性能的索引(八)

创建高性能的索引 覆盖索引 通常大家都会根据查询的WHERE条件来创建合适的索引,不过这只是索引优化的一个方面。设计优秀的索引应该考虑到整个查询,而不单单是WHERE条件部分。索引确实是一种查找数据的高效方式,但是MySQL也可以使用索引来直…

基于Hadoop平台的大数据可视化分析实现与应用

基于Hadoop平台的大数据可视化分析实现与应用 “Implementation and Application of Big Data Visualization Analysis on the Hadoop Platform” 完整下载链接:基于Hadoop平台的大数据可视化分析实现与应用 文章目录 基于Hadoop平台的大数据可视化分析实现与应用摘要第一章 …

【Python机器学习】无监督学习——数据变换应用

之前已经看过不同类型的变换的作用。现在利用cancer数据集上应用核SVM,先使用MinMaxScaler来预处理数据。 首先加载数据集并将其分为训练集和测试集: import mglearn.plots from sklearn.datasets import load_breast_cancer from sklearn.model_selec…

Python笔记 - generator方法

深入理解Python生成器(Generators) 在Python编程中,生成器(Generators)是一个非常强大且灵活的工具。它们提供了一种创建迭代器的简便方法,使得我们能够高效地处理大量数据。本文将深入探讨Python生成器&a…

GCN 代码解析(一) for pytorch

Graph Convolutional Networks 代码详解 前言一、数据集介绍二、文件整体架构三、GCN代码详解3.1 utils 模块3.2 layers 模块3.3 models 模块3.4 模型的训练代码 总结 前言 在前文中,已经对图卷积神经网络(Graph Convolutional Neural Networks, GCN&am…

闲话 .NET(7):.NET Core 能淘汰 .NET FrameWork 吗?

前言 虽然说,目前 .NET FrameWork 上的大部分类都已经移植到 .NET Core 上,而且 .NET FrameWork 也已经停止了更新,未来必然是 .NET Core 的天下,但要说现在 .NET Core 就能淘汰 .NET FrameWork,我觉得为时尚早&#…

【摩托game】

编写一个完整的摩托游戏代码是一个庞大的项目,涉及复杂的逻辑和资源。在这里,我可以提供一个非常基础的示例,使用Python和Pygame库来创建一个简单的2D摩托游戏。请注意,这只是一个起点,真正的游戏开发需要更多的功能、…